Я хочу вызвать программу java и получить ее вывод в stdout. Я следил за предложениями в stackoverflow . Но это не сработает.
Я добавляю файл класса в свой CLASSPATH. И я могу выполнить команду в cmd правильно следующим образом:
В моем файле PHP я вызываю эту программу на
exec("java Hello", $output); print_r($output);
Это не дает ничего, кроме:
Array()
В чем проблема? Как я могу это исправить?
ps: Привет, это демо-программа, на самом деле программа, которую я хочу вызвать, намного сложнее, чем может потребоваться 2 или более секунд на моей машине (i5 4G).
Я бы рекомендовал использовать Java / PHP Bridge, найденный здесь: http://php-java-bridge.sourceforge.net/pjb/ Это довольно просто установить и работает очень хорошо.
Кроме того, я рекомендую использовать следующую ссылку для ее загрузки. (это то же самое, что ссылка в папке downloads-> documentation)
Файл – JavaBridge.war. Вероятно, вы захотите использовать Tomcat для контейнера Java EE. Как только Tomcat настроен, вы просто поместите этот файл в папку webapps и он будет установлен.
Если вы хотите регулярно использовать Java-классы в PHP, это лучший метод, о котором я знаю, и я пробовал много из них. Смола также работала, но она не играла хорошо с моим почтовым сервером.
Попробуй это:
exec('java -cp .:/path/to/folder/of/your/file Hello 2>&1', $output); print_r($output);
2>&1
должны отображать ошибки.
Ну, это дает массив правильно? поэтому вместо print_r($output)
попробуйте print($output[0])
, выводящий «Hello World» на моей консоли: D
попробуйте трубку
$command = 'java Hello'; $descriptorspec = array( 1 => array( 'pipe', 'w' ) ); $process = proc_open($command, $descriptorspec, $pipes); if (!is_resource($process)) { exit("failed to create process"); } $content = stream_get_contents($pipes[1]); fclose($pipes[1]); if (proc_close($process) === 0) { print_r($content); }else{ exit("failed to execute Hello"); }