PHP JavaBridge权限错误

PHP JavaBridge权限错误,php,php-java-bridge,Php,Php Java Bridge,我有一个现有的大型(ish)PHP web应用程序(使用Apache和MySQL),现在需要能够调用基于Java的报告引擎。因此,我试图实现的是从现有PHP应用程序中访问java类的能力 到目前为止,在一个新的开发服务器上,我已经成功地安装了开源PHP Javabridge项目(http://php-java-bridge.sourceforge.net/pjb/index.php)并让它在Tomcat(7.0.22)下使用端口8080在Fedora15盒上运行。我不能使用Zend Javabr

我有一个现有的大型(ish)PHP web应用程序(使用Apache和MySQL),现在需要能够调用基于Java的报告引擎。因此,我试图实现的是从现有PHP应用程序中访问java类的能力

到目前为止,在一个新的开发服务器上,我已经成功地安装了开源PHP Javabridge项目(http://php-java-bridge.sourceforge.net/pjb/index.php)并让它在Tomcat(7.0.22)下使用端口8080在Fedora15盒上运行。我不能使用Zend Javabridge,因为对live系统的托管限制,不幸的是,目前还不能选择更改提供程序

我还使用端口80在dev-box上运行Apache和PHP

我可以在Tomcat中访问JavaBridgeWebApp,所有PHP示例都可以正常工作。然而,当试图从现有应用程序中访问JavaBridge时,我遇到了一个问题

我假设我可以从Apache的web根目录(/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/logs/error\u log中产生以下错误

[11月22日星期二15:01:08 2011][error][client::1]PHP警告:需要一次(http://localhost:8080/JavaBridge/java/Java.inc):无法打开流:第2行的/var/www/html/javatest.php中的权限被拒绝

[Tue Nov 22 15:01:08 2011][error][client::1]PHP致命错误:require_once():无法打开required'http://localhost:8080/JavaBridge/java/Java.inc“(include_path=”。:/php/includes:/usr/share/apache-tomcat-7.0.22/webapps/JavaBridge”)位于/var/www/html/javatest.php的第2行

另一个建议的脚本是:(注意:我在/var/www/html中有一份Java.inc的副本)


这会产生以下错误:

[Tue Nov 22 12:57:51 2011][error][client::1]PHP警告:fsockopen():无法连接到第994行/usr/share/apache-tomcat-7.0.22/webapps/JavaBridge/java/java.inc中的127.0.0.0.1:8080(权限被拒绝)

[11月22日星期二12:57:51 2011][error][client::1]PHP致命错误:Uncaught无法连接到JEE服务器127.0.0.1:8080。请开始吧。错误消息:权限被拒绝(13)\n\n在第989行的/usr/share/apache-tomcat-7.0.22/webapps/JavaBridge/java/java.inc中抛出

我为排除问题而采取的步骤如下:

  • 已关闭服务器上的防火墙
  • 把一切都记录到777
  • 检查在运行PHP脚本之前和之后Tomcat是否正在运行(我假设Tomcat是第二条错误消息中提到的JEE服务器,可能是错误的) 4). PHPINI文件没有打开\u basedir限制,安全模式未打开,允许\u furl\u打开和允许\u url\u包含选项
我真的被这件事缠住了。谷歌没有发现任何类似的具体问题

我必须说,我对Java非常不熟悉,可能对JavaBridge的理解有误,因为它可能根本不可能从
/var/www/html
位置运行Java函数,任何PHP脚本都必须从Tomcat JavaBridge应用程序中运行

我假设所有的servlet都在工作,但我的知识不足意味着我不知道如何检查它


由于这是在Fedora上,它是否可以连接到SELinux权限问题?

在设置PHP Java桥时,我也遇到了一些问题。但是,在我的设置中,我看到JAVA_主机被定义为127.0.0.1:8087

如果您的浏览器能够在该端口上看到某些内容,但网桥连接仍然无法工作,则可能是侦听应用程序未正确侦听

如果您转到php-java-bridge.sourceforge.net/pjb/desktop-apps.php并按照“将php/java桥库添加到java应用程序”中的粗体代码部分操作,您可以看到您需要:

  • 将JavaBridge.jar文件添加到项目中
  • 添加
    公共静态最终字符串JAVABRIDGE\u PORT=“8087”到你的班级
  • 添加
    static final php.java.bridge.JavaBridgeRunner=php.java.bridge.JavaBridgeRunner.getInstance(JAVABRIDGE\u端口)到你的班级
  • 在main函数中,调用
    runner.waitFor()

这将基本上设置您的应用程序以进行侦听。

Narcissus—非常感谢您的输入,但这是SELinux的权限问题,它阻止了PHP调用JavaBridge

我已通过以root用户身份发出以下命令关闭SELinux暂时解决了此问题:

setenforce 0

我需要找到一个更令人满意的长期解决方案来改变SELinux权限,以允许PHP和Javabridge之间的交互,但这是一个不同的问题

您是否在php.ini中添加了此代码

allow_url_include = On

为了给别人一个额外的解决问题的选择,我无意中发现了这一点——这对我很有用:

sudo setsebool -P httpd_can_network_connect_db=1
这使SELinux允许apache连接到您的数据库。我遇到了如下错误:

httpd
错误日志:

java.sql.SQLNonTransientConnectionException:。。。。拒绝许可。 原因:java.net.SocketException:权限被拒绝


谢谢你的快速回复!但我恐怕没有什么乐趣——仍然得到了拒绝许可的错误。它显然找到了Java.inc文件,但是似乎有什么东西阻止了它运行JavaBridge…所以当你将浏览器发送到那个IP地址/端口号时,你得到了什么吗?如果我没有在另一端运行Java应用程序(调用'runner.waitFor();'的应用程序,其中runner是php.Java.bridge.JavaBridgeRunner的实例),我会得到一个超时。但是,如果应用程序正在运行,我似乎会得到一个目录列表。对不起,如果你已经回答了!是的,这就是为什么它有点奇怪。我可以访问JavaBridge(以及所有的考试)
sudo setsebool -P httpd_can_network_connect_db=1