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

因此,当我 ssh 进入我的服务器并运行以下命令时,它会按预期工作,并且脚本会正常运行(请注意,我使用的是 -f 选项):


/usr/bin/php -f /home/somefolder/test.php


Expected Output is OK: hello world

现在,当我运行不带 -f 选项的命令时,它基本上将内容显示为 html 文件(这是预期的行为):


/usr/bin/php /home/somefolder/test.php


Expected 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-8

Expected 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 的内容:


<?php

echo "Hello World";

?>


ABOUTYOU
浏览 169回答 1
1回答

慕村225694

好吧,这需要进行大量调查,但我终于弄清楚了……这有两个部分:第 1 部分 - php.ini 文件您的 php.ini 文件包含如下所示的一行:disable_functions&nbsp;=&nbsp;show_source,&nbsp;system,&nbsp;exec,&nbsp;shell_exec,&nbsp;passthru,&nbsp;popen,&nbsp;proc_open因此,如果您想同时使用 exex 和 shell_exec,您需要从该行中删除它们,并重新保存您的 php.ini 文件,因此该行现在看起来像这样:disable_functions&nbsp;=&nbsp;show_source,&nbsp;system,&nbsp;passthru,&nbsp;popen,&nbsp;proc_open第 2 部分 - php-fpm 配置文件如果您修改了 php.ini 文件但 shell_exec() 仍然无法正常工作,那么您很可能正在运行 php-fpm(而不是 php-cgi)。这意味着您还需要修改 php-fpm conf 文件。寻找这样的一行:php_admin_value[disable_functions]&nbsp;=&nbsp;exec,passthru,shell_exec,system然后从该行中删除 exec 和 shell_exec ,然后重新保存,如下所示:php_admin_value[disable_functions]&nbsp;=&nbsp;passthru,system在这篇文章中,我找到了有关如何定位和修改 conf 文件的说明:&nbsp;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
打开App,查看更多内容
随时随地看视频慕课网APP