Articles in this section

How to apply new PHP handler to multiple domains via CLI in Plesk for Linux?

kb: how-to Plesk for Linux

Applicable to:

  • Plesk for Linux

Question

How to change the PHP version for multiple domains or for certain domains via CLI in Plesk for Linux?

Answer

Warning: The solution described in this article will restart the web services each time the PHP handler is assigned to the domains, consider applying the solution in maintenance time frame to avoid any downtime

Replace PHP handlers conditionally
  1. Connect to the server via SSH

  2. Download the PHP script from article attachments:

    # curl -OL https://raw.githubusercontent.com/plesk/kb-scripts/master/apply-phphandler-multidomain/switch_php_handler.php

  3. Get the PHP Handler ID of the enabled PHP versions available in the Plesk server:

    # plesk bin php_handler --list 2>/dev/null | grep enabled | awk '{print $1}'
    plesk-php74-fastcgi
    plesk-php74-fpm
    plesk-php80-fastcgi
    plesk-php80-fpm

  4. Check the available command arguments:

    # plesk php switch_php_handler.php --help
    [i] Available command arguments:
    --old (Required) Current PHP Handler ID assigned to the domains
    --new (Required) New PHP Handler ID to be assigned to the domains
    --ngx (Default: false) Set this variable to true when the PHP FPM Handler has to be managed by Nginx
    --include-disabled (Default: false) Set this variable to true when the PHP Handler must be updated to the domains with PHP disabled

    [i] Check installed and enabled PHP handlers with the following command:
    plesk bin php_handler --list

  5. Switch the PHP handlers according to the requirements. For example, this command will switch domains with PHP enabled and disabled from Plesk PHP-FPM 7.4 to Plesk PHP-FPM 8.0:

    # plesk php switch_php_handler.php --old plesk-php74-fpm --new plesk-php80-fpm --include-disabled true

Switch the PHP version from a domain list
  1. Connect to the server via SSH

  2. Get the PHP Handler ID of the enabled PHP versions available in the Plesk server:

    # plesk bin php_handler --list 2>/dev/null | grep enabled | awk '{print $1}'
    plesk-php74-fastcgi
    plesk-php74-fpm
    plesk-php80-fastcgi
    plesk-php80-fpm

  3. Create a file including the domains with hosting enabled:

    Warning: Edit the file /root/domains_hosting_php_enabled.txt and/or /root/domains_hosting_php_disabled.txt and remove the domains that should not be changed

    • Domains with the hosting and PHP enabled:

      # plesk db -Ne "SELECT d.name FROM domains d, hosting h WHERE d.id=h.dom_id AND d.htype = 'vrt_hst' AND h.php='true'" > /root/domains_hosting_php_enabled.txt

    • Domains with the hosting enabled but PHP disabled:

      # plesk db -Ne "SELECT d.name FROM domains d, hosting h WHERE d.id=h.dom_id AND d.htype = 'vrt_hst' AND h.php='false'" > /root/domains_hosting_php_disabled.txt

  4. Run the command below to change the PHP handler for all domains included in the respective files:

    Note: Change the plesk-php80-fpm directive to the required PHP Handler ID retrieved from the 2nd step and specify the nginx-serve-php value keeping in mind that it must be set to false when a PHP FastCGI handler is assigned

    • Domains with the hosting and PHP enabled:

      # cat /root/domains_hosting_php_enabled.txt | while read i; do echo "[+] Updating domain: $i"; plesk bin domain -u $i -php_handler_id plesk-php80-fpm -nginx-serve-php false; done

    • Domains with the hosting enabled but PHP disabled:

      # cat /root/domains_hosting_php_disabled.txt | while read i; do echo "[+] Updating domain: $i"; plesk bin domain -u $i -php true -php_handler_id plesk-php80-fpm -nginx-serve-php false; plesk bin domain -u $i -php false; done

Was this article helpful?

Comments

0 comments

Please sign in to leave a comment.