我有一個現有的大型(ISH)PHP Web應用程序(使用Apache和MySQL),現在需要能夠調用基於Java的報告引擎。所以,我試圖實現的是從現有PHP應用程序中訪問Java類的能力。PHP JavaBridge權限錯誤
到目前爲止,在新的開發服務器上,我已經成功安裝了開源PHP-Javabridge項目(http://php-java-bridge.sourceforge.net/pjb/index.php),並使其運行使用端口8080的Fedora 15盒子上的Tomcat(7.0.22)。由於現場系統的託管限制,我不能使用Zend Javabridge,不幸的是改變的提供者目前不是一種選擇。
我也有Apache和PHP的開發機器上運行使用端口80
我可以訪問Web應用程序爲JavaBridge在Tomcat和所有的PHP的例子很好地工作。但是,當我嘗試從現有的應用程序中訪問JavaBridge時遇到了問題。
我假設它應該可以從位於Apache根網站腳本(/ var/www/html)的腳本中調用php'java'函數。
我已經使用在JavaBridge的應用程序提供的腳本如下:
<?php
require("http://127.0.0.1:8080/JavaBridge/java/Java.inc");
echo java("java.lang.System")->getProperties();
?>
這產生在/ etc/httpd的/日誌/ error_log中
[Tue Nov 22 15:01:08 2011] [error] [client ::1] PHP Warning: require_once(http://localhost:8080/JavaBridge/java/Java.inc): failed to open stream: Permission denied in /var/www/html/javatest.php on line 2
[Tue Nov 22 15:01:08 2011] [error] [client ::1] PHP Fatal error: require_once(): Failed opening required 'http://localhost:8080/JavaBridge/java/Java.inc' (include_path='.:/php/includes:/usr/share/apache-tomcat-7.0.22/webapps/JavaBridge') in /var/www/html/javatest.php on line 2
以下錯誤的其他建議的腳本是:(注意:我在/ var/www/html中有一個Java.inc副本)
<?php
define("JAVA_HOSTS", "127.0.0.1:8080");
define("JAVA_SERVLET", "/JavaBridge/servlet.phpjavabridge");
require_once("./Java.inc");
echo java("java.lang.System")->getProperties();
?>
這產生了fo llowing錯誤:
[Tue Nov 22 12:57:51 2011] [error] [client ::1] PHP Warning: fsockopen(): unable to connect to 127.0.0.1:8080 (Permission denied) in /usr/share/apache-tomcat-7.0.22/webapps/JavaBridge/java/Java.inc on line 994
[Tue Nov 22 12:57:51 2011] [error] [client ::1] PHP Fatal error: Uncaught Could not connect to the JEE server 127.0.0.1:8080. Please start it. Error message: Permission denied (13)\n\n thrown in /usr/share/apache-tomcat-7.0.22/webapps/JavaBridge/java/Java.inc on line 989
我已經採取了排除問題的步驟如下:
- 關機狀態防火牆服務器上
- Chmod'd一切爲777
- 經檢查發現是Tomcat在我運行PHP腳本之前和之後運行(我可能錯誤地認爲Tomcat是第二條錯誤消息中提到的JEE服務器?) 4)。 PHP的ini文件沒有open_basedir的限制,安全模式沒有打開,allow_furl_open和allow_url_include選項
我真的堅持這一點。沒有任何谷歌搜索發現任何類似的具體問題。
我必須說我對Java非常不熟悉,並且可能在JavaBridge上出現了錯誤的結尾,因爲它可能根本無法從/var/www/html
位置運行java函數,並且任何PHP腳本必須從Tomcat JavaBridge應用程序中運行。
我假設所有的servlet都在工作,但我缺乏知識意味着我不知道要檢查。
因爲Fedora可以連接到SELinux的權限問題嗎?
感謝您的快速回復!但是我害怕沒有喜悅 - 仍然獲得許可,否認錯誤。它明顯地找到了Java.inc文件,但似乎阻止它運行JavaBridge ... –
因此,當您將瀏覽器發送到該IP地址/端口號時,是否有任何東西?如果我沒有在另一端運行我的Java應用程序(調用'runner.waitFor();'的應用程序,其中runner是php.java.bridge.JavaBridgeRunner的一個實例),我得到一個超時。如果應用程序正在運行,我似乎得到一個目錄列表。對不起,如果你已經回答了! – Narcissus
是的 - 這就是爲什麼它有點奇怪。我可以通過127.0.0.1:8080/JavaBridge訪問JavaBridge(以及所有例子)... –