У меня есть два сценария: один для разработки (Windows) и другой для производства (Unix)
Разработка env в Windows:
У меня есть веб-сервер Apache, который вызывает сервер Apache Tomcat, который установил Javabridge для вызова отчета Jasper. (Все на localhost) и все отлично работает.
Производственная среда в CentOs:
У меня есть веб-сервер apache, который вызывает javabridge другой сервер Tomcat (на котором установлена Java), чтобы вызвать отчет о яшме. (Вот где я получаю ошибку)
На сервере Tomcat я могу выполнять функции и примеры Javabridge, но когда я вызываю их с веб-сервера Apache, это не удается
Я получаю эту ошибку
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');
?>
Точный код в файле Java.inc сервера tomcat (строка 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" }
Когда я звоню с производства env, заголовок пуст
array(1) { [0]=> string(0) "" }
В чем может быть проблема? Есть ли какая-либо опция на сервере, которая вынимает заголовок ответа или что-то в этом роде?
Прошу прощения за мой плохой английский
У меня такая же проблема ..
Я решил эту проблему с помощью неактивного порта Tomcat (8080) в Kaspersky Internet Security.
Зайдите в настройки -> дополнительные -> сеть.
Выбрали Выбрать на радио кнопку только выбранный монитор.
неактивный порт 8080.
все хорошо и работает хорошо на победу 10.
Мой код был в порядке, проблема была в том, что я пытался получить доступ к другому серверу по общедоступному ip, поэтому брандмауэр каким-то образом вынимал заголовок запроса.
Решение состояло в том, чтобы изменить публичный ip на тот же сетевой локальный ip, и все начало работать, и java.inc начал читать заголовок запроса, поэтому в каждом месте в Java.inc и JavaProxy.php вы должны установить сетевую файловую систему ip и tomcats. переменные тоже.