Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
litespeed_wiki:php:per-user-php-ini [2019/05/28 18:12]
Jackson Zhang
litespeed_wiki:php:per-user-php-ini [2020/01/01 15:13] (current)
George Wang [8. Use of ''disable_functions'']
Line 4: Line 4:
  
 The following steps show you how to do it when you are running off LSWS-native configs or running LiteSpeed Web Server (LSWS) off of Apache configurations. If running LSWS using native configs, please take a look at the [[litespeed_wiki:​php:​per-user-php-ini#​notes|Notes]] section. The following steps show you how to do it when you are running off LSWS-native configs or running LiteSpeed Web Server (LSWS) off of Apache configurations. If running LSWS using native configs, please take a look at the [[litespeed_wiki:​php:​per-user-php-ini#​notes|Notes]] section.
 +
 +=====  Supports cPanel MultiPHP INI Editor out of the box =====
 +When a user logs in to cPanel and edits PHP settings through cPanel'​s [[https://​documentation.cpanel.net/​display/​82Docs/​MultiPHP+INI+Editor+for+cPanel|MultiPHP INI Editor]] (**cPanel > Home > Software > MultiPHP INI Editor**), the editor will save changes to three files in ''/​home/​$USER/​public_html/'':​ the ''​php.ini''​ file, the ''​user.ini''​ file, and the ''​.htaccess''​ file. 
 +
 +For example:
 +  [/​home/​blogu1/​public_html]#​ ll
 +  -rw-r--r-- ​ 1 blogu1 blogu1 4484 Aug 29 12:25 .htaccess
 +  -rw-r--r-- ​ 1 blogu1 blogu1 ​ 576 Aug 29 12:25 php.ini
 +  -rw-r--r-- ​ 1 blogu1 blogu1 ​ 582 Aug 29 12:25 .user.ini
 +
 +in .htaccess
 +  # BEGIN cPanel-generated php ini directives, do not edit
 +  # Manual editing of this file may result in unexpected behavior.
 +  # To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
 +  # For more information,​ read our documentation (https://​go.cpanel.net/​EA4ModifyINI)
 +  <​IfModule php7_module>​
 +   ​php_flag display_errors Off
 +   ​php_value max_execution_time 57
 +   ​php_value max_input_time 60
 +   ​php_value max_input_vars 1000
 +   ​php_value memory_limit 33M
 +   ​php_value post_max_size 8M
 +   ​php_value session.gc_maxlifetime 1440
 +   ​php_value session.save_path "/​var/​cpanel/​php/​sessions/​ea-php72"​
 +   ​php_value upload_max_filesize 2M
 +   ​php_flag zlib.output_compression Off
 +  </​IfModule>​
 +  <​IfModule lsapi_module>​
 +   ​php_flag display_errors Off
 +   ​php_value max_execution_time 57
 +   ​php_value max_input_time 60
 +   ​php_value max_input_vars 1000
 +   ​php_value memory_limit 33M
 +   ​php_value post_max_size 8M
 +   ​php_value session.gc_maxlifetime 1440
 +   ​php_value session.save_path "/​var/​cpanel/​php/​sessions/​ea-php72"​
 +   ​php_value upload_max_filesize 2M
 +   ​php_flag zlib.output_compression Off
 +  </​IfModule>​
 +  # END cPanel-generated php ini directives, do not edit
 +
 +in .user.ini ​
 +  ; cPanel-generated php ini directives, do not edit
 +  ; Manual editing of this file may result in unexpected behavior.
 +  ; To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
 +  ; For more information,​ read our documentation (https://​go.cpanel.net/​EA4ModifyINI)
 +  [PHP]
 +  display_errors = Off
 +  max_execution_time = 57
 +  max_input_time = 60
 +  max_input_vars = 1000
 +  memory_limit = 33M
 +  post_max_size = 8M
 +  session.gc_maxlifetime = 1440
 +  session.save_path = "/​var/​cpanel/​php/​sessions/​ea-php72"​
 +  upload_max_filesize = 2M
 +  zlib.output_compression = Off
 +                             
 +in  php.ini
 +  ; cPanel-generated php ini directives, do not edit
 +  ; Manual editing of this file may result in unexpected behavior.
 +  ; To make changes to this file, use the cPanel MultiPHP INI Editor (Home >> Software >> MultiPHP INI Editor)
 +  ; For more information,​ read our documentation (https://​go.cpanel.net/​EA4ModifyINI)
 +  display_errors = Off
 +  max_execution_time = 57
 +  max_input_time = 60
 +  max_input_vars = 1000
 +  memory_limit = 33M
 +  post_max_size = 8M
 +  session.gc_maxlifetime = 1440
 +  session.save_path = "/​var/​cpanel/​php/​sessions/​ea-php72"​
 +  upload_max_filesize = 2M
 +  zlib.output_compression = Off
 +
 +You probably noticed that the same changes are being saved to three different files at the same time. This is because different PHP handlers will use different files to apply the settings. A user may change the handler at some point, and the three files will be udated accordingly to ensure the cPanel MultiPHP INI Editor settings will continue to apply.
 +
 +Apache SuPHP uses php.ini. ​
 +
 +Apache PHP CGI and PHP-fpm use .user.ini. ​
 +
 +CloudLinux mod_lsapi for Apache uses .htaccess. ​
 +
 +LiteSpeed uses .htaccess.  ​
 +
 +LiteSpeed is compatible with cPanel MultiPHP INI Editor out of the box with no extra configuration required. Please also keep in mind that you cannot manually change settings in any of the files through SSH. You must use cPanel MultiPhP INI Editor GUI to make any changes for your test.
 +
 +If at any time you explicitly want to apply ''/​home/​$USER/​public_html/​php.ini'',​ regardless of the cPanel default multi-file implementation,​ you will need to use ''​PHP_INI_SCAN_DIR''​ to manually set it up as instructed later in this wiki. However, this is not recommended,​ and you are encouraged to just use cPanel MultiPHP INI Editor.
  
 ===== 1. Define PHPRC or PHP_INI_SCAN_DIR for a domain on cPanel server ===== ===== 1. Define PHPRC or PHP_INI_SCAN_DIR for a domain on cPanel server =====
Line 65: Line 152:
 ===== 3. Define PHP_INI_SCAN_DIR at the Server Level in the WebAdmin Console ===== ===== 3. Define PHP_INI_SCAN_DIR at the Server Level in the WebAdmin Console =====
  
-Using the PHP_INI_SCAN_DIR environment variable allows you to use a variable that can set a standard location for the php.ini file in each virtual host. Unlike the PHPRC environment variable, though, PHP_INI_SCAN_DIR allows the use of the global php.ini file with the addition of a per-user php.ini.+Using the ''​PHP_INI_SCAN_DIR'' ​environment variable allows you to set a standard location for the php.ini file for each virtual host. Unlike the ''​PHPRC'' ​environment variable, though, ​''​PHP_INI_SCAN_DIR'' ​allows the use of the global php.ini file with the addition of a per-user php.ini.
  
-In your external application Environment setting (WebAdmin console > Server > External App > lsphp5)enter: ''​PHP_INI_SCAN_DIR=variable/​php.ini/​directory''​+In a control panel environment such as with cPanelea-phpxx will normally load the main php.ini, then scan additional .ini files, like in this example with ea-php73:
  
-Example:+{{ :litespeed_wiki:​php:​per-user-php-ini-additional-ini1.png?​800 |}}
  
-  ​PHP_INI_SCAN_DIR=$VH_ROOT/​public_html+To avoid missing any additional folders when scanning from ''/​opt/​cpanel/​ea-php73/​root/​etc/​php.d'',​ you should specify multiple additional scanning folders in ''​PHP_INI_SCAN_DIR'',​ separating them with '':''​.  
 + 
 +In your external application **Environment** setting (**WebAdmin Console > Server > External App > lsphp73**), enter:  
 + 
 +  ​PHP_INI_SCAN_DIR=/​opt/​cpanel/​ea-php73/​root/​etc/​php.d:​$VH_ROOT/​public_html 
 +or simply: 
 +  PHP_INI_SCAN_DIR=:​$VH_ROOT/​public_html ​  
 +{{ :​litespeed_wiki:​php:​per-user-php-ini-additional-ini2.png?​800 |}} 
 + 
 +After you save the change and restart LSWS, the phpinfo page of the accounts using lsphp73 should change to something similar to the following by scanning additional ''​.ini''​ for additional folders from ''​$VH_ROOT/​public_html'':​ 
 +{{ :​litespeed_wiki:​php:​per-user-php-ini-additional-ini3.png?​800 |}}
  
 The variables available for use are: The variables available for use are:
  
-  - $VH_ROOT: the virtual host's home directory +  - ''​$VH_ROOT''​: the virtual host's home directory 
-  - $VH_NAME: the virtual host's domain +  - ''​$VH_NAME''​: the virtual host's domain 
-  - $VH_USER: the virtual host's user+  - ''​$VH_USER''​: the virtual host's user
  
  ​**Note:​** ​  ​**Note:​** ​
-  * This method is not recommended if you replace Apache with suPHP. When replacing Apache with suPHP, the PHPRC environment variable is recommended. +  * This method is not recommended if you replace Apache with suPHP. When replacing Apache with suPHP, the ''​PHPRC'' ​environment variable is recommended. 
-  * The PHP_INI_SCAN_DIR environment variable is available for PHP 5.2.7 and up.+  * The ''​PHP_INI_SCAN_DIR'' ​environment variable is available for PHP 5.2.7 and up.
  
-Starting from LSWS 5.3.x, LSWS may automatically configure external applications and script handlers for control panels, hence it may not have external applications or script handlers anymore. If you want to define ''​PHPRC''​ environment variable for all external applications,​ you can use ''​PHP'' ​tab.+Starting from LSWS 5.3.x, LSWS may automatically configure external applications and script handlers for control panels, hence it may not have external applications or script handlers anymore. If you want to define ​the ''​PHPRC''​ environment variable for all external applications,​ you can use the **PHP** tab.
  
 ===== 4. Define PHPRC in Apache Configs ===== ===== 4. Define PHPRC in Apache Configs =====
Line 122: Line 219:
   LS_EXTAPP_ENV PHP_INI_SCAN_DIR=/​home/​USER1/​data/​   LS_EXTAPP_ENV PHP_INI_SCAN_DIR=/​home/​USER1/​data/​
   </​IfModule>​   </​IfModule>​
 +
 +===== 8. Use of ''​disable_functions''​ =====
 +
 +Please be aware, for security and performance reasons, ''​disable_functions''​ is unique and can only be set in php.ini, cannot be used in .htaccess, nor be overridden via ''​php_admin_value''​. You can only apply ''​disable_functions''​ via global or per-user php.ini. ​ It would be a security flaw if a user could modify it freely, hence it has been restricted by design in PHP itself, not by LiteSpeed. ​
 +
  
 ===== Notes ===== ===== Notes =====
Line 131: Line 233:
   * Per-user php.ini files are not compatible with [[http://​www.litespeedtech.com/​products/​litespeed-sapi/​php/​suexec-daemon-mode|Daemon mode]]. Our [[http://​www.litespeedtech.com/​products/​litespeed-sapi/​php/​guide-to-suexec-setups|two other PHP process modes]] both support per-user php.ini.   * Per-user php.ini files are not compatible with [[http://​www.litespeedtech.com/​products/​litespeed-sapi/​php/​suexec-daemon-mode|Daemon mode]]. Our [[http://​www.litespeedtech.com/​products/​litespeed-sapi/​php/​guide-to-suexec-setups|two other PHP process modes]] both support per-user php.ini.
   * For native LSWS installs, these variables ($VH_ROOT, $VH_NAME, $VH_USER, etc.) need to be inside of a Virtual Host External App Environment Section, and not inside the general Server External App Environment Section. This is because the variables are expanded on start up, so the VH_* variables cannot be expanded during server level configurations.   * For native LSWS installs, these variables ($VH_ROOT, $VH_NAME, $VH_USER, etc.) need to be inside of a Virtual Host External App Environment Section, and not inside the general Server External App Environment Section. This is because the variables are expanded on start up, so the VH_* variables cannot be expanded during server level configurations.
 +
  
  
  • Admin
  • Last modified: 2019/05/28 18:12
  • by Jackson Zhang