PHP exec 命令没有$output,但$return为 0


PHP exec command not having an $output but $return is 0

这是我从PHP执行命令的代码:

            $execQuery = sprintf("/usr/local/bin/binary -mode M '"%s'" %u %s -pathJson '"/home/ec2/fashion/jsonS/'" -pathJson2 '"/home/ec2/fashion/jsonS2/'"", $path, $pieces, $type);
            exec($execQuery, $output, $return);

$return值始终为 0,但$output为空。$output应该是 JSON。

  • 如果我执行相同的操作但删除一个字母给binary(例如/usr/local/bin/binar(,我会得到(正确(一个$return = 127
  • 如果我编写其他参数(例如不退出的参数-mode R(,我会从控制台收到错误(这也是正确的(。
  • 如果我在控制台上运行确切的$execQuery(我之前打印f以确保引号(,它会正确执行。只有PHP方面我才有错误。

可能出了什么问题?提前谢谢你。

嗯,可能会发生一些事情......

  1. 您正在运行的这个二进制文件写入 STDOUT 的其他内容(例如,STDERR(
  2. PHP 用户可用的 env var 与运行控制台的用户可用的 env var 不同(这些变量是必需的(
  3. PHP 用户无权访问所涉及的某些文件。

为了调试,最好使用 proc_open 而不是 exec,并检查 STDOUT 和 STDERR。这可能会为您提供有关所发生情况的其他信息。

建议(和无耻的广告(

我为 PHP 编写了一个小型实用程序库,它以更安全的方式执行外部程序并提供额外的调试信息。它可能会帮助您,至少查明问题所在。