Heim  >  Artikel  >  Backend-Entwicklung  >  Python – PHP ruft Shell-Befehl auf: exec('java -jar a.jar') wird nicht ausgeführt.

Python – PHP ruft Shell-Befehl auf: exec('java -jar a.jar') wird nicht ausgeführt.

WBOY
WBOYOriginal
2016-08-04 09:19:011777Durchsuche

Verwenden Sie die Funktion exec von PHP, um shell auszuführen. Viele Befehle können ausgeführt werden, es gibt jedoch ein Problem beim Ausführen von Java-Programmen.
[testshell.php] lautet wie folgt:

<code><?php
$str="java -jar a.jar";
exec($str,$output,$retnruVal);
print_r($output);
?></code>

Die Java-Datei ist ebenfalls sehr einfach. Es handelt sich um eine Testdatei, die helloworld ausgibt und in die Datei schreibt.
Außerdem verwende ich php, um diese Datei wie folgt direkt auszuführen, und es gelingt ohne Probleme:

<code>$ php testshell.php</code>

Aber wenn ich diese PHP-Datei im Browser ausführe, erfolgt keine Antwort.
Zuerst vermutete ich, dass es sich um ein Problem mit der Schreibberechtigung handelte, aber ich schrieb einen weiteren pythonTest:

<code>file("output.txt").write("测试\n")</code>

Dann wird testshell.php geändert in:

<code>$str="python a.py";
exec($str,$output,$retnruVal);
print_r($output);</code>

Das ist auch erfolgreich, daher weiß ich nicht, wo das Problem liegt – bitte geben Sie mir einen Rat.
Anbei ist das Programm a.java:

<code>import java.io.File;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileWriter;
public class a{
public static void main (String[] args) {

  try{
    File writename = new File("output.txt"); // 相对路径,如果没有则要建立一个新的output。txt文件
    writename.createNewFile(); // 创建新文件
    BufferedWriter out = new BufferedWriter(new FileWriter(writename));
    out.write("我会写入文件啦\r\n"); // \r\n即为换行
    out.flush(); // 把缓存区内容压入文件
    out.close(); // 最后记得关闭文件
  }catch(Exception e){
    e.printStackTrace();
  }
}
}</code>

hat a.java geändert und eine Ausgabe hinzugefügt. Das bedeutet, dass System.out.println ausgeführt werden kann, der nachfolgende Code jedoch nicht ausgeführt werden kann. Es scheint kein Berechtigungsproblem zu sein.

<code>public static void main (String[] args) {

  try{

    String a = "hello";
    System.out.println(a);

    File writename = new File("output.txt"); // 相对路径,如果没有则要建立一个新的output。txt文件
    writename.createNewFile(); // 创建新文件
    BufferedWriter out = new BufferedWriter(new FileWriter(writename));
    out.write("我会写入文件啦\r\n"); // \r\n即为换行
    out.flush(); // 把缓存区内容压入文件
    out.close(); // 最后记得关闭文件
  }catch(Exception e){
    e.printStackTrace();
  }
}</code>

Antwortinhalt:

Verwenden Sie die PHP-Funktion exec, um shell auszuführen. Viele Befehle können ausgeführt werden, es gibt jedoch ein Problem beim Ausführen von Java-Programmen.
[testshell.php] lautet wie folgt:

<code><?php
$str="java -jar a.jar";
exec($str,$output,$retnruVal);
print_r($output);
?></code>

Die Java-Datei ist auch sehr einfach. Es handelt sich um eine Testdatei, die helloworld ausgibt und in die Datei schreibt.
Außerdem verwende ich php, um diese Datei wie folgt direkt auszuführen, und es gelingt ohne Probleme:

<code>$ php testshell.php</code>

Aber wenn ich diese PHP-Datei im Browser ausführe, erfolgt keine Antwort.
Zuerst vermutete ich, dass es sich um ein Problem mit der Schreibberechtigung handelte, aber ich schrieb einen weiteren pythonTest:

<code>file("output.txt").write("测试\n")</code>

Dann wird testshell.php geändert in:

<code>$str="python a.py";
exec($str,$output,$retnruVal);
print_r($output);</code>

Das ist auch erfolgreich, daher weiß ich nicht, wo das Problem liegt – bitte geben Sie mir einen Rat.
Anbei ist das Programm a.java:

<code>import java.io.File;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileWriter;
public class a{
public static void main (String[] args) {

  try{
    File writename = new File("output.txt"); // 相对路径,如果没有则要建立一个新的output。txt文件
    writename.createNewFile(); // 创建新文件
    BufferedWriter out = new BufferedWriter(new FileWriter(writename));
    out.write("我会写入文件啦\r\n"); // \r\n即为换行
    out.flush(); // 把缓存区内容压入文件
    out.close(); // 最后记得关闭文件
  }catch(Exception e){
    e.printStackTrace();
  }
}
}</code>

hat a.java geändert und eine Ausgabe hinzugefügt. Das bedeutet, dass System.out.println ausgeführt werden kann, der nachfolgende Code jedoch nicht ausgeführt werden kann. Es scheint kein Berechtigungsproblem zu sein.

<code>public static void main (String[] args) {

  try{

    String a = "hello";
    System.out.println(a);

    File writename = new File("output.txt"); // 相对路径,如果没有则要建立一个新的output。txt文件
    writename.createNewFile(); // 创建新文件
    BufferedWriter out = new BufferedWriter(new FileWriter(writename));
    out.write("我会写入文件啦\r\n"); // \r\n即为换行
    out.flush(); // 把缓存区内容压入文件
    out.close(); // 最后记得关闭文件
  }catch(Exception e){
    e.printStackTrace();
  }
}</code>

Ich weiß nicht, ob es spezifische Rückgabeinformationen gibt, aber meiner Schlussfolgerung nach hat es etwas mit dem Dateipfad zu tun.

Sind die Umgebungsvariablen von Java korrekt? Versuchen Sie es mit dem vollständigen Java-Pfad auszuführen.

Gelöst. Berechtigungsproblem. www-data ist der Standardbenutzer ohne Schreibberechtigung für Dateien. . . Ausgetrickst

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn