1

这是我的PHP代码:

<?php
exec('java -jar ~/src/epubcheck-*/epubcheck-*.jar -out /var/www/epubcheck-outputs/output.xml /var/www/AChristmasCarol.epub');

当我在终端中尝试该命令时,它可以工作......但在 PHP 中却没有。

我什至没有得到java版本。但是我确实看到了“嘿……”所以有些命令可以工作,有些则不能。

我正在使用 NGiNX 有我的服务器。

4

2 回答 2

2

exec的文档解释说,exec 只返回输出的最后一行,因此您需要使用参数来捕获完整的输出。

java -version将其输出发送到STDERR, not ,因此如果您想使用 PHP 捕获该命令的输出,则STDOUT需要重定向STDERR到。STDOUT但是,当您运行普通的 java 程序时,这不是必需的。

$output = array();

exec('java -version 2>&1', $output);
print_r($output); // contains the correct output

exec('java -jar myfile.jar', $output);
print_r($output); // should also contain the correct output

如果这仍然不起作用,请参阅我对 Ibu 回答的评论

编辑:实际答案,来自问题评论:

~/src/epubcheck-*/epubcheck-*.jar这里可能是个问题 -~当前用户主目录的快捷方式- 所以当你自己运行命令时,它意味着/home/username/src/...,但是当你作为你的网络服务器的用户运行它时,它意味着一个完全不同的路径。尝试将其更改为要执行的 jar 文件的完整路径。

于 2012-11-06T19:37:51.270 回答
1

在 php 手册上,它说 passthru 返回 void:

void passthru (string $command [, int &$return_var])

所以不会有任何回应。

于 2012-11-06T19:26:13.147 回答