2010-09-24 45 views
9

tôi muốn chạy một cái gì đó tương tự (trong myProgram.sh):Làm thế nào để chạy chương trình Java và nhận đầu ra trong PHP?

java -cp whatever.jar com.my.program $1 

trong PHP và đọc kết quả.

Cho đến nay tôi có một cái gì đó như:

$processOrderCommand = 'bash -c "exec nohup setsid /myProgram.sh ' . $arg1 . ' > /dev/null 2>&1 &"'; 
exec($processOrderCommand); 

Nhưng những gì tôi thực sự muốn là để có thể nhận được đầu ra của chương trình java trong kịch bản PHP và không chỉ thực hiện nó như thread khác.

Làm cách nào để thực hiện điều này?

+0

Dường như vấn đề là các classpaths phải là tuyệt đối, tương đối, ngay cả khi chính xác, thất bại. Tôi sẽ đăng câu trả lời ngay khi có thể. –

Trả lời

0

Điều quan trọng là các đường dẫn lớp cần phải tuyệt đối trong kịch bản lệnh shell_exec PHP.

Hoặc ít nhất đó là cách duy nhất tôi có thể làm cho nó hoạt động chính xác. Về cơ bản nó gần như không thể nói từ môi trường đến môi trường thư mục tương đối là kịch bản php đang chạy JVM.

Đồng thời, nó giúp để đưa đường dẫn vị trí tuyệt đối cho java, chẳng hạn như usr /.../ bin/java

7

Bạn có thể làm điều này:

exec($processOrderCommand, $output); 

Từ các tài liệu:

Nếu đối số output là hiện nay, sau đó các mảng được chỉ định sẽ được lấp đầy với tất cả các dòng đầu ra từ lệnh. Dấu cách khoảng trắng, chẳng hạn như \ n, không được bao gồm trong mảng này. Lưu ý rằng nếu mảng đã chứa một số phần tử, exec() sẽ nối thêm vào cuối mảng. Nếu bạn không muốn chức năng thêm các phần tử, hãy gọi unset() trên mảng trước khi chuyển nó đến exec().

Đối với một kiểm soát tốt hơn tình hình thực hiện, bạn có thể có một cái nhìn tại proc_open()


Resources:

+0

Thật không may điều này không hoạt động với đầu ra Java. Thậm chí chỉ chạy java -version trả về một mảng trống. –

+2

@Stephane Grenier đó là do đầu ra của '-version' là trên luồng lỗi;) –

+0

@Colin: Tôi vừa chạy exec ('java -cp hardcodedPath/TestOutput.jar com.my.TestProgram hello', $ output); Kết quả là một mảng trống. Trong chương trình, tôi chỉ làm một System.out.println (args [0]) // tức là. xin chào. Bất kỳ đề xuất? –

Các vấn đề liên quan