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

时间:2015-02-12 16:44:01

标签: php command-line

这是我从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(之前我打印过,以确定引号),它会正确执行。它只是PHP方面我遇到错误。

有什么不对? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

  1. 此二进制文件正在运行写入STDOUT(例如,STDERR)的其他内容
  2. PHP用户可用的env变量与运行控制台的用户可用的env变量不同(需要这些变量)
  3. PHP用户无权访问所涉及的某些文件。
  4. 为了调试,最好使用proc_open而不是exec,并检查STDOUT和STDERR。这可能会为您提供有关正在发生的事情的其他信息。

    建议(和无耻的广告)

    我为PHP编写了一个small utility library,它以更安全的方式执行外部程序,并提供了附加的调试信息。它可能会帮助你,至少找出问题所在。