我有一个现有的大型(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(以及所有例子)... –