> 백엔드 개발 > PHP 튜토리얼 > python - php가 쉘 명령을 호출합니다: exec('java -jar a.jar')가 실행되지 않습니다.

python - php가 쉘 명령을 호출합니다: exec('java -jar a.jar')가 실행되지 않습니다.

WBOY
풀어 주다: 2016-08-04 09:19:01
원래의
1806명이 탐색했습니다.

PHP의 exec 함수를 사용하여 shell을 실행합니다. 많은 명령을 실행할 수 있지만 자바 프로그램을 실행하는 데 문제가 있습니다.
[testshell.php]는 다음과 같습니다.

<code><?php
$str="java -jar a.jar";
exec($str,$output,$retnruVal);
print_r($output);
?></code>
로그인 후 복사
로그인 후 복사

java 파일도 매우 간단합니다. helloworld를 출력해서 파일에 쓰는 테스트 파일입니다.
그리고 php를 이용하여 이 파일을 다음과 같이 직접 실행해 보았는데 문제없이 성공합니다.

<code>$ php testshell.php</code>
로그인 후 복사
로그인 후 복사

그런데 이 php 파일을 브라우저에서 실행해도 아무런 반응이 없습니다.
처음에는 쓰기 권한 문제인 줄 알았으나 또 다른 python 테스트를 작성했습니다.

<code>file("output.txt").write("测试\n")</code>
로그인 후 복사
로그인 후 복사

그런 다음 testshell.php는 다음과 같이 변경됩니다.

<code>$str="python a.py";
exec($str,$output,$retnruVal);
print_r($output);</code>
로그인 후 복사
로그인 후 복사

이것도 성공했는데 어디가 문제인지 모르겠습니다. 조언 부탁드립니다.
첨부된 프로그램은 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>
로그인 후 복사
로그인 후 복사

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>
로그인 후 복사
로그인 후 복사

답글 내용:

PHP의 exec 함수를 사용하여 shell을 실행합니다. 많은 명령을 실행할 수 있지만 자바 프로그램을 실행하는 데 문제가 있습니다.
[testshell.php]는 다음과 같습니다.

<code><?php
$str="java -jar a.jar";
exec($str,$output,$retnruVal);
print_r($output);
?></code>
로그인 후 복사
로그인 후 복사

java 파일도 매우 간단합니다. helloworld를 출력해서 파일에 쓰는 테스트 파일입니다.
그리고 php를 이용하여 이 파일을 다음과 같이 직접 실행해 보았는데 문제없이 성공합니다.

<code>$ php testshell.php</code>
로그인 후 복사
로그인 후 복사

그런데 이 php 파일을 브라우저에서 실행해도 아무런 반응이 없습니다.
처음에는 쓰기 권한 문제인 줄 알았으나 또 다른 python 테스트를 작성했습니다.

<code>file("output.txt").write("测试\n")</code>
로그인 후 복사
로그인 후 복사

그런 다음 testshell.php는 다음과 같이 변경됩니다.

<code>$str="python a.py";
exec($str,$output,$retnruVal);
print_r($output);</code>
로그인 후 복사
로그인 후 복사

이것도 성공했는데 어디가 문제인지 모르겠습니다. 조언 부탁드립니다.
첨부된 프로그램은 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>
로그인 후 복사
로그인 후 복사

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>
로그인 후 복사
로그인 후 복사

구체적인 반환 정보가 있는지는 모르겠지만, 제 추측으로는 파일 경로와 관련이 있는 것 같습니다.

Java의 환경변수가 맞나요? Java 전체 경로로 실행해 보세요.

권한 문제가 해결되었습니다. www-data는 파일 쓰기 권한이 없는 기본 사용자입니다. . . 속았다

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿