Неожиданное восстановление соединения: проблема с PHP или Apache?

У меня есть PHP-скрипт, который постоянно останавливается в одном и том же месте, и мой браузер сообщает:

Соединение с сервером было сброшено во время загрузки страницы.

Я тестировал это на Firefox и IE, то же самое происходит. Итак, я предполагаю, что это проблема с конфигурацией Apache / PHP. Вот несколько вещей, которые я установил.

php.ini

max_execution_time = 300000 max_input_time = 300000 memory_limit = 256M 

Apache (httpd.conf)

 Timeout 300000 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 0 

Правильны ли вы выше? Что может быть причиной этого и что я могу установить?

Я запускаю PHP (5.2.12.12) в качестве модуля Apache (2.2) на Windows Server 2003.

Вероятно, это проблема Apache или PHP, так как все браузеры делают то же самое. Я думаю, что сценарий работает ровно 10 минут (600 секунд).

У меня была аналогичная проблема – получается, что apache2 был segfault. Причиной segfault был php5-xdebug для 5.3.2-1ubuntu4.14 на Ubuntu 10.04 LTS. Исправлена ​​проблема с xdebug.

У меня также была эта проблема сегодня, она оказалась неудачной. в PHP-коде (вне любого коммутатора или любого цикла), в функции с try...catch...finally block.

Похоже, что сбой в PHP:

 <?php function a () { break; try { } catch (Exception $e) { } finally { } } 

Это было с версией PHP 5.5.5.

Различия между 2 конфигурациями PHP действительно были основной причиной проблемы на моем конце. Мое приложение основано на библиотеке NuSOAP.

В конфигурации 1 с PHP 5.2 он работал нормально, поскольку расширение SOAP PHP было отключено.

В конфигурации 2 с PHP 5.3 он выдавал ошибки «Сброс соединения», поскольку расширение SOAP PHP было включено.

Переключение расширения позволило разрешить моему приложению работать на PHP 5.3 без необходимости переписывать все.

У меня была проблема, когда в некоторых случаях PHP 5.4 + eAccelerator = сброс соединения. В файлах журналов не было ошибок, и это происходило только на определенных URL-адресах, что затрудняло диагностику. Оказывается, это произошло только для определенного PHP-кода / некоторых файлов PHP и вызвано некоторыми несовместимостями с определенным PHP-кодом и eAccelerator. Самое простое решение – отключить eAccelerator для этого конкретного сайта, добавив следующее в файл .htaccess

php_flag eaccelerator.enable 0

php_flag eaccelerator.optimizer 0

(или эквивалентные строки в php.ini):

eaccelerator.enable = "0"

eaccelerator.optimizer = "0"

Я знаю, это старая должность, но поскольку я не мог найти решение проблемы, и я исправил ее, я поделюсь своим опытом. Основной причиной моей проблемы был вызов функции file_exists () .
Файл действительно существовал, но по какой-то причине добавочная косая черта в местоположении файла («//»), которая обычно работает в обычном браузере, кажется, не работает на PHP. Возможно, ваша проблема связана с чем-то подобным. Надеюсь, это поможет кому-то!

Я попробую установить все параметры отчетов об ошибках

-b при ошибке прерывания
-V уровень серьезности
-m error_level

и отправка всего результата клиенту

 <?php echo "<div>starting sql batch</div>\n<pre>"; flush(); passthru('sqlcmd -b -m -1 -V 11 -l 3 -E -S TYHSY-01 -d newtest201 -i "E:\PHP_N\M_Create_Log_SP.sql"'); echo '</pre>done.'; flush(); 

Мой PHP был без сбоев без какой-либо дополнительной информации относительно причины этого. Оказалось, что это два класса, вызывающие магический метод __call () друг друга, потому что у обоих из них не был вызванный метод. PHP просто зацикливается до тех пор, пока он не выйдет из памяти. Но он не сообщил о обычном «Разрешенном объеме памяти * байта исчерпал» сообщение, возможно, потому что методы являются «волшебными».