Heim > Backend-Entwicklung > PHP-Tutorial > 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
Freigeben: 2016-08-04 09:19:01
Original
1819 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

Dann wird testshell.php geändert in:

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

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

Dann wird testshell.php geändert in:

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

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage