2009-12-02 2 views
0

Я пытаюсь вызвать java-программу в php, чтобы использовать ее с веб-интерфейсом.Вызов java-программы, зависящей от внешней библиотеки

программа Java зависит от внешнего Lib: Обще-кли-1.2.jar

Поэтому в основном мне нужно экспортировать его перед вызовом программы Java; но если я экспортировать его сначала как:

shell_exec('export CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar'); 

затем вызвать программу Java, как:

shell_exec('java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o'); 

Я думаю, что это создает различные оболочки для каждого вызова; то экспорт не влияет на java-программу. Или я ошибаюсь?

В противном случае он должен выдать файл на сервере. Но просто это не так. Итак, что не так? Есть идеи?

Редакция:

Редактировать: Как это может быть из-за того, что некоторые параметры, такие как para_i, означают имя входного файла, так что я должен указать полный путь для этого? Поскольку я просто предполагаю, что входной файл находится в том же рабочем каталоге, проблем не будет, не так ли?

редактировать-2: он выдает должным образом, когда я использовать командную строку;)

+1

вы можете использовать java -cp <> – Aif

+0

Я думаю -cp эффект программы только в компиляции. Потому что я пробовал это, но это все еще не сработало. – israkir

ответ

0

вы правы, каждый shell_exec создает отдельную оболочку.

env CLASSPATH=whatever java -switches 
0

Вы должны иметь возможность назвать это следующим образом.

shell_exec('java -cp $CLASSPATH:~/lib/commons-cli-1.2.jar ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message'); 

Другой вариант выдать 2 команды по отдельности, но в то же оболочке, как это:

shell_exec('export CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar; java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message'); 

редактировать: некоторые оболочки не позволяют назвать экспорт в то время как вы настраиваете вверх по переменной. так что это может быть безопаснее, чем второй вариант выше:

shell_exec('CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar; export CLASSPATH; java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message'); 

другое редактирование: Если ни один из вышеперечисленных работ, то вы не будете иметь, чтобы сделать некоторые более неприятности съемки. Работает ли ваша Java-программа из командной строки?

java -cp $CLASSPATH:/home/user/lib/commons-cli-1.2.jar ComputePagerank -i param1 -d param2 -e param3 -o param4 > message 
+0

Хорошо, я попробовал второй метод раньше, также. но все равно не сработало. Я также проверяю параметры, но просто они также правильно передаются. Я не знаю, что происходит за shell_exec. – israkir

+0

третий способ тоже не сделал. Кстати, может быть, потому что некоторые параметры, такие как para_i, означают имя входного файла, так что я должен указать полный путь для этого? в принципе, я предполагаю, что если он находится в одном рабочем каталоге, проблем не будет. – israkir

0

Я хотел бы использовать

shell_exec('java -cp $CLASSPATH:/home/yourname/dir/lib/commons-cli-1.2.jar ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message'); 

и (это важно) заменить тильды (~) фактический путь к директории (/home/yourname говорят). Расширение ~ расширяется оболочкой и зависит от того, какую оболочку вы используете.

+0

ну, я тоже пробовал его с полным путем. все еще не работает. – israkir

0

Попробуйте создать простой сценарий оболочки с командами, которые вы хотите выполнить. Вы можете передать аргументы сценарию оболочки, так что это тоже не проблема.

, например

echo "Running Script..." 
java -cp $CLASSPATH:~/lib/commons-cli-1.2.jar ComputePagerank -i $1 -d $2 -e $3 -o $4 > message 

и т.д.

Тогда попробуйте вызвать его из командной строки первой с некоторыми параметрами. Вышло ли это? Затем попробуйте вызвать его из скрипта php.Вышло ли это? Если это не так, вам может потребоваться проверить разрешения. Некоторое время назад у меня был опыт simiolar с программой Java, которая просто не имела права на запись файла.

+0

Да, он выводит правильно, когда я использую командную строку;) – israkir

+0

Пусть ваш скрипт php вызывает созданный вами сценарий оболочки. –

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