From 72ce788832f008fc210146d751dd5f20fa03f493 Mon Sep 17 00:00:00 2001 From: ftimme Date: Wed, 21 Sep 2011 11:28:59 +0000 Subject: [PATCH] Added support for PHP-FPM sockets. --- install/dist/conf/centos52.conf.php | 1 + install/dist/conf/centos53.conf.php | 1 + install/dist/conf/debian40.conf.php | 1 + install/dist/conf/debian60.conf.php | 1 + install/dist/conf/fedora9.conf.php | 1 + install/dist/conf/gentoo.conf.php | 1 + install/dist/conf/opensuse110.conf.php | 1 + install/dist/conf/opensuse112.conf.php | 1 + install/lib/installer_base.lib.php | 1 + install/lib/update.lib.php | 1 + install/sql/incremental/upd_0021.sql | 1 + install/sql/ispconfig3.sql | 1 + install/tpl/server.ini.master | 1 + .../web/admin/form/server_config.tform.php | 11 ++ .../web/admin/lib/lang/de_server_config.lng | 2 + .../web/admin/lib/lang/en_server_config.lng | 2 + .../templates/server_config_web_edit.htm | 4 + interface/web/sites/form/web_domain.tform.php | 6 + .../web/sites/lib/lang/de_web_domain.lng | 1 + .../web/sites/lib/lang/en_web_domain.lng | 1 + .../sites/templates/web_domain_advanced.htm | 6 + server/conf/nginx_vhost.conf.master | 3 +- server/conf/php_fpm_pool.conf.master | 8 +- server/plugins-available/nginx_plugin.inc.php | 170 ++++++++++-------- 24 files changed, 152 insertions(+), 75 deletions(-) create mode 100644 install/sql/incremental/upd_0021.sql diff --git a/install/dist/conf/centos52.conf.php b/install/dist/conf/centos52.conf.php index d32f69b17..396fd807d 100644 --- a/install/dist/conf/centos52.conf.php +++ b/install/dist/conf/centos52.conf.php @@ -192,6 +192,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php-fpm'; $conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini'; $conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d'; $conf['nginx']['php_fpm_start_port'] = 9010; +$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm'; //* vlogger $conf['vlogger']['config_dir'] = '/etc'; diff --git a/install/dist/conf/centos53.conf.php b/install/dist/conf/centos53.conf.php index d32f69b17..396fd807d 100644 --- a/install/dist/conf/centos53.conf.php +++ b/install/dist/conf/centos53.conf.php @@ -192,6 +192,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php-fpm'; $conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini'; $conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d'; $conf['nginx']['php_fpm_start_port'] = 9010; +$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm'; //* vlogger $conf['vlogger']['config_dir'] = '/etc'; diff --git a/install/dist/conf/debian40.conf.php b/install/dist/conf/debian40.conf.php index b884a89da..0c42d7de5 100644 --- a/install/dist/conf/debian40.conf.php +++ b/install/dist/conf/debian40.conf.php @@ -204,6 +204,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php5-fpm'; $conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini'; $conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm/pool.d'; $conf['nginx']['php_fpm_start_port'] = 9010; +$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm'; //*Ufw $conf['ufw']['installed'] = false; diff --git a/install/dist/conf/debian60.conf.php b/install/dist/conf/debian60.conf.php index 4af85b80c..35e616010 100644 --- a/install/dist/conf/debian60.conf.php +++ b/install/dist/conf/debian60.conf.php @@ -204,6 +204,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php5-fpm'; $conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini'; $conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm/pool.d'; $conf['nginx']['php_fpm_start_port'] = 9010; +$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm'; //* Ufw $conf['ufw']['installed'] = false; diff --git a/install/dist/conf/fedora9.conf.php b/install/dist/conf/fedora9.conf.php index 3e1bda114..6e5e52944 100644 --- a/install/dist/conf/fedora9.conf.php +++ b/install/dist/conf/fedora9.conf.php @@ -192,6 +192,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php-fpm'; $conf['nginx']['php_fpm_ini_path'] = '/etc/php.ini'; $conf['nginx']['php_fpm_pool_dir'] = '/etc/php-fpm.d'; $conf['nginx']['php_fpm_start_port'] = 9010; +$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm'; //* vlogger $conf['vlogger']['config_dir'] = '/etc'; diff --git a/install/dist/conf/gentoo.conf.php b/install/dist/conf/gentoo.conf.php index 8ed4fee96..c2c0a6e92 100644 --- a/install/dist/conf/gentoo.conf.php +++ b/install/dist/conf/gentoo.conf.php @@ -208,6 +208,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php5-fpm'; $conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini'; $conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm/pool.d'; $conf['nginx']['php_fpm_start_port'] = 9010; +$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm'; //* vlogger $conf['vlogger']['config_dir'] = '/etc/vlogger'; diff --git a/install/dist/conf/opensuse110.conf.php b/install/dist/conf/opensuse110.conf.php index 6cb0a788d..755e67336 100644 --- a/install/dist/conf/opensuse110.conf.php +++ b/install/dist/conf/opensuse110.conf.php @@ -192,6 +192,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php-fpm'; $conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini'; $conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm'; $conf['nginx']['php_fpm_start_port'] = 9010; +$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm'; //* vlogger $conf['vlogger']['config_dir'] = '/etc'; diff --git a/install/dist/conf/opensuse112.conf.php b/install/dist/conf/opensuse112.conf.php index fe114f02a..1402ad67d 100644 --- a/install/dist/conf/opensuse112.conf.php +++ b/install/dist/conf/opensuse112.conf.php @@ -192,6 +192,7 @@ $conf['nginx']['php_fpm_init_script'] = 'php-fpm'; $conf['nginx']['php_fpm_ini_path'] = '/etc/php5/fpm/php.ini'; $conf['nginx']['php_fpm_pool_dir'] = '/etc/php5/fpm'; $conf['nginx']['php_fpm_start_port'] = 9010; +$conf['nginx']['php_fpm_socket_dir'] = '/var/run/php5-fpm'; //* vlogger $conf['vlogger']['config_dir'] = '/etc'; diff --git a/install/lib/installer_base.lib.php b/install/lib/installer_base.lib.php index 7e6fc2379..f3e7ef4be 100644 --- a/install/lib/installer_base.lib.php +++ b/install/lib/installer_base.lib.php @@ -243,6 +243,7 @@ class installer_base { $tpl_ini_array['web']['php_fpm_ini_path'] = $conf['nginx']['php_fpm_ini_path']; $tpl_ini_array['web']['php_fpm_pool_dir'] = $conf['nginx']['php_fpm_pool_dir']; $tpl_ini_array['web']['php_fpm_start_port'] = $conf['nginx']['php_fpm_start_port']; + $tpl_ini_array['web']['php_fpm_socket_dir'] = $conf['nginx']['php_fpm_socket_dir']; $tpl_ini_array['web']['server_type'] = 'nginx'; $tpl_ini_array['global']['webserver'] = 'nginx'; } diff --git a/install/lib/update.lib.php b/install/lib/update.lib.php index fc4a5e3eb..b75a55f71 100644 --- a/install/lib/update.lib.php +++ b/install/lib/update.lib.php @@ -270,6 +270,7 @@ function updateDbAndIni() { $tpl_ini_array['web']['php_fpm_ini_path'] = $conf['nginx']['php_fpm_ini_path']; $tpl_ini_array['web']['php_fpm_pool_dir'] = $conf['nginx']['php_fpm_pool_dir']; $tpl_ini_array['web']['php_fpm_start_port'] = $conf['nginx']['php_fpm_start_port']; + $tpl_ini_array['web']['php_fpm_socket_dir'] = $conf['nginx']['php_fpm_socket_dir']; $tpl_ini_array['web']['server_type'] = 'nginx'; $tpl_ini_array['global']['webserver'] = 'nginx'; } diff --git a/install/sql/incremental/upd_0021.sql b/install/sql/incremental/upd_0021.sql new file mode 100644 index 000000000..09994e20b --- /dev/null +++ b/install/sql/incremental/upd_0021.sql @@ -0,0 +1 @@ +ALTER TABLE `web_domain` ADD `php_fpm_use_socket` ENUM( 'n', 'y' ) NOT NULL DEFAULT 'n' AFTER `nginx_directives`; \ No newline at end of file diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql index e8162b8e8..0a9d8d99d 100644 --- a/install/sql/ispconfig3.sql +++ b/install/sql/ispconfig3.sql @@ -1510,6 +1510,7 @@ CREATE TABLE `web_domain` ( `allow_override` varchar(255) NOT NULL default 'All', `apache_directives` mediumtext, `nginx_directives` mediumtext, + `php_fpm_use_socket` ENUM('n','y') NOT NULL DEFAULT 'n' `php_open_basedir` mediumtext, `custom_php_ini` mediumtext, `backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none', diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master index 6c647a40d..251859ae3 100644 --- a/install/tpl/server.ini.master +++ b/install/tpl/server.ini.master @@ -66,6 +66,7 @@ php_fpm_init_script=php5-fpm php_fpm_ini_path=/etc/php5/fpm/php.ini php_fpm_pool_dir=/etc/php5/fpm/pool.d php_fpm_start_port=9010 +php_fpm_socket_dir=/var/run/php5-fpm [dns] bind_user=root diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php index 3f574af87..43346e293 100644 --- a/interface/web/admin/form/server_config.tform.php +++ b/interface/web/admin/form/server_config.tform.php @@ -548,6 +548,17 @@ $form["tabs"]['web'] = array( 'width' => '40', 'maxlength' => '255' ), + 'php_fpm_socket_dir' => array( + 'datatype' => 'VARCHAR', + 'formtype' => 'TEXT', + 'default' => '', + 'validators' => array(0 => array('type' => 'NOTEMPTY', + 'errmsg' => 'php_fpm_socket_dir_error_empty'), + ), + 'value' => '', + 'width' => '40', + 'maxlength' => '255' + ), 'php_open_basedir' => array( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng index 9ce6e2739..e03e6dcea 100644 --- a/interface/web/admin/lib/lang/de_server_config.lng +++ b/interface/web/admin/lib/lang/de_server_config.lng @@ -139,4 +139,6 @@ $wb["php_fpm_pool_dir_txt"] = 'PHP-FPM pool Verzeichnis'; $wb["php_fpm_pool_dir_error_empty"] = 'PHP-FPM pool Verzeichnis ist leer.'; $wb["php_fpm_start_port_txt"] = 'PHP-FPM Start-Port'; $wb["php_fpm_start_port_error_empty"] = 'PHP-FPM Start-Port ist leer.'; +$wb["php_fpm_socket_dir_txt"] = 'PHP-FPM Socket-Verzeichnis'; +$wb["php_fpm_socket_dir_error_empty"] = 'PHP-FPM Socket-Verzeichnis ist leer.'; ?> diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng index 745e3a60a..a2ad3a87d 100644 --- a/interface/web/admin/lib/lang/en_server_config.lng +++ b/interface/web/admin/lib/lang/en_server_config.lng @@ -141,6 +141,8 @@ $wb["php_fpm_pool_dir_txt"] = 'PHP-FPM pool directory'; $wb["php_fpm_pool_dir_error_empty"] = 'PHP-FPM pool directory is empty.'; $wb["php_fpm_start_port_txt"] = 'PHP-FPM start port'; $wb["php_fpm_start_port_error_empty"] = 'PHP-FPM start port is empty.'; +$wb["php_fpm_socket_dir_txt"] = 'PHP-FPM socket directory'; +$wb["php_fpm_socket_dir_error_empty"] = 'PHP-FPM socket directory is empty.'; $wb["try_rescue_txt"] = 'Enable service monitoring and restart on failure'; $wb["do_not_try_rescue_apache_txt"] = 'Disable apache monitoring'; $wb["do_not_try_rescue_mysql_txt"] = 'Disable MySQL monitoring'; diff --git a/interface/web/admin/templates/server_config_web_edit.htm b/interface/web/admin/templates/server_config_web_edit.htm index 4b85025f5..7eb707cb0 100644 --- a/interface/web/admin/templates/server_config_web_edit.htm +++ b/interface/web/admin/templates/server_config_web_edit.htm @@ -108,6 +108,10 @@
+
+
+ +
diff --git a/interface/web/sites/form/web_domain.tform.php b/interface/web/sites/form/web_domain.tform.php index 362a154c3..5e3a87355 100644 --- a/interface/web/sites/form/web_domain.tform.php +++ b/interface/web/sites/form/web_domain.tform.php @@ -488,6 +488,12 @@ $form["tabs"]['advanced'] = array ( 'width' => '30', 'maxlength' => '255' ), + 'php_fpm_use_socket' => array ( + 'datatype' => 'VARCHAR', + 'formtype' => 'CHECKBOX', + 'default' => 'n', + 'value' => array(0 => 'n',1 => 'y') + ), 'php_open_basedir' => array ( 'datatype' => 'VARCHAR', 'formtype' => 'TEXT', diff --git a/interface/web/sites/lib/lang/de_web_domain.lng b/interface/web/sites/lib/lang/de_web_domain.lng index 1226b4761..cfd3ac922 100644 --- a/interface/web/sites/lib/lang/de_web_domain.lng +++ b/interface/web/sites/lib/lang/de_web_domain.lng @@ -76,4 +76,5 @@ $wb['nginx_directives_txt'] = 'nginx Direktiven'; $wb["seo_redirect_txt"] = 'SEO Redirect'; $wb["non_www_to_www_txt"] = 'Nicht-www -> www'; $wb["www_to_non_www_txt"] = 'www -> Nicht-www'; +$wb["php_fpm_use_socket_txt"] = 'Benutze Socket für PHP-FPM'; ?> diff --git a/interface/web/sites/lib/lang/en_web_domain.lng b/interface/web/sites/lib/lang/en_web_domain.lng index fb85dcbbe..9bc71ad45 100644 --- a/interface/web/sites/lib/lang/en_web_domain.lng +++ b/interface/web/sites/lib/lang/en_web_domain.lng @@ -76,4 +76,5 @@ $wb["nginx_directives_txt"] = 'nginx Directives'; $wb["seo_redirect_txt"] = 'SEO Redirect'; $wb["non_www_to_www_txt"] = 'Non-www -> www'; $wb["www_to_non_www_txt"] = 'www -> non-www'; +$wb["php_fpm_use_socket_txt"] = 'Use Socket For PHP-FPM'; ?> \ No newline at end of file diff --git a/interface/web/sites/templates/web_domain_advanced.htm b/interface/web/sites/templates/web_domain_advanced.htm index 92a77c03b..b815d0e0b 100644 --- a/interface/web/sites/templates/web_domain_advanced.htm +++ b/interface/web/sites/templates/web_domain_advanced.htm @@ -20,6 +20,12 @@
+
+

{tmpl_var name='php_fpm_use_socket_txt'}

+
+ {tmpl_var name='php_fpm_use_socket'} +
+
diff --git a/server/conf/nginx_vhost.conf.master b/server/conf/nginx_vhost.conf.master index 0f4348198..df52349c8 100644 --- a/server/conf/nginx_vhost.conf.master +++ b/server/conf/nginx_vhost.conf.master @@ -75,7 +75,8 @@ server { location ~ \.php$ { try_files $uri =404; - fastcgi_pass 127.0.0.1:; + fastcgi_pass 127.0.0.1:; + fastcgi_pass unix:; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; diff --git a/server/conf/php_fpm_pool.conf.master b/server/conf/php_fpm_pool.conf.master index 6736647bd..75127b495 100644 --- a/server/conf/php_fpm_pool.conf.master +++ b/server/conf/php_fpm_pool.conf.master @@ -1,8 +1,12 @@ [] -listen = 127.0.0.1: +listen = 127.0.0.1: +listen.allowed_clients = 127.0.0.1 -listen.allowed_clients = 127.0.0.1 +listen = +listen.owner = +listen.group = +listen.mode = 0660 user = group = diff --git a/server/plugins-available/nginx_plugin.inc.php b/server/plugins-available/nginx_plugin.inc.php index 4d6edefda..92ca08231 100644 --- a/server/plugins-available/nginx_plugin.inc.php +++ b/server/plugins-available/nginx_plugin.inc.php @@ -639,6 +639,25 @@ class nginx_plugin { $vhost_data['web_document_root_www'] = $web_config['website_basedir'].'/'.$data['new']['domain'].'/web'; $vhost_data['web_basedir'] = $web_config['website_basedir']; $vhost_data['ssl_domain'] = $data['new']['ssl_domain']; + + // PHP-FPM + $pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']); + if(substr($pool_dir,-1) != '/') $pool_dir .= '/'; + $pool_name = 'web'.$data['new']['domain_id']; + $socket_dir = escapeshellcmd($web_config['php_fpm_socket_dir']); + if(substr($socket_dir,-1) != '/') $socket_dir .= '/'; + + if($data['new']['php_fpm_use_socket'] == 'y'){ + $use_tcp = '#'; + $use_socket = ''; + } else { + $use_tcp = ''; + $use_socket = '#'; + } + $tpl->setVar('use_tcp', $use_tcp); + $tpl->setVar('use_socket', $use_socket); + $fpm_socket = $socket_dir.$pool_name.'.sock'; + $tpl->setVar('fpm_socket', $fpm_socket); $vhost_data['fpm_port'] = $web_config['php_fpm_start_port'] + $data['new']['domain_id'] + 1; // Custom nginx directives @@ -870,7 +889,7 @@ class nginx_plugin { $this->awstats_update($data,$web_config); } - $this->php_fpm_pool_update($data,$web_config); + $this->php_fpm_pool_update($data,$web_config,$pool_dir,$pool_name,$socket_dir); if($web_config['check_apache_config'] == 'y') { //* Test if nginx starts with the new configuration file @@ -1073,89 +1092,95 @@ class nginx_plugin { } //* Update the PHP-FPM pool configuration file - private function php_fpm_pool_update ($data,$web_config) { + private function php_fpm_pool_update ($data,$web_config,$pool_dir,$pool_name,$socket_dir) { global $app, $conf; - - $pool_dir = $web_config['php_fpm_pool_dir']; - $pool_name = 'web'.$data['new']['domain_id']; //$reload = false; if($data['new']['php'] == 'no'){ - if(@is_file($pool_dir.'/'.$pool_name.'.conf')){ - unlink($pool_dir.'/'.$pool_name.'.conf'); + if(@is_file($pool_dir.$pool_name.'.conf')){ + unlink($pool_dir.$pool_name.'.conf'); //$reload = true; } //if($reload == true) $app->services->restartService('php-fpm','reload'); return; } - - //if(!@is_file($pool_dir.'/'.$data['new']['domain'].'.conf') || ($data['old']['domain'] != '' && $data['new']['domain'] != $data['old']['domain'])) { - //if ( @is_file($pool_dir.'/'.$pool_name.'.conf') ) { - // unlink($pool_dir.'/'.$pool_name.'.conf'); - //} - $app->uses("getconf"); - $web_config = $app->getconf->get_server_config($conf["server_id"], 'web'); + $app->uses("getconf"); + $web_config = $app->getconf->get_server_config($conf["server_id"], 'web'); - $app->load('tpl'); - $tpl = new tpl(); - $tpl->newTemplate('php_fpm_pool.conf.master'); - - $tpl->setVar('fpm_pool', $pool_name); - $tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] + 1); - $tpl->setVar('fpm_user', $data['new']['system_user']); - $tpl->setVar('fpm_group', $data['new']['system_group']); - $tpl->setVar('security_level',$web_config['security_level']); - $php_open_basedir = ($data['new']['php_open_basedir'] == '')?escapeshellcmd($data['new']['document_root']):escapeshellcmd($data['new']['php_open_basedir']); - $tpl->setVar('php_open_basedir', $php_open_basedir); - if($php_open_basedir != ''){ - $tpl->setVar('enable_php_open_basedir', ''); - } else { - $tpl->setVar('enable_php_open_basedir', ';'); - } + $app->load('tpl'); + $tpl = new tpl(); + $tpl->newTemplate('php_fpm_pool.conf.master'); + + if($data['new']['php_fpm_use_socket'] == 'y'){ + $use_tcp = ';'; + $use_socket = ''; + if(!is_dir($socket_dir)) exec('mkdir -p '.$socket_dir); + } else { + $use_tcp = ''; + $use_socket = ';'; + } + $tpl->setVar('use_tcp', $use_tcp); + $tpl->setVar('use_socket', $use_socket); - // Custom php.ini settings - $final_php_ini_settings = array(); - $custom_php_ini_settings = trim($data['new']['custom_php_ini']); - if($custom_php_ini_settings != ''){ - // Make sure we only have Unix linebreaks - $custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings); - $custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings); - $ini_settings = explode("\n", $custom_php_ini_settings); - if(is_array($ini_settings) && !empty($ini_settings)){ - foreach($ini_settings as $ini_setting){ - list($key, $value) = explode('=', $ini_setting); - if($value){ - $value = escapeshellcmd(trim($value)); - $key = escapeshellcmd(trim($key)); - switch (strtolower($value)) { - case 'on': - case 'off': - case '1': - case '0': - // PHP-FPM might complain about invalid boolean value if you use 0 - $value = 'off'; - case 'true': - case 'false': - case 'yes': - case 'no': - $final_php_ini_settings[] = array('ini_setting' => 'php_admin_flag['.$key.'] = '.$value); - break; - default: - $final_php_ini_settings[] = array('ini_setting' => 'php_admin_value['.$key.'] = '.$value); - } + $fpm_socket = $socket_dir.$pool_name.'.sock'; + $tpl->setVar('fpm_socket', $fpm_socket); + + $tpl->setVar('fpm_pool', $pool_name); + $tpl->setVar('fpm_port', $web_config['php_fpm_start_port'] + $data['new']['domain_id'] + 1); + $tpl->setVar('fpm_user', $data['new']['system_user']); + $tpl->setVar('fpm_group', $data['new']['system_group']); + $tpl->setVar('security_level',$web_config['security_level']); + $php_open_basedir = ($data['new']['php_open_basedir'] == '')?escapeshellcmd($data['new']['document_root']):escapeshellcmd($data['new']['php_open_basedir']); + $tpl->setVar('php_open_basedir', $php_open_basedir); + if($php_open_basedir != ''){ + $tpl->setVar('enable_php_open_basedir', ''); + } else { + $tpl->setVar('enable_php_open_basedir', ';'); + } + + // Custom php.ini settings + $final_php_ini_settings = array(); + $custom_php_ini_settings = trim($data['new']['custom_php_ini']); + if($custom_php_ini_settings != ''){ + // Make sure we only have Unix linebreaks + $custom_php_ini_settings = str_replace("\r\n", "\n", $custom_php_ini_settings); + $custom_php_ini_settings = str_replace("\r", "\n", $custom_php_ini_settings); + $ini_settings = explode("\n", $custom_php_ini_settings); + if(is_array($ini_settings) && !empty($ini_settings)){ + foreach($ini_settings as $ini_setting){ + list($key, $value) = explode('=', $ini_setting); + if($value){ + $value = escapeshellcmd(trim($value)); + $key = escapeshellcmd(trim($key)); + switch (strtolower($value)) { + case 'on': + case 'off': + case '1': + case '0': + // PHP-FPM might complain about invalid boolean value if you use 0 + $value = 'off'; + case 'true': + case 'false': + case 'yes': + case 'no': + $final_php_ini_settings[] = array('ini_setting' => 'php_admin_flag['.$key.'] = '.$value); + break; + default: + $final_php_ini_settings[] = array('ini_setting' => 'php_admin_value['.$key.'] = '.$value); } - } + } } } + } - $tpl->setLoop('custom_php_ini_settings', $final_php_ini_settings); + $tpl->setLoop('custom_php_ini_settings', $final_php_ini_settings); - file_put_contents($pool_dir.'/'.$pool_name.'.conf',$tpl->grab()); - $app->log('Writing the PHP-FPM config file: '.$pool_dir.'/'.$pool_name.'.conf',LOGLEVEL_DEBUG); - unset($tpl); - //$reload = true; - //} + file_put_contents($pool_dir.$pool_name.'.conf',$tpl->grab()); + $app->log('Writing the PHP-FPM config file: '.$pool_dir.$pool_name.'.conf',LOGLEVEL_DEBUG); + unset($tpl); + //$reload = true; + //if($reload == true) $app->services->restartService('php-fpm','reload'); } @@ -1163,12 +1188,13 @@ class nginx_plugin { private function php_fpm_pool_delete ($data,$web_config) { global $app; - $pool_dir = $web_config['php_fpm_pool_dir']; - $pool_name = 'web'.$data['old']['domain_id']; + $pool_dir = escapeshellcmd($web_config['php_fpm_pool_dir']); + if(substr($pool_dir,-1) != '/') $pool_dir .= '/'; + $pool_name = 'web'.$data['new']['domain_id']; - if ( @is_file($pool_dir.'/'.$pool_name.'.conf') ) { - unlink($pool_dir.'/'.$pool_name.'.conf'); - $app->log('Removed PHP-FPM config file: '.$pool_dir.'/'.$pool_name.'.conf',LOGLEVEL_DEBUG); + if ( @is_file($pool_dir.$pool_name.'.conf') ) { + unlink($pool_dir.$pool_name.'.conf'); + $app->log('Removed PHP-FPM config file: '.$pool_dir.$pool_name.'.conf',LOGLEVEL_DEBUG); //$app->services->restartService('php-fpm','reload'); } } -- GitLab