Skip to content
Products
AI Website Builder New VPS Hosting Cloud Servers Web Hosting Dedicated Servers Domains
Company
About Documentation Support Center Contact Get Started Call +91 75795 45488
Login
Hosting Panel — cPanel & Billing Console Panel — VPS Management
ALL SYSTEMS OPERATIONAL
cPanel

cPanel PHP Handlers Explained: suPHP vs DSO vs LSAPI

Getwebup 5 min read

If you've ever gotten a 500 error right after changing a permission, or wondered why chmod 777 "fixes" a script on one site but throws an Internal Server Error on another, the answer usually isn't your code — it's which PHP handler cPanel is running underneath it.

Most site owners never think about this until something breaks. Then a support tech says "your handler is suPHP, that's why," and it means nothing. Here's what's actually going on, in plain terms.

What a PHP handler actually does

A PHP handler is the piece of software that takes a .php file, runs it, and hands the output back to Apache or LiteSpeed. Every request to a PHP site goes through one. Which handler you're on decides three things:

  • Which user account the script runs as (yours, or the web server's)
  • How strict file and folder permissions need to be
  • How fast requests execute and how much memory they can eat

On shared cPanel hosting, the handler is usually picked by the host at the server level. On a VPS or reseller account with WHM access, you can change it yourself in WHM → MultiPHP Manager (or the older PHP Configuration Editor).

The four handlers, compared

HandlerRuns asFile permissions neededSpeedCommon on
DSO (mod_php)Apache user (nobody)Loose — 777 often "works"Fast, but no per-user isolationOlder shared servers
suPHPYour cPanel userStrict — 644 files, 755 foldersSlow, no opcode cachingSecurity-focused shared hosts
FastCGI (mod_fcgid)Your cPanel userStrict — same as suPHPFaster than suPHP, persistent processesMid-tier shared/VPS setups
LSAPI (LiteSpeed)Your cPanel userStrict — same as suPHPFastest, built-in opcode cachingModern cPanel + LiteSpeed servers

Notice the pattern: DSO is the odd one out. It runs everything as the web server user, so permissions barely matter and it never asks "whose file is this?" Every other handler runs scripts as you, which is safer on shared servers but means permissions have to be exactly right.

Symptom: it worked yesterday, now it's a 500 error

This is the ticket we see most often. A customer FTPs a new plugin, uploads a theme, or restores a backup from another host, and suddenly gets a 500 Internal Server Error or a raw Premature end of script headers line in the error log.

Cause

Nine times out of ten, the files came from a DSO or Windows environment where 777 permissions (or even 666 on files) were normal, and they landed on a suPHP, FastCGI, or LSAPI server that refuses to execute anything writable by "group" or "world." These handlers treat loose permissions as a security risk and simply won't run the script.

The other common cause: someone manually changed the PHP handler in WHM to "fix" a performance issue, and every subdomain on the account inherited permission rules its files were never set up for.

Fix

Reset ownership and permissions to what suPHP/FastCGI/LSAPI expect:

# from an SSH session, run inside your account's home directory
find /home/username/public_html -type d -exec chmod 755 {} \;
find /home/username/public_html -type f -exec chmod 644 {} \;

Exceptions: wp-config.php can stay at 640 for extra safety, and any script that genuinely needs to write files (upload handlers, cache directories) should use 755 on the directory, not 777 on the files.

If you don't have SSH access, cPanel's File Manager has a bulk "Change Permissions" option — select everything under public_html, right-click, and set folders to 755 and files to 644 in one pass.

Symptom: PHP settings in .htaccess or php.ini are ignored

Cause

Under DSO, PHP directives placed in .htaccess using php_value or php_flag work fine because the settings load through Apache's own config layer. Under suPHP, FastCGI, and LSAPI, those same directives throw a 500 error instead of being silently ignored — they have to go in a local php.ini or through cPanel's MultiPHP INI Editor instead.

Fix

Check WHM → MultiPHP Manager (or ask your host) which handler your account runs, then set limits the right way:

  • DSO: php_value memory_limit 256M in .htaccess works as-is.
  • suPHP/FastCGI/LSAPI: create a php.ini in the affected directory, or use cPanel → MultiPHP INI Editor and set the value there instead.

Which handler should you actually use?

For a modern WordPress or WooCommerce site, LSAPI is the right answer if your server runs LiteSpeed — it's faster than suPHP and FastCGI, keeps per-user permission security, and comes with built-in opcode caching so you don't need a separate OPcache setup. If your server runs plain Apache, FastCGI is the best balance of speed and security. Avoid DSO on any site handling untrusted uploads or shared with other accounts — it trades security for a small, no-longer-relevant speed gain.

Prevention

  • Set permissions correctly at upload/restore time (755 dirs, 644 files) instead of reaching for 777 as a first fix.
  • Before moving a site between servers or hosts, ask what handler the new server uses — it changes how you deploy.
  • Keep PHP overrides in php.ini or the MultiPHP INI Editor rather than .htaccess, so they survive a handler change untouched.
  • If you manage multiple accounts on the same VPS, standardize on one handler (LSAPI or FastCGI) so permission rules stay consistent everywhere.

On Getwebup's cPanel and VPS plans, we default new accounts to LSAPI where LiteSpeed is available, precisely so you get per-user isolation without the suPHP performance penalty. If you're seeing 500 errors after a migration or restore, open a ticket with your error log snippet — the handler mismatch is usually visible in the first line.

Frequently asked questions

How do I find out which PHP handler my cPanel account uses?

On a VPS or reseller account, check WHM → MultiPHP Manager, which lists the active handler (DSO, suPHP, FastCGI, or LSAPI) per domain. On regular shared hosting you usually can't change it yourself — ask your host's support, or check your PHP info page for the 'Server API' value (e.g. 'CGI/FastCGI' or 'LiteSpeed V8').

Is it safe to just chmod everything to 777 to make an error go away?

No. On suPHP, FastCGI, and LSAPI servers, 777 permissions can actually cause the handler to refuse execution rather than fix anything, and on any handler it leaves your files writable by every other account on a shared server. Use 755 for directories and 644 for files, and only loosen a specific upload/cache folder if a plugin genuinely requires it.

Why did my site break right after a host or server migration?

The new server almost certainly runs a different PHP handler than your old one. Files that were fine under DSO's relaxed permission model can trigger 500 errors under suPHP/FastCGI/LSAPI. Reset permissions to 755/644 after any migration, and move any php_value directives out of .htaccess into a proper php.ini.

Does switching to LSAPI improve WordPress performance?

Yes, noticeably, if your server runs LiteSpeed. LSAPI keeps PHP processes alive between requests (unlike suPHP, which spawns fresh each time) and includes its own opcode cache, so pages render faster without extra configuration. Pair it with the LiteSpeed Cache plugin for the biggest gain.

#cpanel #php-handler #suphp #lsapi #fastcgi #permissions

Keep reading

Chat with Support