Недавно ко мне обратились из компании, занимающейся созданием сайтов, за консультацией. Были жалобы на нестабильную работу сайта. Нестабильность заключалась в том, что при сохранении публикации сайт вешался. Решение проблемы, когда возникает ошибка 500, я напишу далее. Я представлю как универсальные методы решения проблемы, которые помогут владельцам сайтов с любыми системами управления, так и направленные на решение проблемы пользователей WordPress.
Почему возникает ошибка 500(Internal Server Error)?
- Проблема в файле .htaccess;
- Некорректная работа с CGI скриптами;
- Нехватка памяти;
- Нехватка времени выполнения скрипта;
- Некорректная работа плагинов;
- Повреждение файлов.
Решение проблемы с файлом .htaccess:
Самой распространенной проблемой возникновения ошибки 500(Внутренняя ошибка сервера) является наличие в файле .htaccess команд, которые не поддерживаются сервером, либо просто неверный синтаксис команд.
Решение проблемы некорректной работа с CGI скриптами:
- Скрипты формируют неверные заголовки и необходимо смотреть логи, которые доступны из панели управления хостингом в разделе «Статистика»;
- Скрипты необходимо загружать на сервер по FTP в режиме ASCII, чтобы окончания строк в скриптах были в формате UNIX — \n, а не в формате Windows — \n\r;
- Скрипты и папки должны быть доступны для записи только владельцу, то есть необходимо выставить права — 0755 (drwxr-xr-x).
Решение проблемы нехватки памяти:
Иногда проблема может возникать, если вы превышаете лимит выделенной памяти(PHP memory limit).
Если у вас возникает ошибка 500 при переходе в админку, при загрузке изображения или при публикации записи, то скорее всего вам поможет увеличение лимита памяти доступной PHP. Это можно сделать отредактировав существующий файл php.ini(посмотреть где он находится можно с помощью функции phpinfo(), строка — Loaded Configuration File), либо создав свой файл в корне сайта(для пользователей WordPress в wp-admin).
В php.ini необходимо написать / исправить строку: ;
memory = 64MB
Владельцы WordPress могут поступить более удобным для них образом — открыть файл wp-config.php, который лежит в корне сайта, и добавить туда следующую строку:
define('WP_MEMORY_LIMIT', '64M');
В действительности, решение проблемы таким образом скорее всего временное, так как какой-то процесс забивает память и в будущем это может произойти снова. Поэтому я рекомендую провести анализа логов, чтобы понять, из-за чего именно возникает ошибка 500.
Решение проблемы нехватки времени выполнения скрипта:
Так же, как в случае с памятью, у вас может возникнуть ситуация, когда скрипт просто не успел отработать за то время, которое ему для этого отводится. По умолчанию время выполнения скрипта ограничивается 30-ю секундами. Способы увеличения лимита далее.
Аналогично предыдущему методу работаем с php.ini:
max_execution_time = 60
Использование функции PHP — можно написать следующий код вначале какого-либо PHP файла, который запускается при возникновении проблемы(например в index.php):
ini_set( 'max_execution_time', 60 ); // 60 секунд
Работа с .htaccess:
php_value max_execution_time 60
Пользователи WordPress могут использовать плагин — WP Maximum Execution Time Exceeded.
Решение проблемы с помощью отключения плагинов:
Бывает так, что ошибка 500 возникает из-за того, что в самом плагине / модуле существует какая-либо ошибка, чаще логическая, которая приводит к негативным последствиям. Выявить «испорченный» плагин можно таким способом:
- Отключите все плагины;
- Включите первый плагин, который до этого работал вместе со всеми;
- Производите действия, которые ранее приводили к ошибке;
- Если ошибка не возникает, отключайте этот плагин и включайте следующий и т.д. пока не выявите «брак».
Если вы пользователь WordpPress и не можете зайти в админку, так как возникает ошибка 500, зайдите на сервер по FTP и переименуйте папку wp-content/plugins, в этом случае плагины автоматически отключатся, когда вы в следующий раз обратитесь к админке и если проблема была в каком-то из них, то вы войдете в админку. Далее надо будет обратно переименовать папку plugins и работать по вышеуказанной схеме.
Решение проблемы с повреждением файлов:
Если ни один из перечисленных способов до сих пор не помог решить проблему, попробуйте перезалить дистрибутив системы. Если речь идет о WordPress, то скачайте архив, распакуйте его и перебросьте файлы на сервер, либо залейте на сервер архив и распакуйте его там с заменой файлов. Вероятно какой-то из файлов системы мог быть поврежден.
Если после этой процедуры все заработает, то стоит задуматься о том, каким образом файл системы мог быть поврежден.
Что делать, если ничего не помогло?
Если ничего из вышеперечисленного не помогло, это значит, что вам все же придется либо самому, либо с помощью техподдержки хостинга анализировать логи и искать проблему более тщательно. Либо можно обратиться за помощью к профессионалам.