2012-12-16 2 views
1

PHP를 통해 Java에 연결하고 결과를 PHP로 인쇄하고 싶습니다. 이제 java에 매개 변수를 보내고 PHP로 돌아가서 어떻게 작동하는지보고 싶습니다. 어떻게해야합니까? 지금까지이 코드가 있습니다PHP exec() & java 매개 변수를 보내십시오.

PHP :

exec("java jar/name.jar", $output); 
print_r($output); 

자바 :

public class Main { 
    public static void main(String[] args) { 
     System.out.print(args[0]); 
    } 
} 

결과는

Array () 

답변

1

자바 프로그램이어야 하나 개의 인수를 기대하지만, PHP 코드를 제공하므로

exec('java jar/name.jar', $output); 

exec('java jar/name.jar some_value', $output); 

편집 변경되지 않습니다

이유를 이유를 인수를 지정하지 않은 경우 Array()가 발생합니다. java에서 보내는 오류는 stderr로 보내지기 때문에 $ output은 stdout에서 데이터 만 가져옵니다.

+0

나는 당신이 말한대로했으나 배열도 비어 있습니다. – bw2801

+0

@ bw2801 당신은 java jar/name.jar 부분이 맞습니까? php 파일과 관련하여 name.jar 파일이 맵 jar에 있음을 의미합니다. 필자가 테스트 한 방식은 test.php와 Main.java를 코드와 동일한 디렉토리에 작성하는 것입니다. javac Main.java를 실행하고 php test.php를 실행합니다. test.php는 exec ('java Main some_value', $ output); – Xeli

+0

"jar"폴더가 PHP 파일과 동일한 디렉토리에 있음 – bw2801

0

는 편안한 디자인을 사용하는 것이 좋습니다입니다. Java 프로그램을 URL에두고 PHP * file_get_contents() *를 사용하여 URL에서 읽습니다. Java 프로그램이 브라우저 출력 스트림에 작성하는 모든 것은 해당 함수가로드 한 PHP 변수에 표시됩니다.

0

네이티브 Java 코드를 PHP 응용 프로그램에 통합하려는 경우 PHP/Java Bridge은 Java 코드를 exec()해야하는 것보다 더 나은 방법으로이를 해결할 수 있습니다.

그러나 Java 기능을위한 작은 서비스를 만드는 것이 바람직한 방법이며 작은 웹 기반 API (JSON을 교환 형식으로 사용하는 것이 좋습니다)를 통해 이러한 기능을 제공하는 것이 좋습니다.

8

수행

exec("/full/path/to/java -jar jar/name.jar 2>&1", $output); 
print_r($output); 

때문에

당신의 PHP의 ENV는
  • jar 파일로 실행됩니다 아마 자바 실행 파일 경로에 정의하지 않습니다 (그리고 역시 안)
    • java -jar
    • 2>&1은 출력에서 ​​오류 메시지를 볼 수 있습니다 (stderr에서 stdout으로 리디렉션)
  • +1

    세 번째 요점은 어떤 프로그램을 사용하지 않고 매우 유용했다. $ output anything이 아닌 이유는 알 수 없습니다! –

    +0

    @AbhishekK stderr에 오류를 인쇄하기 때문에 정상적으로 stdout 만 캡처되고 정상 출력으로 이동합니다. – eis