我有两个场景:一个用于开发(windows),另一个用于生产(unix)
Windows中的开发环境: 我有一个apache web服务器调用一个安装了javabridge的apache tomcat服务器来调用jasper报告。 (一切都在localhost上),一切正常。
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) "" }
可能是什么问题?服务器中是否有任何选项可以取出响应的标题或类似内容?
答案 0 :(得分:1)
我很抱歉我的英语不好 我有同样的问题.. 我通过卡巴斯基互联网安全上的非活动tomcat端口(8080)解决了这个问题。 转到设置 - &gt;附加 - &gt;网络。 选择仅选择的单选按钮监视器选择。 非活动端口8080。 在胜利10上它运行良好。
答案 1 :(得分:0)
我的代码没问题,问题是我试图通过公共IP访问其他服务器,所以防火墙以某种方式取出了请求的标题。
解决方案是将公共IP更改为相同的网络本地IP并且开始工作并且java.inc开始读取请求的标头,因此Java.inc和JavaProxy.php中的每个位置都必须设置网络ip和tomcats文件系统变量。