Как запустить команду оболочки через код PHP? - PullRequest
8 голосов
/ 10 сентября 2010

Я пытаюсь запустить файл Jar в бэкэнде моего php-кода. Но я не получаю желаемый вывод на него. Есть файл jar, который работает в фоновом режиме и возвращает рейтинг страницы любого ключевого слова.и Домен, данный ему.Я прилагаю код, пожалуйста, предложите мне какое-нибудь решение, потому что когда я запускаю его на терминале, он выдает правильный вывод.

Вот код:

    <?php
set_time_limit(0);
function returnJarPath()
{
    $jarPath = $_SERVER['DOCUMENT_ROOT'] . "myFolder/tools_new/includes/Rank.jar";
    return $jarPath;
}
$jar = returnJarPath();
$command = "java -jar $jar aspdotnet/microsoft.com";//Passing the Argument to the Jar file.


$shellOutput = shell_exec($command);
    print "The Shell Output is : " ; var_dump($shellOutput);print "<br />";
exec($command,$executeCommmand);
    print "The Exec returns the value : " ; var_dump($executeCommmand);print "<br />";
passthru($command,$passthruCommand);
    print "The Passthru returns the value : " . $passthruCommand. "<br />";
?>

Iтолько что проверил журнал ошибок apache и последняя найденная ошибка:

sh: java: команда не найдена

Но, как я уже сказал, я используюта же команда через SSH для запуска команды Java. Так что нет никакой возможности не установить JAVA на сервере. Пожалуйста, помогите мне выйти из этого беспорядка ...

Ответы [ 4 ]

3 голосов
/ 10 сентября 2010

Если файл JAR записывает в стандартный вывод, вы можете использовать exec.

Вот пример того, как я его использую:

may be first: exec("cd jar dir"); // if jar fine needs to be executed from the same dir
$output = exec("/usr/bin/java -jar $jar aspdotnet/microsoft.com");

Но, как вы говорите:

sh: java: command not found

Это означает, что нет псевдонима пути к Java из php,Просто используйте полный путь Java к исполняемому файлу /usr/bin/java.

0 голосов
/ 10 сентября 2010

Первое, что я хотел бы проверить / изменить, это строка в функции, в которой вы строите переменную $jarPath из этого:

$jarPath = $_SERVER['DOCUMENT_ROOT'] . "myFolder/tools_new/includes/Rank.jar";

в следующее:

$jarPath = $_SERVER['DOCUMENT_ROOT'] . "/myFolder/tools_new/includes/Rank.jar";

Конечная косая черта может отсутствовать в $_SERVER['DOCUMENT_ROOT'], что может вызвать проблемы.

Я предполагаю, что когда вы говорите, что она запускается из консоли, вы запускаете команду java следующим образом:

$ java -jar /rest/of/path/myFolder/tools_new/includes/Rank.jar aspdotnet/microsoft.com

Я бы позаботился о том, чтобы вы указали путь к двоичному файлу Java в переменной $command следующим образом ...

$command = "/path/to/java -jar $jar aspdotnet/microsoft.com";

Пользователь, которому принадлежит процесс веб-сервера, может не иметь $ PATHпеременная, которая включает путь к двоичному файлу Java.

0 голосов
/ 10 сентября 2010

Если код PHP должен выполняться на сервере (а не через командную строку), пользователь, запускающий исполняемый файл java, - это www-data, а не вы.В этом случае убедитесь, что www-data имеет права на чтение файла jar и выполнение исполняемого файла java

0 голосов
/ 10 сентября 2010

Учитывая, что вы звоните java.Уверен, вывод выводится в консоли Java, а не в оболочке, где PHP может извлекать текстовую информацию.

Как решить эту дилемму?

Хорошо, вы можете записать результаты в файл, если у вас есть исходный код Java для изменения, а затем прочитать этот файл через phpчтобы получить результаты.Возможность столкновения здесь была бы довольно хорошей.Другой вариант - подключить Java к базе данных MySQL (если она у вас была), а затем запустить java, а затем запросить ответ у базы данных.Конечно, вам нужно было бы передать Java способ ввода данных для вставки записи, которую вы можете идентифицировать (какой-то хэш), я никогда не делал этого в Java, просто теория того, как вы могли быбыть в состоянии сделать это .

Обновление

Вы можете попробовать стандартный вывод, предложенный darko petreski в качестве другого вариантаа также.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...