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ではなくに送信するため、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ここで問題になる可能性があります-現在のユーザー~のホームディレクトリのショートカットです-したがって、コマンドを自分で実行すると、 を意味しますが、Webサーバーのユーザーとして実行すると、まったく異なるパスを意味します. 実行したいjarファイルのフルパスに変更してみてください。/home/username/src/...

于 2012-11-06T19:37:51.270 に答える
1

PHPマニュアルでは、パススルーがvoidを返すと書かれています:

void パススルー (文字列 $command [, int &$return_var ] )

したがって、何もエコーされません。

于 2012-11-06T19:26:13.147 に答える