Table des matières
回复内容:
Maison développement back-end tutoriel php python - php调用shell命令: exec('java -jar a.jar') 不执行。

python - php调用shell命令: exec('java -jar a.jar') 不执行。

Aug 04, 2016 am 09:19 AM
java php python

使用php的exec函数来执行shell, 很多命令都可以执行,唯独执行java程序有问题。
[testshell.php]如下:

<code><?php $str="java -jar a.jar";
exec($str,$output,$retnruVal);
print_r($output);
?></code>
Copier après la connexion
Copier après la connexion

java文件也很简单,就是一个测试文件,输出helloworld,并写到文件。
另外我用php直接执行这个文件,如下,成功,没有问题:

<code>$ php testshell.php</code>
Copier après la connexion
Copier après la connexion

但是在浏览器中执行这个php文件,没有反应。
开始猜测是写权限问题,但是又写了个python测试:

<code>file("output.txt").write("测试\n")</code>
Copier après la connexion
Copier après la connexion

然后testshell.php改为:

<code>$str="python a.py";
exec($str,$output,$retnruVal);
print_r($output);</code>
Copier après la connexion
Copier après la connexion

这样也是成功的, 所以就不知道问题处在哪里了--请指教啊。
附 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>
Copier après la connexion
Copier après la connexion

a.java改了,加了一个输出,结果可以输出,也就是说能够执行System.out.println但是后续的代码无法执行, 感觉也不是权限问题啊。

<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>
Copier après la connexion
Copier après la connexion

回复内容:

使用php的exec函数来执行shell, 很多命令都可以执行,唯独执行java程序有问题。
[testshell.php]如下:

<code><?php $str="java -jar a.jar";
exec($str,$output,$retnruVal);
print_r($output);
?></code>
Copier après la connexion
Copier après la connexion

java文件也很简单,就是一个测试文件,输出helloworld,并写到文件。
另外我用php直接执行这个文件,如下,成功,没有问题:

<code>$ php testshell.php</code>
Copier après la connexion
Copier après la connexion

但是在浏览器中执行这个php文件,没有反应。
开始猜测是写权限问题,但是又写了个python测试:

<code>file("output.txt").write("测试\n")</code>
Copier après la connexion
Copier après la connexion

然后testshell.php改为:

<code>$str="python a.py";
exec($str,$output,$retnruVal);
print_r($output);</code>
Copier après la connexion
Copier après la connexion

这样也是成功的, 所以就不知道问题处在哪里了--请指教啊。
附 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>
Copier après la connexion
Copier après la connexion

a.java改了,加了一个输出,结果可以输出,也就是说能够执行System.out.println但是后续的代码无法执行, 感觉也不是权限问题啊。

<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>
Copier après la connexion
Copier après la connexion

不知道有没有具体的返回信息,不过从我的推断来说,与文件路径不无关系。

java的环境变量正确么。 试试用java完整路径执行。

已经解决. 权限问题。 www-data是默认用户无写文件权限。。。坑了

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian

Comment télécharger Deepseek Xiaomi Comment télécharger Deepseek Xiaomi Feb 19, 2025 pm 05:27 PM

Comment télécharger Deepseek Xiaomi

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Comment configurer Visual Studio Code (VS Code) pour le développement PHP

Comment lui demandez-vous Deepseek Comment lui demandez-vous Deepseek Feb 19, 2025 pm 04:42 PM

Comment lui demandez-vous Deepseek

Comment rechercher Deepseek Comment rechercher Deepseek Feb 19, 2025 pm 05:18 PM

Comment rechercher Deepseek

Comment analysez-vous et traitez-vous HTML / XML dans PHP? Comment analysez-vous et traitez-vous HTML / XML dans PHP? Feb 07, 2025 am 11:57 AM

Comment analysez-vous et traitez-vous HTML / XML dans PHP?

Comment programmer Deepseek Comment programmer Deepseek Feb 19, 2025 pm 05:36 PM

Comment programmer Deepseek

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Break or Return of Java 8 Stream Forach?

See all articles