У меня есть существующее большое (ish) PHP веб-приложение (использующее Apache и MySQL), которое теперь должно иметь возможность вызывать механизм отчетов на основе Java. Поэтому я пытаюсь получить доступ к классам Java из существующего приложения PHP.
Пока что на новом сервере разработчика я успешно установил проект PHP-Javabridge с открытым исходным кодом (http://php -java-bridge.sourceforge.net / pjb / index.php) и запустил его под управлением Tomcat (7.0). .22) на коробке Fedora 15 с портом 8080. Я не могу использовать Zend Javabridge из-за ограничений хостинга для работающей системы, и, к сожалению, в настоящее время смена провайдера не является опцией.
У меня также есть Apache и PHP, работающие на устройстве dev с использованием порта 80.
Я могу получить доступ к веб-приложению JavaBridge в Tomcat, и все примеры PHP работают нормально. Тем не менее, я столкнулся с проблемой при попытке получить доступ к JavaBridge из моего существующего приложения.
Я предполагаю, что я мог бы вызвать функцию php 'java' из скрипта, расположенного в корне сети для Apache (/var/www/html).
Я использовал скрипт, поставляемый в приложении JavaBridge, следующим образом:
<?php
require("http://127.0.0.1:8080/JavaBridge/java/Java.inc");
echo java("java.lang.System")->getProperties();
?>
Это приводит к следующим ошибкам в / etc / httpd / logs / error_log
[Вт Ноя 22 15:01:08 2011] [error] [client :: 1] Предупреждение PHP: require_once (http://localhost:8080/JavaBridge/java/Java.inc): не удалось открыть поток: в /var/www/html/javatest.php отказано в разрешении строка 2
[Вт Ноя 22 15:01:08 2011] [error] [client :: 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
Другой предлагаемый скрипт: (примечание: у меня есть копия Java.inc в / var / www / html)
<?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();
?>
Это приводит к следующим ошибкам:
[Вторник, 22 ноября 12:57:51 2011] [ошибка] [клиент :: 1] Предупреждение PHP: fsockopen (): невозможно подключиться к 127.0.0.1:8080 (доступ запрещен) в / usr / share / apache -tomcat-7.0.22 / webapps / JavaBridge / java / Java.inc в строке 994
[Вт ноя 22, 12:57:51 2011] [ошибка] [клиент :: 1] Неустранимая ошибка PHP: Uncaught Не удалось подключиться к серверу JEE 127.0.0.1:8080. Пожалуйста, начните это. Сообщение об ошибке: «Отказано в доступе» (13) \ n \ n в строке /usr/share/apache-tomcat-7.0.22/webapps/JavaBridge/java/Java.inc в строке 989
Шаги, которые я предпринял для исключения проблем:
- Выключил брандмауэр на сервере
- Chmod'd все до 777
- Проверено, что Tomcat работает до и после запуска сценария PHP (я предполагаю, возможно, ошибочно, что Tomcat - это сервер JEE, упомянутый во втором сообщении об ошибке?)
4). В ini-файле PHP нет ограничений open_basedir, безопасный режим не включен, а параметры allow_furl_open и allow_url_include
Я действительно застрял на этом. Никакое количество Google не находит подобной специфической проблемы.
Я должен сказать, что я очень незнаком с Java и, возможно, получил неправильный конец флешки на JavaBridge, поскольку просто невозможно запустить функцию java из местоположения /var/www/html
и что любой PHP-скрипты должны запускаться из приложения Tomcat JavaBridge.
Я предполагаю, что все сервлеты работают, но мое отсутствие знаний означает, что я не знаю, чтобы это проверить.
Поскольку это происходит в Fedora, может ли оно быть связано с проблемой разрешений SELinux?