因此,當我 ssh 進入我的服務器并運行以下命令時,它會按預期工作,并且腳本會正常運行(請注意,我使用的是 -f 選項):/usr/bin/php -f /home/somefolder/test.phpExpected Output is OK: hello world現在,當我運行不帶 -f 選項的命令時,它基本上將內容顯示為 html 文件(這是預期的行為):/usr/bin/php /home/somefolder/test.phpExpected Output is OK: Content-type: text/html; charset=UTF-8到目前為止,一切都按預期工作!但是現在當我嘗試使用 shell_exec() 從另一個 php 腳本調用這些相同的命令時,它不會執行該文件。使用 -f 選項和不使用 -f 選項都返回相同的響應。所以使用 -f 選項:$out = shell_exec("/usr/bin/php -f /home/somefolder/test.php");echo $out;Output is not ok: Content-type: text/html; charset=UTF-8Expected Output should be: hello world并且沒有 -f 選項:$out = shell_exec("/usr/bin/php /home/somefolder/test.php");echo $out;Expected Output is OK: Content-type: text/html; charset=UTF-8因此,出于某種原因,它似乎忽略了 -f 選項。有什么想法嗎?test.php 的內容:<?phpecho "Hello World";?>
1 回答

慕村225694
TA貢獻1880條經驗 獲得超4個贊
好吧,這需要進行大量調查,但我終于弄清楚了……這有兩個部分:
第 1 部分 - php.ini 文件
您的 php.ini 文件包含如下所示的一行:
disable_functions = show_source, system, exec, shell_exec, passthru, popen, proc_open
因此,如果您想同時使用 exex 和 shell_exec,您需要從該行中刪除它們,并重新保存您的 php.ini 文件,因此該行現在看起來像這樣:
disable_functions = show_source, system, passthru, popen, proc_open
第 2 部分 - php-fpm 配置文件
如果您修改了 php.ini 文件但 shell_exec() 仍然無法正常工作,那么您很可能正在運行 php-fpm(而不是 php-cgi)。
這意味著您還需要修改 php-fpm conf 文件。尋找這樣的一行:
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
然后從該行中刪除 exec 和 shell_exec ,然后重新保存,如下所示:
php_admin_value[disable_functions] = passthru,system
在這篇文章中,我找到了有關如何定位和修改 conf 文件的說明: https ://www.interserver.net/tips/kb/how-to-enable-exec-in-php-fpm/
說明一般如下。請注意,您可能需要 root 訪問權限才能執行此操作:
(1) 你運行的是什么 php 版本?對于 v7.3,您將使用“ea-php73”
(2) Conf 文件位于:
/opt/cpanel/ea-php73/root/etc/php-fpm.d/mydomain.com.conf
(3) 修改[disable_functions]這一行,重新保存conf文件。
(4) 使用以下命令重啟 php-fpm:
/scripts/restartsrv_apache_php_fpm
- 1 回答
- 0 關注
- 225 瀏覽
添加回答
舉報
0/150
提交
取消