Несколько дней назад все mail()
вызовы в моем собственном PHP-приложении вызывают 500 Internal Server Error
, и регистрируется только ошибка Premature end of script headers
. Запуск файла через SSH иногда возвращает segfault
. Странно то, что код не менялся между моментом, когда вызов mail()
работал и перестал работать (изменения отслеживаются в Git).
Несмотря на то, что в код не было внесено никаких изменений, я все же прошел и сделал обычные проверки (.htaccess, php.ini, пользовательский обработчик ошибок и т. Д.), Чтобы быть в безопасности.
Я пытался диагностировать проблему, вырезая код в приложении, пока проблема не была точно определена. Тем не менее, это не сузило его до определенного фрагмента кода, а скорее объема кода, загруженного в PHP (но еще не запущенного) во время вызова mail()
.
В урезанном приложении я смог получить один mail()
вызов на работу, но второй не удастся. Первый звонок был непосредственно перед include
звонком (require
имеет такой же результат). Второй был в самом начале включенного файла (предшествуют только открывающие теги PHP).
Мои первоначальные мысли были о проблеме памяти. Как ни странно, использование памяти, необходимое для того, чтобы вызов mail()
выдавал ошибку, изменяется в зависимости от того, какой код хранится / удаляется из всего приложения. Если это все еще может помочь, использование памяти для текущей коллекции кода перед включением файла:
Использование: 3113696
Макс .: 3352560
Использование памяти после включения файла до сих пор неизвестно.
Я говорил с хозяином об этой проблеме, и они утверждают, что ничего не изменилось, что вызвало бы эту проблему.
Мне не удалось воспроизвести эту проблему в других приложениях.
Используемые технологии
- PHP 5.3.10 (также затронут 5.2.17)
- MySQLi (в частности, пользовательский класс, расширяющий MySQLi)
- Suhosin Patch 0.9.10
Сообщения об ошибках в журнале
- Преждевременный конец заголовка скрипта: XXX, реферер: XXX
* * TL тысяча сорок-девять; DR
Что заставило бы мое PHP-приложение начать вызывать 500 Internal Server Errors
, когда mail()
вызывается после определенной точки в коде (но не после какого-либо конкретного вызова) без какого-либо кода PHP, изменяемого?
Дополнительные примечания
- Не проблема тайм-аута - загрузка занимает менее секунды
- Не проблема с ограничением памяти - используется только ~ 3 МБ при сбое, но у меня ограничение в 99 МБ