0

2 つのシナリオがあります。1 つは開発用 (Windows) で、もう 1 つは生産用 (UNIX) です。

Windows での開発環境: jasper レポートを呼び出すために、javabridge をインストールした apache tomcat サーバーを呼び出す apache web サーバーがあります。(すべてローカルホスト上にあります) すべて正常に動作します。

CentOs の運用環境: ジャスパー レポートを呼び出すために、javabridge によって別の Tomcat サーバー (Java がインストールされている) を呼び出す Apache Web サーバーがあります。(ここでエラーが発生します)

Tomcat サーバーでは Javabridge 関数とサンプルを実行できますが、それらを Apache Web サーバーから呼び出すと失敗します

このエラーが発生しています

 Undefined offset: 1 in http://mysite_url/../Java.inc on line 1067 Fatal error: unknown error: please see back end log for details in http://mysite_url/Java.inc on line 869

このコードを実行しようとすると:

<?php

    //Parametro en caso de que el reporte no este parametrizado
    $Parametro = new java('java.util.HashMap');
    ?>

Tomcat サーバーの Java.inc ファイルの正確なコードは (1067 行目) です。

function parseHeaders() {
$this->headers=array();
$line=trim(fgets($this->socket,JAVA_RECV_SIZE));
$ar=explode (" ",$line);
$code=((int)$ar[1]);  // LINE NUMBER 1067
if ($code !=200) $this->headers["http_error"]=$code;
while (($str=trim(fgets($this->socket,JAVA_RECV_SIZE)))) {
if($str[0]=='X') {
if(!strncasecmp("X_JAVABRIDGE_REDIRECT",$str,21)) {
$this->headers["redirect"]=trim(substr($str,22));
} else if(!strncasecmp("X_JAVABRIDGE_CONTEXT",$str,20)) {
$this->headers["context"]=trim(substr($str,21));
}

Java.inc のもう 1 つの行は (867) です。

function dieWithBrokenConnection($msg) {
unset($this->protocol->client->protocol);
trigger_error ($msg?$msg:"unknown error: please see back end log for details",E_USER_ERROR);
}

更新 開発環境からリンクを呼び出すと、これは生成されたヘッダーです:

array(3) { [0]=> string(8) "HTTP/1.1" [1]=> string(3) "200" [2]=> string(2) "OK" }

本番環境から呼び出すと、ヘッダーが空です

array(1) { [0]=> string(0) "" }

何が問題なのですか?サーバーに応答のヘッダーなどを取り出すオプションはありますか?

4

2 に答える 2

0

私のコードは問題ありませんでした。問題は、パブリック IP で他のサーバーにアクセスしようとしていたため、ファイアウォールが何らかの形でリクエストのヘッダーを取り出していたことです。

解決策は、パブリックIPを同じネットワークローカルIPに変更することでした。すべてが機能し始め、Java.incがリクエストのヘッダーを読み取り始めたため、Java.incとJavaProxy.phpのすべての場所でネットワークIPとTomcatsファイルシステムを設定する必要があります変数も。

于 2015-02-05T20:52:33.160 に答える