Configuration

在 php-fpm 中設置 php_admin_value 是否有限制?

  • June 19, 2018

我試圖在 php-fpm 中的池配置中設置一個較大的值,但在某些時候它只是不再啟動。

php_admin_value[disable_functions] = dl,exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,pcntl_exec,include,include_once,require,require_once,posix_mkfifo,posix_getlogin,posix_ttyname,getenv,get_current_use,proc_get_status,get_cfg_va,disk_free_space,disk_total_space,diskfreespace,getcwd,getlastmo,getmygid,getmyinode,getmypid,getmyuid,ini_set,mail,proc_nice,proc_terminate,proc_close,pfsockopen,fsockopen,apache_child_terminate,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,fopen,tmpfile,bzopen,gzopen,chgrp,chmod,chown,copy,file_put_contents,lchgrp,lchown,link,mkdi,move_uploaded_file,rename,rmdi,symlink,tempnam,touch,unlink,iptcembed,ftp_get,ftp_nb_get,file_exists,file_get_contents,file,fileatime,filectime,filegroup,fileinode,filemtime,fileowne,fileperms,filesize,filetype,glob,is_di,is_executable,is_file,is_link,is_readable,is_uploaded_file,is_writable,is_writeable,linkinfo,lstat,parse_ini_file,pathinfo,readfile,readlink,realpath,stat,gzfile,create_function

嘗試重新啟動 php-fpm 時失敗並顯示以下消息:

Stopping php-fpm:                                          [  OK  ]
Starting php-fpm: [20-Oct-2013 22:31:52] ERROR: [/etc/php-fpm.d/codepad.conf:235] value is NULL for a ZEND_INI_PARSER_ENTRY
[20-Oct-2013 22:31:52] ERROR: Unable to include /etc/php-fpm.d/codepad.conf from /etc/php-fpm.conf at line 235
[20-Oct-2013 22:31:52] ERROR: failed to load configuration file '/etc/php-fpm.conf'
[20-Oct-2013 22:31:52] ERROR: FPM initialization failed
                                                          [FAILED]

當我刪除最後一個禁用的功能 ( create_function) 時,它會重新啟動。我也嘗試過其他功能,但這會產生相同的錯誤,因此它與create_function功能無關。

目前字元串的大小剛剛超過 1KB,所以看起來我在這里達到了限制?

我的假設正確嗎?有沒有辦法克服這個限制?

我還嘗試php_admin_value[disable_functions]在它下面添加另一個(希望它會被附加),但這不起作用(它只使用了第一個)。

這是一個 php-fpm 錯誤。

在 ini 讀取周期中有一個硬編碼的 1024 字元行長度限制,可以在這裡看到:

http://lxr.php.net/xref/PHP_5_5/sapi/fpm/fpm/fpm_conf.c#1495

所以目前,你有點不走運——因為讀取緩衝區sizeof(char) * (1024+1)字節,它會尋找一個換行符作為終止符,你不能做任何事情來讓它理解比這更長的配置指令。

報告了一個錯誤,併計劃在接下來的幾天內解決它。

*編輯:*我現在創建了一個PR來修復這個 bug。

引用自:https://serverfault.com/questions/547394