Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t在Ubuntu上通过PHP执行Java jar文件_Java_Php_Ubuntu_Nginx - Fatal编程技术网

Can';t在Ubuntu上通过PHP执行Java jar文件

Can';t在Ubuntu上通过PHP执行Java jar文件,java,php,ubuntu,nginx,Java,Php,Ubuntu,Nginx,以下是我的PHP代码: <?php exec('java -jar ~/src/epubcheck-*/epubcheck-*.jar -out /var/www/epubcheck-outputs/output.xml /var/www/AChristmasCarol.epub'); php手册上说passthru返回void: void passthru(字符串$command[,int&$return\u var]) 因此不会有任何回音。的文档说明exec只返回输出的最后一行,因此

以下是我的PHP代码:

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

php手册上说passthru返回void:

void passthru(字符串$command[,int&$return\u var])

因此不会有任何回音。

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

java-version
将其输出发送到
STDERR
,而不是
STDOUT
,因此,如果要使用PHP捕获该命令的输出,需要将
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/…
,但当您作为Web服务器的用户运行它时,它意味着一个完全不同的路径。尝试将其更改为要执行的jar文件的完整路径。

很可能您的apache用户没有足够的权限执行java。尝试以apache用户的身份运行该命令,看看会发生什么(例如:
sudo su www-data
java-version
)@Jean-NicolasBoulayDesjardins尝试在命令行上运行它我已经。。。而且它是有效的。。。只是PHP不能执行它。@Jean-NicolasBoulayDesjardins为这个假设道歉,也就是说,nginx在这类事情上的行为与apache完全相同,只是注意到,
~/src/epubcheck-*/epubcheck-*.jar
可能是一个问题-
~
是当前用户主目录的快捷方式-因此,当您自己运行命令时,它意味着
/home/username/src/…
,但当您作为Web服务器的用户运行它时,它意味着一条完全不同的路径。尝试将其更改为要执行的jar文件的完整路径。你是对的!现在可以了!谢谢啊哈,太好了!很高兴为您提供帮助-在我的回答中为后代添加了以下评论:)