Overview
Plesk makes it possible to run different PHP versions on the same server — even on different domains hosted on the same account. This is one of the more useful things about Plesk compared to bare-server setups, but the options can be confusing if you haven’t configured them before.
The Plesk PHP system has two layers: the PHP version itself (e.g. 8.1, 8.2, 8.3) and the PHP handler (how PHP actually runs — CGI, FastCGI, FPM, etc.). Getting the handler wrong is a very common cause of performance problems and permission errors that look unrelated to PHP. This article covers both layers.
You’ll need this if you’re migrating a WordPress site from an older server, onboarding a legacy PHP app, preparing for a PHP end-of-life cutover, or just trying to figure out why one domain is behaving differently from another.
Prerequisites
- Plesk Obsidian (18.0.x) or later — some UI elements differ on older versions
- Administrator access to Plesk, or reseller/customer access with PHP version switching enabled by the admin
- At least one additional PHP version installed via Plesk’s PHP extensions manager (covered below if you don’t have it yet)
- SSH access recommended for troubleshooting — not required for basic version switching
- If you’re on a managed plan, confirm your host allows PHP handler changes — some managed environments lock this down
Step 1: Check Which PHP Versions Are Installed on the Server
Before you can assign a PHP version to a domain, it has to be installed. Log in to Plesk as an administrator and go to Tools & Settings > PHP Settings. You’ll see a list of every PHP version currently available, along with which handler types are registered for each.
If a version you need isn’t listed, you’ll need to install it. On most Linux VPS setups running Plesk, this means adding it via the Plesk Installer:
- Go to Tools & Settings > Updates and Upgrades
- Click Add/Remove Components
- Expand the PHP Interpreter section
- Check the versions you want to install (e.g. PHP 8.1, 8.2, 8.3)
- Click Continue and let the installer finish
Alternatively, if you have SSH access, you can use the Plesk CLI:
plesk installer --select-release-current --install-component php8.2
This installs PHP 8.2 with all handlers Plesk supports for that version. Replace php8.2 with the version you need.
Step 2: Set the PHP Version for a Specific Domain
This is the most common task — changing PHP for one domain without touching anything else on the server.
- In Plesk, go to Websites & Domains
- Find the domain you want to change and click PHP Settings (it’s listed directly under the domain name)
- In the PHP version dropdown, select the version you want
- Choose your PHP handler (see Step 3 below before doing this)
- Click OK to apply
The change takes effect immediately. You don’t need to restart Apache or Nginx manually — Plesk handles the service reload.
📝 Note: If the PHP Settings link isn’t visible for a domain, the subscription plan may not have PHP version switching enabled. An admin needs to go to Service Plans, edit the relevant plan, and enable PHP version selection under the Hosting tab.
Step 3: Choose the Right PHP Handler
This is where a lot of people get tripped up. The PHP handler controls how your web server executes PHP code, and the wrong choice will cause real problems — slow sites, broken file permissions, or 500 errors that make no sense.
Here’s a practical breakdown of the handlers you’ll see in Plesk:
- PHP-FPM (FastCGI Process Manager) — this is what you want for almost everything. It runs PHP as a separate process pool per domain, which means better performance, proper file ownership, and process isolation. Use this on any modern VPS or dedicated server.
- FastCGI — older than FPM, still works, but doesn’t give you per-domain process pools. Fine for low-traffic sites or legacy apps, but I’d recommend FPM if it’s available.
- CGI — slowest option. Each PHP request spawns a new process. Only useful in very specific legacy situations.
- mod_php (Apache module) — runs PHP inside the Apache process. Fastest raw execution, but PHP runs as the Apache user, not the domain user. This breaks file permission logic on shared-style setups and is a security concern on multi-tenant servers. Avoid it unless you have a specific reason.
⚠ Warning: Switching from mod_php to PHP-FPM on a live site can change the effective user that PHP runs as. If your application writes files (uploads, cache, logs), those files may have been created as the Apache user (apache or www-data). After switching to FPM, your app will run as the domain system user and may not be able to write to those directories. Check file ownership with ls -la in your web root and fix with chown if needed.
Step 4: Change PHP Settings Globally (Server-Wide Default)
If you want all new domains to use a specific PHP version and handler by default, set it at the service plan level.
- Go to Service Plans (under the main menu)
- Click the plan you want to edit, or create a new one
- Go to the Hosting Parameters tab
- Set PHP version and PHP handler under the PHP section
- Click Update & Sync — this applies the change to all existing subscriptions under that plan
📝 Note: “Update & Sync” will override per-domain PHP settings for every subscription under that plan. If some domains are running a different version intentionally, sync them back individually after.
Step 5: Verify the Active PHP Version
Don’t trust the UI alone. Verify what PHP is actually running for a domain by creating a quick info file:
# SSH into the server and drop a phpinfo file in the domain's web root
echo '<?php phpinfo(); ?>' > /var/www/vhosts/yourdomain.com/httpdocs/phpinfo.php
Then visit https://yourdomain.com/phpinfo.php in a browser. You’ll see the exact PHP version and handler at the top of the page. Delete the file immediately after — leaving phpinfo exposed on a live site is a security issue.
rm /var/www/vhosts/yourdomain.com/httpdocs/phpinfo.php
You can also check from the CLI without touching the web root:
plesk php --version
This shows the CLI PHP version Plesk itself uses, not the per-domain version. For per-domain CLI execution, specify the full binary path, e.g. /opt/plesk/php/8.2/bin/php -v.
Common Issues & Troubleshooting
PHP version dropdown is greyed out or missing
The customer doesn’t have permission to switch PHP versions. In Plesk admin, go to Service Plans > [Plan Name] > Hosting Parameters and make sure PHP version selection is set to Allowed. If the site is on a custom subscription rather than a plan, go directly to the subscription’s Permissions tab.
Site shows a 500 Internal Server Error after switching PHP versions
Usually caused by a PHP extension that’s available in the old version but not installed in the new one. Go to PHP Settings for the domain and check the Extensions tab — enable anything the app needs (e.g. mysqli, gd, intl, zip). You can also check the error log at /var/www/vhosts/yourdomain.com/logs/error_log — it’ll usually name the missing extension directly.
PHP-FPM pool fails to start after enabling it
This annoyingly common issue usually comes down to a socket or port conflict, or the FPM config picking up a bad value from the domain settings. Check the FPM log:
journalctl -u plesk-php82-fpm --since "10 minutes ago"
Replace 82 with your version number. Common causes: a max_children value set too high for available RAM, or a socket path that’s too long (Linux has a 108-character limit on Unix socket paths). Plesk generates socket paths based on the subscription ID, so this rarely happens — but it can on servers with unusual domain configurations.
WP-CLI or Composer is using the wrong PHP version
Command-line tools pick up the system’s default PHP, not the per-domain Plesk setting. Specify the exact binary when running CLI commands:
/opt/plesk/php/8.2/bin/php /usr/local/bin/wp --info --path=/var/www/vhosts/yourdomain.com/httpdocs
/opt/plesk/php/8.2/bin/php /usr/local/bin/composer install
If you need this permanently for a domain’s cron jobs, set the full path in the cron command rather than relying on the system php symlink.
PHP settings changes aren’t taking effect
Plesk caches PHP configuration. If you’ve changed a php.ini value and it’s not reflecting, restart the relevant FPM service:
plesk repair web yourdomain.com -y
This command reconfigures the web server and PHP handler for that domain, which is almost always faster than trying to track down which config file needs a manual reload.
A Note on PHP End-of-Life Versions
As of 2026, PHP 7.4 and 8.0 are both past end-of-life and no longer receive security patches. If any of your domains are still on those versions, you’ll see a warning badge in the Plesk PHP Settings panel. I’d recommend scheduling a migration to at least PHP 8.2 — it’s well-supported, faster than 7.x, and most major frameworks and CMS platforms have been compatible with it for years.
If you’re managing multiple sites across different PHP versions and need more control over the underlying server, our VPS SSD Hosting plans give you full root access alongside Plesk, so you’re not limited by shared environment restrictions when managing PHP stacks.
Frequently Asked Questions
Can I run PHP 7.4 and PHP 8.2 on the same Plesk server at the same time?
Yes, Plesk supports multiple PHP versions simultaneously on the same server. Each domain can be assigned its own version independently. Just make sure both versions are installed via the Plesk Installer or CLI before trying to assign them.
What is PHP-FPM and should I use it in Plesk?
PHP-FPM (FastCGI Process Manager) is a PHP handler that runs PHP as a dedicated process pool separate from your web server. It’s faster than CGI and more secure than mod_php on multi-domain servers because each domain can run under its own system user. For most modern setups — WordPress, Laravel, Magento — PHP-FPM is the right choice.
How do I change the PHP version for just one domain in Plesk without affecting others?
Go to Websites & Domains, click PHP Settings under the domain you want to change, then select a different version from the dropdown and click OK. Changes are per-domain and won’t affect any other site on the server.
Where is the php.ini file for a specific domain in Plesk?
Plesk uses per-domain PHP configuration stored at /var/www/vhosts/yourdomain.com/etc/php.ini (for CGI/FastCGI modes) or applies settings through the Plesk PHP Settings panel for FPM. You can also manage php.ini values directly in Plesk under PHP Settings > Additional directives, which is safer than editing the file manually.
Why does my PHP version change revert back after a service plan sync in Plesk?
When a Plesk admin runs Update & Sync on a service plan, all subscriptions under that plan inherit the plan’s PHP settings, overriding any per-domain customisations. To keep a domain on a specific version, either set it back manually after the sync or move that domain to a separate plan that has the correct PHP version set as the default.