PHP程序在命令行和Web上的行为有所不同

时间:2019-04-02 10:48:14

标签: php

我有php程序,该程序执行带有参数的测试程序。 返回json数据。 我用print_r进行了测试,并使用了foreach循环来获取每一行。

$jsondata = shell_exec("/bin/test node");
$data = json_decode($jsondata, true);
...
print_r($data);
/* output:
Array
(
[nodes] => Array
( 
...
*/
foreach ($data['nodes'] as $node) {
...

结果应为html表。命令行按预期打印出该表。如果我尝试通过Web执行该脚本,则会收到错误消息:

日志文件中的错误:

  

2019/04/02 18:41:33 [错误] 1482#1482:* 14607在stderr中发送的FastCGI:“ PHP消息:PHP警告:为/ media / ...中的foreach()提供了无效的参数   从上游读取响应标头,客户端:192.168.178.1,服务器:xxx.com,请求:“ GET /Lightning/listnodes.php HTTP / 1.1”,上游:“ fastcgi: //unix:/run/php/php7.2-fpm.sock:”,主机:“ xxx.com”

如果我将测试程序通过管道传输到1.html并在网络浏览器中显示,则它可以正常工作。

1 个答案:

答案 0 :(得分:1)

如果脚本是通过该Web服务器(即通过Web请求)调用的,则在Web服务器的上下文中执行

shell_exec。通过SSH登录到服务器时,您可能具有执行/bin/test node的权限,但是Web服务器软件(例如Apache或nginx)可能没有运行/bin/test node的权限。检查命令的权限。

另请参阅:https://www.php.net/manual/en/function.shell-exec.php#37971