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는 파일 쓰기 권한이 없는 기본 사용자입니다. . . 속았다