0

我有两种情况:一种用于开发(windows),另一种用于生产(unix)

Windows 中的开发环境:我有一个 apache Web 服务器,它调用一个安装了 javabridge 的 apache tomcat 服务器以调用 jasper 报告。(一切都在本地主机上)并且一切正常。

CentOs 中的生产环境:我有一个 apache Web 服务器,它通过 javabridge 调用另一个 tomcat 服务器(安装了 java)以调用 jasper 报告。(这是我得到错误的地方)

在 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 中的另一行是 (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

1

我很抱歉我的英语不好我有同样的问题。我通过卡巴斯基互联网安全上的非活动 tomcat 端口(8080)解决了这个问题。转到设置-> 附加-> 网络。仅选择单选按钮监视器上的选择。非活动端口 8080。它可以在 win 10 上运行良好。

于 2017-03-12T21:03:13.477 回答
0

我的代码没问题,问题是我试图通过公共 ip 访问另一台服务器,所以防火墙以某种方式取出了请求的标头。

解决方案是将公共 ip 更改为相同的网络本地 ip,一切开始工作,java.inc 开始读取请求的标头,因此 Java.inc 和 JavaProxy.php 中的每个地方都必须设置网络 ip 和 tomcats 文件系统变量也。

于 2015-02-05T20:52:33.160 回答