因此,当我 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 关注
- 195 浏览
添加回答
举报
0/150
提交
取消