2016-01-20 45 views
4

從Java到PHP文件建立一個橋樑是可能的嗎?允許Glassfish和PHP在同一臺服務器上一起使用Apache

我有一個用Java編寫的應用程序,我需要用PHP編寫的執行http://piwik.org/。在服務器中,我運行PHP,但無法從瀏覽器訪問php目錄,因爲所有傳入流量都由apache重定向到glassfish應用程序服務器。

所以我的想法是使用Java servlet來執行PHP文件有:

Runtime.getRuntime().exec("php /path/to/file/file.php"); 

然後寫PHP的輸出作爲Java Servlet的響應。

達到這一目的的唯一問題是:

我如何執行PHP CLI,它像一個瀏覽器?

我需要將哪些參數傳遞給PHP以允許PHP讀取或寫入cookie和會話?

+0

如果您在CGI模式的PHP程序和SE預期的環境變量,PHP應該就像它正在執行中說mod_php的反應。有關詳細信息,請參閱http://php.net/manual/en/install.unix.commandline.php。 – Mark

回答

4

如果您使用Apache代理流量,我只是將所有流量排除在Piwik上,並直接從文件系統/ mod_php/php-fpm /無論您通常使用什麼。

您也可以使用php-cgi並傳遞適當的環境變量,但這會使許多事情變得複雜,就像您必須將響應代理回瀏覽器一樣。 Apache已經支持這個,所以不要在你的應用程序中實現另一個代理,直接在Apache中執行。

您可以排除被代理的一個目錄:

ProxyPass /piwik ! 
ProxyPass/127.0.0.1:8080 
ProxyPassReverse/127.0.0.1:8080 
4

當你在命令行中執行PHP腳本GET/POST/SESSION/COOKIE 變量是毫無意義的。當你的file.php發送一個cookie時,沒有瀏覽器接收它,保存並用於後續請求。

你可以做的是使用CGI SAPI,這樣所有的HTTP_*變量都可以使用,並且頭文件將被寫入輸出。

php-cgi二進制實現了CGI接口,它允許你通過像這樣在命令行上的cookie:

HTTP_COOKIE='PHPSESSID=XXXX' php-cgi /path/to/file/file.php 

哪裏XXXX可以是用戶的會話ID。您可以閱讀分析輸出中標題的cookie。

+0

我試圖做到這一點,但我收到警告,提醒我我不能使用cookie,因爲瀏覽器不支持它。我想我需要設置一個允許它的參數。 –

+0

錯誤信息是什麼? – Federkun

+0

不能運行程序「HTTP_COOKIE =」test = 1「」:error = 2,沒有這樣的文件或目錄 現在我收到這個錯誤只有當我通過Java執行,使用控制檯我收到輸出。 –

2

感謝的kelunik的想法,使用Apache排除流量和幫助下通過費德里科我已經解決使用這個問題Apache的規則:

ProxyPass /phpdir ! 
ProxyPass/127.0.0.1:8080 
ProxyPassReverse/127.0.0.1:8080 

Apache的重定向所有請求的端口8080,該文件夾/phpdir除外。在Apache文檔根目錄中,我創建了目錄phpdir這是運行PHP應用程序的新根。

就是這樣

+0

這就是我一直在尋找的語法。編輯它到我的答案,因爲它比重寫更好。 – kelunik

相關問題