为了账号安全,请及时绑定邮箱和手机立即绑定

php -f 选项在 shell_exec 中不起作用

php -f 选项在 shell_exec 中不起作用

PHP
ABOUTYOU 2022-11-04 17:20:57
因此,当我 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


查看完整回答
反对 回复 2022-11-04
  • 1 回答
  • 0 关注
  • 167 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信