Ошибки PHP: как найти причину по тексту
PHP пишет ошибку одной строкой: тип, текст по-английски, файл и номер строки. Найдите слова из своего сообщения в таблице — для каждой ошибки есть страница с исправлением по шагам.
Содержание 7
Найдите свою ошибку
Найдите в левой колонке слова из своего сообщения — они идут после PHP Fatal error:, PHP Warning: или Uncaught Error:.
| Слова в сообщении | Что случилось | Что делать |
|---|---|---|
Maximum execution time of … seconds exceeded | Скрипт работал дольше лимита max_execution_time | Разбор |
Cannot modify header information - headers already sent | Файл что-то вывел раньше, чем PHP отправил заголовки ответа | Разбор |
Call to undefined function | Модуль с этой функцией не поставлен или функцию удалили из PHP | Разбор |
Call to undefined function mysqli_connect() | Не поставлен модуль PHP для MySQL | Разбор |
Failed to open stream: No such file or directory | Файла нет по пути, который указан в коде | Разбор |
Failed to open stream: Permission denied | У PHP нет прав на файл или папку | Разбор |
Undefined variable или Undefined array key | Переменная или ключ массива не заданы | Разбор |
Class "…" not found | Класс не загружен: нет пакета Composer, модуля PHP или файла с классом | Разбор |
File not found. или Primary script unknown | PHP-FPM не нашёл файл по пути, который прислал nginx | Разбор |
server reached pm.max_children setting | Все процессы PHP-FPM заняты, новые запросы ждут | Разбор |
POST Content-Length of … bytes exceeds the limit | Запрос больше лимита post_max_size | Разбор |
Allowed memory size of … bytes exhausted | Скрипту не хватило памяти | Разбор, для WordPress — отдельно |
502 Bad Gateway на страницах .php | nginx не смог передать запрос PHP-FPM | Разбор |
504 Gateway Time-out | PHP не ответил, пока nginx ждал | Разбор |
413 Request Entity Too Large | Запрос больше лимита nginx | Разбор |
500 Internal Server Error или пустая страница | Фатальная ошибка PHP, текст которой записан в журнал | Разбор |
Как читать сообщение
PHP Warning: file_put_contents(/var/www/example.com/cache/data.json): Failed to open stream: Permission denied in /var/www/example.com/save.php on line 21PHP Warning:— тип сообщения. Warning — предупреждение: PHP продолжает выполнять скрипт.PHP Fatal error:— PHP останавливает скрипт, и страница не открывается или обрывается.file_put_contents(…)— функция, на которой случилась ошибка, а в скобках — файл, с которым она работала.Failed to open stream: Permission denied— текст ошибки. Его и ищите в таблице.in /var/www/example.com/save.php on line 21— файл и номер строки, где PHP встретил ошибку.
У ошибок Uncaught Error файл и номер строки записаны через двоеточие: /var/www/example.com/api.php:12. В журнале после этой строки идут строки Stack trace: — цепочка вызовов, которая привела к ошибке. Для поиска причины хватает первой строки.
Где увидеть ошибку
В настройках PHP-FPM из Ubuntu показ ошибок на странице выключен (display_errors Off), а запись в журнал включена. Поэтому при фатальной ошибке посетитель видит пустую страницу или ответ 500, а текст ошибки — в журнале.
Команды вводятся на сервере: подключитесь к нему по SSH (как подключиться) и набирайте их в том же окне.
sudo tail -n 30 /var/log/nginx/error.logПоследние 30 строк журнала ошибок nginx. Ошибки PHP сайта попадают сюда: в такой строке есть слова FastCGI sent in stderr и PHP message:, а за ними — текст ошибки PHP. Если система спросит пароль, введите пароль своего пользователя на сервере. Символы при вводе не видны — наберите пароль и нажмите Enter.
sudo tail -n 30 /var/log/php8.3-fpm.logЖурнал самой службы PHP-FPM: запуск, остановка и предупреждения о процессах, например server reached pm.max_children setting.
Если запустить скрипт командой php в окне SSH, ошибки появятся прямо в этом окне.
Команды — для PHP 8.3 из Ubuntu 24.04. В Ubuntu 26.04 стоит PHP 8.5: в путях и командах вместо 8.3 пишите 8.5. Какая версия у вас, покажет ls /etc/php/.
Где настройки PHP
Настройки PHP для сайта — в файле /etc/php/8.3/fpm/php.ini. Для команды php в окне SSH — отдельный файл /etc/php/8.3/cli/php.ini: правка одного не меняет другой. Открыть файл настроек сайта:
sudo nano /etc/php/8.3/fpm/php.iniПосле правки сохраните файл (Ctrl+O, Enter, затем Ctrl+X) и перезапустите PHP-FPM:
sudo systemctl restart php8.3-fpmЕсли команда ничего не ответила, PHP перезапущен.
Если сайт на WordPress
- There has been a critical error on this website — как найти плагин или тему, из-за которых упал сайт.
- Не хватает памяти — Allowed memory size exhausted в WordPress.
- Нет расширения MySQL — какой модуль PHP поставить.
- Старая версия PHP — WordPress требует PHP новее.
Источники
- Справка PHP: настройки ошибок — display_errors на рабочем сервере выключают, журнал включает log_errors.
- Файл php.ini-production из PHP 8.3.6 — значения для рабочих серверов: display_errors Off, log_errors On, max_execution_time 30, post_max_size 8M, upload_max_filesize 2M.
- Исходный код PHP 8.3.6: main.c — приставки PHP Startup и PHP Request Startup, тексты Failed opening и Failed opening required; при фатальной ошибке и выключенном display_errors PHP отвечает кодом 500.
- Справка PHP: настройки PHP-FPM — pm.max_children — сколько запросов обрабатывается одновременно; request_terminate_timeout.
Сверено 14 октября 2026 года.
Что почитать дальше
- Как установить PHP на UbuntuPHP-FPM, модули и php.ini.
- 502 Bad Gatewayвсе причины и как найти нужную по журналу.
- Права на файлы сайтавладелец и права для папок сайта.
- Как установить Composer на Ubuntuбиблиотеки PHP для сайта.