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
(我之前用 printf 来确定引号),它会正确执行。我只有 PHP 的那一面出错了。
有什么问题吗?
提前谢谢你。
好吧,可能会发生一些事情...
- 您正在 运行 将此二进制文件写入其他 STDOUT(例如,STDERR)
- PHP 用户可用的环境变量与用户 运行 控制台可用的环境变量不同(这些变量是必需的)
- PHP用户无权访问涉及的部分文件。
为了调试,最好使用proc_open代替exec,并检查STDOUT和STDERR。这可能会为您提供有关正在发生的事情的更多信息。
建议(和无耻的广告)
我为 PHP 写了一个 small utility library 以更安全的方式执行外部程序并提供额外的调试信息。它可能会帮助您,至少查明问题所在。
这是我执行来自 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
(我之前用 printf 来确定引号),它会正确执行。我只有 PHP 的那一面出错了。
有什么问题吗? 提前谢谢你。
好吧,可能会发生一些事情...
- 您正在 运行 将此二进制文件写入其他 STDOUT(例如,STDERR)
- PHP 用户可用的环境变量与用户 运行 控制台可用的环境变量不同(这些变量是必需的)
- PHP用户无权访问涉及的部分文件。
为了调试,最好使用proc_open代替exec,并检查STDOUT和STDERR。这可能会为您提供有关正在发生的事情的更多信息。
建议(和无耻的广告)
我为 PHP 写了一个 small utility library 以更安全的方式执行外部程序并提供额外的调试信息。它可能会帮助您,至少查明问题所在。