【发布时间】:2012-01-04 00:41:49
【问题描述】:
我有一个现有的大型(ish)PHP Web 应用程序(使用 Apache 和 MySQL),现在需要能够调用基于 Java 的报告引擎。所以,我想要实现的是从现有 PHP 应用程序中访问 java 类的能力。
到目前为止,在一个新的开发服务器上,我已经成功安装了开源 PHP-Javabridge 项目(http://php-java-bridge.sourceforge.net/pjb/index.php)并让它在 Tomcat 下运行(7.0.22) 在使用端口 8080 的 Fedora 15 机器上。由于实时系统的托管限制,我无法使用 Zend Javabridge,不幸的是,目前无法选择更改提供程序。
我还使用端口 80 在开发盒上运行 Apache 和 PHP。
我可以在 Tomcat 中访问 JavaBridge webapp,并且所有 PHP 示例都可以正常工作。但是,当我尝试从现有应用程序中访问 JavaBridge 时遇到了问题。
我假设我应该可以从位于 Apache (/var/www/html) 的 Web 根目录中的脚本中调用 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_log 中产生以下错误
[2011 年 11 月 22 日星期二 15:01:08] [错误] [客户端 ::1] PHP 警告:require_once(http://localhost:8080/JavaBridge/java/Java.inc):无法打开流:第 2 行 /var/www/html/javatest.php 中的权限被拒绝
[2011 年 11 月 22 日星期二 15:01:08] [错误] [客户端 ::1] PHP 致命错误:require_once(): 无法打开所需的 '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 的副本)
<?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();
?>
这会产生以下错误:
[2011 年 11 月 22 日星期二 12:57:51] [错误] [客户端 ::1] PHP 警告:fsockopen():无法连接到 /usr/share/apache 中的 127.0.0.1:8080(权限被拒绝) -tomcat-7.0.22/webapps/JavaBridge/java/Java.inc 在第 994 行
[2011 年 11 月 22 日星期二 12:57:51] [错误] [客户端 ::1] PHP 致命错误:未捕获 无法连接到 JEE 服务器 127.0.0.1:8080。请启动它。错误消息:Permission denied (13)\n\n throw in /usr/share/apache-tomcat-7.0.22/webapps/JavaBridge/java/Java.inc on line 989
我为排除问题所采取的步骤是:
- 关闭服务器上的防火墙
- 将所有内容修改为 777
- 在我运行 PHP 脚本之前和之后检查 Tomcat 是否正在运行(我可能错误地认为 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 权限问题有关?
【问题讨论】:
标签: php php-java-bridge