Swiftmailer вылетает без ошибки php

У меня есть веб-приложение, которое позволяет пользователю загружать PDF-файл, а затем он отправляет его нам по электронной почте через swiftmailer. С некоторыми PDF-файлами процесс не выполняется.

Я могу убедиться, что он вызывает сбой скрипта php, но не возвращает ошибку php. Сервер выдает ошибку 500, но обычно, если есть ошибка 500, php ведет журнал, в котором указывается, что это была за ошибка.

Я также подтвердил, что он вылетает на строке $mailer->send($message);

Как ни странно, только некоторые PDF-файлы вызывают сбой, и те же самые PDF-файлы отлично работают на сервере разработки с идентичным кодом.

Что могло вызвать сбой php без сообщения об ошибке?


person starshine531    schedule 31.07.2013    source источник
comment
Обязательно включите журналы PHP на сервере.   -  person Rolando Isidoro    schedule 31.07.2013
comment
PHP уже несколько месяцев успешно регистрирует ошибки и предупреждения. Это единственный процесс, который не регистрирует ошибку при сбое. Это не конфигурация php. Это также не часть загрузки, поскольку я убедился, что файлы загружаются правильно.   -  person starshine531    schedule 31.07.2013
comment
Возможно, код swiftmailer отключает ведение журнала во время выполнения.   -  person Rolando Isidoro    schedule 31.07.2013
comment
Нет, он зарегистрировал другие ошибки swiftmailer от других почтовых процессов на том же сайте с почти идентичным кодом (строки from и to были разными).   -  person starshine531    schedule 31.07.2013


Ответы (2)


Проведя несколько тестов, я обнаружил, что в некоторых случаях ведется журнал ошибок, в другое - нет. Я не понял, почему это так, однако я попытался переименовать файл php-errors.log, чтобы php начинался с нового, свежего файла журнала, и теперь ошибки регистрируются правильно. Не знаю, почему это сработало, но я возьму.

person starshine531    schedule 31.07.2013

К вашему сведению, я столкнулся с двумя вещами, которые могут вызвать сбой PHP без сообщения об ошибке:

  1. Таймауты сценария - Тайм-аут может помешать возврату сообщения об ошибке; в моем конкретном случае сценарий ожидал ответа SMTP, когда истекло время ожидания, что могло быть причиной того, что я не получил сообщение о тайм-ауте. Попробуйте изменить значение max_execution_time в php.ini на 300 (5 минут) и посмотрите, сможете ли вы получить фактическое сообщение об ошибке.
  2. Разрешения для папки - я столкнулся со случаем, когда недостаточные права доступа к папке приводили к остановке сценария без сообщения об ошибке.

В случае 2 я заключил предложение _3 _ / _ 4_ вокруг строки, вызывающей остановку, и, наконец, получил исключение, которое объясняет проблему с разрешениями. Возможно, это стоит попробовать в качестве общей реакции на тихие сбои.

person dspitzle    schedule 03.06.2015