2015-07-13 2 views
0

У меня есть исполняемые исполняемые файлы php, которые поступают из некоторых приложений php-сервера на игровом рынке, и я попробовал их на своем планшете с помощью приложения оболочки.не может запускать/получать выходные данные из runtime.getruntime.exec() (android java)

Я создаю новое приложение и пытаюсь запустить его и получить выход, но он не работает.

У меня есть функция, которая копирует активы на устройство. У меня также есть некоторый код, чтобы проверить, что они там правильно

File file4 = new File(getFilesDir().getAbsolutePath()+"/php"); 
file4.setExecutable(true); 
s+=file4.getName(); 
s+=file4.exists(); 
s+=file4.canExecute(); 
s+=file4.length(); 

он делает правильно сказать файл существует, является исполняемым и правильная длина файла.

Теперь я пытаюсь запустить его, он не дает мне выход php.

Я пробовал php -v для версии выход, не работает.

Я пробовал php phpfile.php >> file.html и прочитал файл, не работает.

Я пробовал с -f, а также без -f, но он не работает.

Наконец, я попытался дать параметры и работать dir отдельно .exec и до сих пор она не дает должного выхода

Когда я попытался runtime.getruntime.exec с другими командами, как /bin/cmd/ls ... это дает правильный вывод.

PHP-файлы работают, я пробовал 2 из них на своем устройстве, в моем приложении ничего не работает.

Буду признателен за помощь.

s+=runphp(); 

public String runphp(){ 
try { 
    String prog= "./php"; 
    String[] env= { "-f", getFilesDir().getAbsolutePath()+"/phprun.php"}; // ">>","phpoutput.txt" 
    File dir= new File(getFilesDir().getAbsolutePath()); 
    Process p = Runtime.getRuntime().exec(prog,env,dir); 

    BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
    String line=null; 
    String output=""; 
    while ((line = in.readLine()) != null) { 
     output += line; 
    } 
    in.close(); 
    p.waitFor(); 
    return output; 

} catch (IOException e) { 
throw new RuntimeException(e); 
} catch (InterruptedException e) { 
throw new RuntimeException(e); 
} 
} 

Функция делает работу для других команд.

+2

Пытались чтение из getErrorStream, а? – immibis

+0

Я еще не научился это делать ... висеть только что узнал .. errm это дает кучу чисел? – user3110739

+0

Он дает 24 номера между 30 и 150? Являются ли они ошибками? – user3110739

ответ

1

Для получения формы Runtime.exec(String prog, String[] envp, File directory) необходимо указать окружающую среду в форме name=value в категории String[] envp.

Но вы используете его для передачи аргументов в вашу программу php.

Используйте следующий метод вместо

Process exec (String[] progArray, String[] envp, File directory); 

и передать все свои аргументы командной строки тоже в самом первом массиве.

Ваша команда должна выглядеть следующим образом:

String[] progArray= {"./php", "-f", getFilesDir().getAbsolutePath()+"/phprun.php"}; // ">>","phpoutput.txt" 
File dir= new File(getFilesDir().getAbsolutePath()); 
Process p = Runtime.getRuntime().exec(progArray,null,dir); 
+0

, он говорит то же самое: **./Php [1]: синтаксическая ошибка:« [искаженные буквы] »неожиданно ** это ответ системы или php исполняемый мне интересно? – user3110739

+0

или это значит, что эмулятор не может запускать собственные двоичные файлы? но они запускают ls и другие команды ... aha я получаю то, что вы сказали сейчас. environment vs arguments – user3110739

+0

Что произойдет, если вы выполните ту же команду, используя 'adb shell'? – Codebender

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