我想知道是否有任何方式通過PHP與運行的控制檯程序(最好在Linux/Debian上運行)進行通信。我目前正在嘗試爲一個(現有的)控制檯Java程序創建一個web界面,我不知道是否有任何方法可以做到這一點。我可以「注入」一段代碼,比方說一個遠程控制模塊,然後用它來通過PHP「遠程控制」腳本嗎? (這將是偉大的,如果現有的.jar文件不會改變/只是注入,不重新編程)在PHP中運行應用程序的接口?
我很感激每一個建議!
我想知道是否有任何方式通過PHP與運行的控制檯程序(最好在Linux/Debian上運行)進行通信。我目前正在嘗試爲一個(現有的)控制檯Java程序創建一個web界面,我不知道是否有任何方法可以做到這一點。我可以「注入」一段代碼,比方說一個遠程控制模塊,然後用它來通過PHP「遠程控制」腳本嗎? (這將是偉大的,如果現有的.jar文件不會改變/只是注入,不重新編程)在PHP中運行應用程序的接口?
我很感激每一個建議!
如果Java程序只運行並輸出到控制檯,那麼你就可以做到這一點很輕鬆了,這樣的事情:
$output = system("java com.yourcompany.package.RunnableClass");
print $output;
假設誰運行PHP的用戶可以訪問過程的Java二進制,並且您有權訪問JAR文件。
訪問正在運行的程序有點困難。大多數程序在默認情況下不會內置(也不應該 - 在許多情況下訪問隨機外部進程是不可取的)。如果確實如此,那麼你的狀態良好。如果沒有,並且你可以更改Java代碼,那麼你很好。如果沒有,那麼你可能會失敗。
如果是這樣,另一個好方法可能是查看Java代碼訪問的資源以及它如何訪問它們。然後你可以在PHP中編寫類似的東西。顯然,這不太理想,因爲您會重新發明輪子,但是如果您需要獲取數據或者其他任何信息,並且無法使用上述任何方法,則它將起作用。
我的方法是與正在運行的程序進行交互,因此您可以通過Internet管理正在運行的「守護進程」(如果您想這樣稱呼它)。我想我會更多地研究Java中的「代碼注入」。如果這個主題有什麼可以完全清除我的問題,我會讓你們知道。感謝您的快速解答! – 2012-04-24 17:54:44
「代碼注入」不會是一個很好的搜索術語,因爲它通常用於指代特定類型的漏洞利用。如果您無法訪問源代碼,您可以更好地查看對該jar進行反向工程的情況。 – lynks 2012-04-24 17:59:45
如果正在運行的程序沒有通信接口,則無法與其通信。但是,如果它確實如此,那麼答案很大程度上取決於程序如何接收外部輸入。
如果程序包含網絡監聽線程(守護進程),則可以使用CURL或PHP的原始套接字在回送接口上與它進行通信。
與程序通信的其他方式是共享對文件的訪問(PHP寫入文件,Java讀取文件)或通過數據庫。
數據庫將是最好的選擇 - 它是線程安全的,並且PHP和Java都具有出色的MySQL支持(Java通過JDBC)。
如果您不需要真正與運行程序進行交互,只需要啓動/停止/重新啓動它,那麼您可以使用PHP中的system()函數執行此操作。
你想執行一個外部程序?或與程序等守護進程進行通信? – Jarry 2012-04-24 17:40:17