2010-09-10 3 views
8

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

Вот код:

<?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 />"; 
?> 

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

ш: Java: команда не найдена

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

+0

Вы вообще ничего не получаете? Любые ошибки? – Buggabill

+0

@Buggabill: Нет. Я не получаю Php, но получаю правильный вывод через Terminal (Console). –

ответ

3

Если файл 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

Как я должен использовать свой путь для решения моей проблемы? –

+0

сначала найдите путь java в linux command promtp с помощью этой команды: какой java. Он вернет/usr/bin/java. Используйте его как полный путь в вашей команде «/ usr/bin/java -jar $ jar aspdotnet/microsoft.com». Также, возможно, вам понадобится cd в каталог jar, если хотите, банкой. – darpet

+0

Уже сделал это ... и это сработало. Спасибо, Дарко! –

0

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

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

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

Update

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

0

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

+0

В сообщении об ошибке говорится: «java: command not found», а не о привилегиях. – darpet

0

Первое, что я хотел бы проверить/изменить, - это строка в функции, в которой вы строите переменную $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.

Смежные вопросы