3

既存の大規模な(っぽい)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でJavaBridgeWebアプリケーションにアクセスでき、すべての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_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')2行目の/var/www/html/javatest.php

他の提案されたスクリプトは次のとおりです:(注:私は/ 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-tomcat-の127.0.0.1:8080(アクセスが拒否されました)に接続できません7.0.22 / webapps / JavaBridge / java / Java.inc(994行目)

[2011年11月22日火曜日12:57:51][エラー][クライアント::1]PHP致命的なエラー:UncaughtJEEサーバー127.0.0.1:8080に接続できませんでした。始めてください。エラーメッセージ:アクセスが拒否されました(13)\ n\n行989の/usr/share/apache-tomcat-7.0.22/webapps/JavaBridge/java/Java.incにスローされました

問題を除外するために私が取った手順は次のとおりです。

  • サーバーのファイアウォールをオフにしました
  • Chmodはすべてを777にしました
  • PHPスクリプトを実行する前後にTomcatが実行されていることを確認しました(おそらく間違って、Tomcatが2番目のエラーメッセージで参照されているJEEサーバーであると思いますか?)4)。PHPのiniファイルにはopen_basedirの制限がなく、セーフモードがオンになっておらず、allow_furl_openおよびallow_url_includeオプションがあります。

私は本当にこれに固執しています。グーグルの量は、同様の特定の問題を発見しません。

私はJavaに非常に精通しておらず、その/var/www/html場所からjava関数を実行することが単に不可能であり、PHPスクリプトをから実行する必要がある限り、JavaBridgeのスティックの端が間違っている可能性があると言わなければなりません。 TomcatJavaBridgeアプリ内。

すべてのサーブレットが機能していると思いますが、知識が不足しているため、それを確認する必要がありません。

これはFedoraにあるので、SELinuxパーミッションの問題に関連している可能性がありますか?

4

4 に答える 4

3

水仙-ご入力いただきありがとうございますが、PHPがJavaBridgeを呼び出すのを妨げていた、SELinuxのアクセス許可の問題であることが判明しました。

rootユーザーとして次のコマンドを発行してSELinuxをシャットダウンすることで、この問題を一時的に解決しました。

setenforce 0

PHPとJavabridge間の相互作用を可能にするためにSELinuxパーミッションを変更するためのより満足のいく長期的な解決策を見つける必要がありますが、それは別の問題です...

于 2011-11-23T09:00:17.310 に答える
2

このコードをphp.iniに追加しましたか?

allow_url_include = On
于 2012-09-17T15:08:51.223 に答える
0

PHP Java Bridgeのセットアップ中に、いくつか問題が発生しました。ただし、セットアップを見ると、JAVA_HOSTSが127.0.0.1:8087として定義されていることがわかります。

ブラウザがそのポートで何かを認識できるのにブリッジ接続が機能しない場合は、リスニングアプリが正しくリスニングしていない可能性があります。

php-java-bridge.sourceforge.net/pjb/desktop-apps.phpにアクセスし、「JavaアプリケーションにPHP / Java Bridgeライブラリを追加する」のコードの太字のセクションに従うと、次のことが必要であることがわかります。 :

  • JavaBridge.jarファイルをプロジェクトに追加します
  • public static final String JAVABRIDGE_PORT="8087";クラスに追加
  • static final php.java.bridge.JavaBridgeRunner runner = php.java.bridge.JavaBridgeRunner.getInstance(JAVABRIDGE_PORT);クラスに追加
  • あなたの主な機能で、runner.waitFor();

これにより、基本的にアプリケーションがリッスンするように設定されます。

于 2011-11-22T16:31:17.840 に答える
0

他の人にこれに遭遇する追加のトラブルシューティングオプションを与えるために-これは私のために働きました:

sudo setsebool -P httpd_can_network_connect_db=1

これにより、SELinuxはapacheがデータベースに接続できるようになります。次のようなエラーが発生していました。

httpdエラーログ:

java.sql.SQLNonTransientConnectionException:....アクセスが拒否されました。原因:java.net.SocketException:アクセスが拒否されました

于 2014-10-28T00:02:29.907 に答える