У меня странный вопрос с подключением PHP-приложения к службе SOAP 1.2 + WSDL:
Предыдущие сведения: Apache server 2.4 с модулем php5-fcgi. Я работаю над клиентом для службы SOAP, и я могу сделать запрос на услугу.
Задание прошло некоторое время. Мне нужно было сделать set_time_limit (60), потому что, если у меня его нет, скрипт возвращает ошибку тайм-аута простоя:
FastCGI: сообщение с сервером «/ usr / lib / cgi-bin / php5-fcgi» отменено: тайм-аут простоя (30 секунд)
С set_time_limit у меня другая ошибка:
AH00524: обработчик для fastcgi-скрипта возвращает неверный код результата 1
Эта ошибка появляется, когда я пытаюсь выполнить запрос SOAP. Без него страница работает нормально.
С этой ошибкой в журнале у меня есть другая ошибка в навигаторе. В IE страница не загружается, Firefox показывает страницу «Ошибка кодирования содержимого».
Эта ошибка появляется, если я попытаюсь показать на экране результат соединения SOAP (с var_dump), а также, если я попытаюсь выполнить запрос, но не отправит его на экран.
Пытаясь найти «Ошибка кодирования содержимого», я нашел что-то о сжатии. Я пытался сделать «ob_start» до и после set_time_limit, но, когда я пытаюсь это сделать, я получаю ошибку таймаута в журнале (я думаю, что PHP не делает изменение таймаута), а также на странице показывает ошибка внутреннего сервера 500.
В чем проблема? Единственный вариант, который, по моему мнению, может быть причиной этой проблемы, – это некоторый тайм-аут между модулем Apache и php5-fcgi, но я не знаю, как это изменить для проверки другого параметра.
РЕДАКТИРОВАТЬ:
У меня два сервера на одном компьютере: Apache2 (2.4.10) + php5-fcgi (5.6.2) (порт HTTP 80, порт 443 HTTPS) и Nginx (1.6.2) + php5-fcgi (HTTP-порт 8080) ,
Те же страницы, протестированные с Apache2, не работают (ошибка описана сверху), по HTTP и HTTPS. Затем я пытаюсь войти с Nginx (тот же webroot, теоретически такой же php5-fcgi config), а затем, работая правильно.
Благодаря,
Большая часть времени ожидания тайм-аута при использовании fastCGI вызвана запросом CGI дольше, чем время, заданное параметром idle-timeout. Если не настроено, значение по умолчанию составляет 30 секунд.
Из документации mod_fastcgi :
-idle-timeout n (30 секунд) Число секунд бездействия приложения FastCGI, разрешенное до того, как запрос будет прерван, и событие заносится в журнал (при ошибке LogLevel). Таймер бездействия применяется только до тех пор, пока соединение выполняется с приложением FastCGI. Если запрос поставлен в очередь для приложения, но приложение не отвечает (путем написания и промывки) в течение этого периода, запрос будет прерван. Если связь завершена с приложением, но неполная с клиентом (ответ буферизирован), таймаут не применяется.
В файлах журналов вы можете увидеть что-то вроде этого:
[fastcgi:error] FastCGI: comm with server "/var/www/bin/php-fastcgi" aborted: idle timeout (30 sec), referer: http://example.org/script.php
И в веб-браузере yoy получите сообщение «Ошибка кодирования контента».
Чтобы избежать этой ошибки, можно увеличить тайм-аут простоя в конфигурации FastCGI.
FastCgiConfig -idle-timeout 900
Таким образом, увеличивая время ожидания простоя, вам больше не нужно использовать set_time_limit.