2016-06-30 6 views
2

У меня есть Linux-сервер (Debian). У меня есть java-программа (скомпилирована) в каталоге (reza). Я пытаюсь выполнить эту java-программу из/var/www и через php-скрипт.выполнить java из php из другого каталога

$com=shell_exec('java /reza/z'); 

При вызове в формате выше dosent возвращает любые результаты или выполняет java-программу. Когда я звоню один PHP скрипт в папку Реза с таким же форматом вызова он возвращает правильный ответ:

$com=shell_exec('php /reza/a.php'); 

Любая идея, как сделать эту работу correctlly?

P.S. когда вызов Java из одной директории с PHP возвращает правильный ответ:

$com=shell_exec('java z'); 

Java файл компилируется и включают в себя файл класса тоже.

Java код образца:

import java.io.*; 

public class z{ 

    public static void main(String args[])throws IOException{ 

     File file = new File("Hello1.txt"); 
     // creates the file 
     file.createNewFile(); 
     // creates a FileWriter Object 
     FileWriter writer = new FileWriter(file); 
     // Writes the content to the file 
     writer.write("This\n is\n an\n example\n"); 
     writer.flush(); 
     writer.close(); 

     //Creates a FileReader Object 
     FileReader fr = new FileReader(file); 
     char [] a = new char[50]; 
     fr.read(a); // reads the content to the array 
     for(char c : a) 
      System.out.print(c); //prints the characters one by one 
     fr.close(); 
    } 
} 

С уважением,

Наконец решили эту проблему. Необходимо изменить разрешение целевой папки и включить «Write». Спасибо всем за то, что помогли мне.

+0

Вы проверили журналы своего сервера? –

+0

Да, ошибок в сервере нет. –

ответ

0

Используйте переключатель пути к классам:

$com=shell_exec('java -cp /reza z'); 
+0

попробовал до и теперь снова, но не работает и возвращает это: $ com = shell_exec ('java z'); –

+0

Имеет ли ваш класс z в нем идентификатор пакета? –

+0

Нет. Я использовал простой простой код, чтобы вернуть только одну строку. –

0

Поместите полный путь к Java executible в команде (/ USR/бен/Java, например). Вам также может потребоваться настроить путь к классу и т. Д. С помощью аргументов. Помните, что Java выполняется в контексте пользователя веб-сервера, а не для вашего личного входа, поэтому среда может не иметь одинаковых переменных, определенных с одинаковыми значениями, таких как JRE_HOME, PATH и т. Д.

Чтобы узнать, что у вас есть shell выполняет команду env для отображения доступных переменных среды с помощью php. Я думаю, что phpinfo() предоставит вам ту же информацию.

+0

Я пробовал найти ошибку. Он возвращает это: Исключение в потоке «main» java.io.IOException: Permission denied при java.io.UnixFileSystem.createFileExclusive (собственный метод) в java.io.File.createNewFile (File.java:1006) в z.main (z.java:9) –

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