У меня есть 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 просто зацикливается до тех пор, пока он не выйдет из памяти. Но он не сообщил о обычном «Разрешенном объеме памяти * байта исчерпал» сообщение, возможно, потому что методы являются «волшебными».