Php ini ошибка 500

This article describes ways to minimize the occurrence of «500 Internal Server Error» messages.

Table of Contents

  • Problem
  • Resolution
    • Set correct permissions
    • Check .htaccess directives

Problem

Visitors to your web site receive “500 Internal Server Error” messages when they access a page that uses PHP.

Resolution

Almost all of our servers run PHP as a CGI binary. One of the side effects of running PHP as a CGI binary is that internal server errors can occur if the permissions on files and directories are set incorrectly. Internal server errors can also occur if there are certain PHP directives defined in an .htaccess file.

If your web site is experiencing internal server errors, the first thing you should do is check the server logs. The server logs provide valuable information about which files are causing the errors, and potential causes. If you have a shared hosting account, you can view your web site’s error logs in cPanel. If you have a VPS or dedicated server, you can view your web site’s log files directly at the following paths:

  • /usr/local/apache/logs/error_log
  • /usr/local/apache/logs/suphp_log
Set correct permissions

If permission settings are causing internal server errors, you may see entries in the server logs similar to any of the following lines:

SoftException in Application.cpp:357: UID of script "/home/username/public_html/.htaccess" is smaller than min_uid

SoftException in Application.cpp:146: Mismatch between target UID (511) and UID (510) of file "/home/username/public_html/index.php"

SoftException in Application.cpp:256: File "/home/username/public_html/index.php" is writeable by others

These errors are all caused by permission issues. The first two lines indicate that the file’s owner or group is set incorrectly. For example, if the owner of a PHP file is the nobody or root account instead of your user account, visitors receive an internal server error when they try to view the page. If you have a shared hosting account, our Guru Crew can change the owners and groups for your files. If you need further assistance, please open a support ticket with our Guru Crew on the Customer Portal at https://my.a2hosting.com.

The third line indicates that file permissions for the index.php file are too permissive. For example, if your web site has a directory or file whose permissions are set to 777 (full permissions), anyone can read, write, or execute it. Additionally, visitors receive an internal server error when they try to view the page. To resolve this problem, change the permissions to 755 for directories and 644 for files. For example, to set the correct permissions for all directories and files in the public_html directory, type the following commands:

cd public_html
find . -type d -exec chmod 755 {} ;
find . -type f -exec chmod 644 {} ;

Do not change permissions on the public_html directory itself! Doing so may make your web site inaccessible.

Check .htaccess directives

Servers that run PHP as a CGI binary cannot use the php_flag or php_value directives in an .htaccess file. If directives in an .htaccess file are causing internal server errors, you will see entries in the server logs similar to the following line:

/home/username/public_html/.htaccess: Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration

To resolve this problem, you must place any PHP directives into a custom php.ini file on your account, and remove or comment out any PHP directives in the .htaccess file. For information about how to set up a custom php.ini file, please see this article.

I have internal server errors on my POST requests. How can I debug them ? Is it something to set up in php.ini ? THe file is really big and the word ‘error’ is met there many-many times.

asked Mar 4, 2014 at 11:37

myadmins's user avatar

4

You can turn on your PHP errors with error_reporting:

error_reporting(E_ALL);
ini_set('display_errors', 'on');

Edit: It’s possible that even after putting this, errors still don’t show up. This can be caused if there is a fatal error in the script. From PHP Runtime Configuration:

Although display_errors may be set at runtime (with ini_set()), it won’t have any affect if the script has fatal errors. This is because the desired runtime action does not get executed.

You should set display_errors = 1 in your php.ini file and restart the server.

Devon's user avatar

Devon

34.2k9 gold badges66 silver badges94 bronze badges

answered Mar 4, 2014 at 11:40

Philippe Signoret's user avatar

9

Try writing all the errors to a file.

error_reporting(-1); // reports all errors
ini_set("display_errors", "1"); // shows all errors
ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");

Something like that.

answered Mar 4, 2014 at 11:39

James Elliott's user avatar

2

При разработке веб-сайтов и веб-приложений можно столкнуться с ошибкой 500 internal server error. Сначала она может испугать и ввести в заблуждение, поскольку обычно веб-сервер выдает более конкретные ошибки, в которых указана точная причина проблемы, например, превышено время ожидания, неверный запрос или файл не найден, а тут просто сказано что, обнаружена внутренняя ошибка.

Но не все так страшно и в большинстве случаев проблема вполне решаема и очень быстро. В этой статье мы разберем как исправить ошибку Internal server error в Nginx.

Дословно Internal server error означает внутренняя ошибка сервера. И вызвать её могут несколько проблем. Вот основные из них:

  • Ошибки в скрипте на PHP — одна из самых частых причин;
  • Превышено время выполнения PHP скрипта или лимит памяти;
  • Неправильные права на файлы сайта;
  • Неверная конфигурация Nginx.

А теперь рассмотрим каждую из причин более подробно и разберем варианты решения.

1. Ошибка в скрипте PHP

Мы привыкли к тому, что если в PHP скрипте есть ошибки, то сразу же видим их в браузере. Однако на производственных серверах отображение сообщений об ошибках в PHP отключено, чтобы предотвратить распространение информации о конфигурации сервера для посторонних. Nginx не может отобразить реальную причину ошибки, потому что не знает что за ошибка произошла, а поэтому выдает универсальное сообщение 500 internal server error.

Чтобы исправить эту ошибку, нужно сначала понять где именно проблема. Вы можете включить отображение ошибок в конфигурационном файле php изменив значение строки display_errors с off на on. Рассмотрим на примере Ubuntu и PHP 7.2:

vi /etc/php/7.2/php.ini

display_errors = On

Перезапустите php-fpm:

sudo systemctl restart php-fpm

Затем обновите страницу и вы увидите сообщение об ошибке, из-за которого возникла проблема. Далее его можно исправить и отключить отображение ошибок, тогда все будет работать. Ещё можно посмотреть сообщения об ошибках PHP в логе ошибок Nginx. Обычно он находится по пути /var/log/nginx/error.log, но для виртуальных доменов может настраиваться отдельно. Например, смотрим последние 100 строк в логе:

tail -n 100 -f /var/log/nginx/error.log

Теперь аналогично, исправьте ошибку и страница будет загружаться нормально, без ошибки 500.

2. Превышено время выполнения или лимит памяти

Это продолжение предыдущего пункта, так тоже относится к ошибкам PHP, но так, как проблема встречается довольно часто я решил вынести её в отдельный пункт. В файле php.ini установлены ограничения на время выполнения скрипта и количество оперативной памяти, которую он может потребить. Если скрипт потребляет больше, интерпретатор PHP его убивает и возвращает сообщение об ошибке.

Также подобная ошибка может возникать, если на сервере закончилась свободная оперативная память.

Если же отображение ошибок отключено, мы получаем error 500. Обратите внимание, что если время ожидания было ограничено в конфигурационном файле Nginx, то вы получите ошибку 504, а не HTTP ERROR 500, так что проблема именно в php.ini.

Чтобы решить проблему увеличьте значения параметров max_execution_time и memory_limit в php.ini:

sudo vi /etc/php/7.2/php.ini

max_execution_time 300
memory_limit 512M

Также проблема может быть вызвана превышением других лимитов установленных для скрипта php. Смотрите ошибки php, как описано в первом пункте. После внесения изменений в файл перезапустите php-fpm:

sudo systemctl restart php-fpm

3. Неверные права на файлы

Такая ошибка может возникать, если права на файлы, к которым обращается Nginx установлены на правильно. Сервисы Nginx и php-fpm должны быть запущены от имени одного и того же пользователя, а все файлы сайтов должны принадлежать этому же пользователю. Посмотреть от имени какого пользователя запущен Nginx можно командой:

nginx -T | grep user

Чтобы узнать от какого пользователя запущен php-fpm посмотрите содержимое конфигурационного файла используемого пула, например www.conf:

sudo vi /etc/php-fpm.d/www.conf

В моем случае это пользователь nginx. Теперь надо убедится, что файлы сайта, к которым вы пытаетесь обратиться принадлежат именно этому пользователю. Для этого используйте команду namei:

namei -l /var/www/site

Файлы сайта должны принадлежать пользователю, от имени которого запущены сервисы, а по пути к каталогу с файлами должен быть доступ на чтение для всех пользователей. Если файлы принадлежат не тому пользователю, то вы можете все очень просто исправить:

sudo chown nginx:nginx -R /var/www/site

Этой командой мы меняем владельца и группу всех файлов в папке на nginx:nginx. Добавить права на чтение для всех пользователей для каталога можно командой chmod. Например:

sudo chmod o+r /var/www/

Далее все должно работать. Также, проблемы с правами может вызывать SELinux. Настройте его правильно или отключите:

setenforce 0

Выводы

В этой статье мы разобрали что делать если на вашем сайте встретилась ошибка 500 internal server error nginx. Как видите проблема вполне решаема и в большинстве случаев вам помогут действия описанные в статье. А если не помогут, напишите свое решение в комментариях!

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Creative Commons License

Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна .

В php.ini включил display_errors и display_startup_errors, не помогло.

задан 8 июн 2012 в 8:31

ikirab1's user avatar

4

пробовали в начале скрипта прописать

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
?>

ответ дан 25 июн 2015 в 3:32

des1roer's user avatar

des1roerdes1roer

2,6665 золотых знаков29 серебряных знаков68 бронзовых знаков

Отчего возникает ошибка 500 (Internal Server Error)?

Наиболее частой причиной ошибки 500 (Internal Server Error, внутренняя ошибка сервера) является неверный синтаксис файла .htaccess или наличие в нем неподдерживаемых директив. Чаще всего достаточно закомментировать директиву Options (для этого нужно поставить в начале строки решетку — #), и проблема исчезнет.

Ошибка 500 также может возникать вследствие неправильного обращения с CGI-скриптами:

CGI-скрипты должны иметь окончания строк в формате UNIX (n), а не в формате Windows (rn). Для этого их надо загружать на сервер по FTP в режиме ASCII.

CGI-скрипты и папки, в которых они находятся, должны быть доступны для записи только владельцу, то есть иметь права 0755 (drwxr-xr-x).

В результате работы CGI-скрипта сформированны неправильные HTTP-заголовки ответа. В этом случае для решения проблемы полезно обратиться к error_log (его можно найти в контрольной панели в разделе « Статистика / Лог-файлы / Лог ошибок»).

ответ дан 8 июн 2012 в 11:38

Eugene 1's user avatar

Eugene 1Eugene 1

2921 серебряный знак4 бронзовых знака

1

А что говорит error.log веб сервера. Один из вариантов, скрипт не выполняется из-за не правильно выставленных прав доступа.

ответ дан 8 июн 2012 в 11:35

gurzufnet's user avatar

gurzufnetgurzufnet

1,1346 серебряных знаков7 бронзовых знаков

1

Недавно ко мне обратились из компании, занимающейся созданием сайтов, за консультацией. Были жалобы на нестабильную работу сайта. Нестабильность заключалась в том, что при сохранении публикации сайт вешался. Решение проблемы, когда возникает ошибка 500, я напишу далее. Я представлю как универсальные методы решения проблемы, которые помогут владельцам сайтов с любыми системами управления, так и направленные на решение проблемы пользователей WordPress.

Почему возникает ошибка 500(Internal Server Error)?

  • Проблема в файле .htaccess;
  • Некорректная работа с CGI скриптами;
  • Нехватка памяти;
  • Нехватка времени выполнения скрипта;
  • Некорректная работа плагинов;
  • Повреждение файлов.

Решение проблемы с файлом .htaccess:

Самой распространенной проблемой возникновения ошибки 500(Внутренняя ошибка сервера) является наличие в файле .htaccess команд, которые не поддерживаются сервером, либо просто неверный синтаксис команд.

Решение проблемы некорректной работа с CGI скриптами:

  • Скрипты формируют неверные заголовки и необходимо смотреть логи, которые доступны из панели управления хостингом в разделе «Статистика»;
  • Скрипты необходимо загружать на сервер по FTP  в режиме ASCII, чтобы окончания строк в скриптах были в формате UNIX — n, а не в формате Windows — nr;
  • Скрипты и папки должны быть доступны для записи только владельцу, то есть необходимо выставить права — 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, то скачайте архив, распакуйте его и перебросьте файлы на сервер, либо залейте на сервер архив и распакуйте его там с заменой файлов. Вероятно какой-то из файлов системы мог быть поврежден.

Если после этой процедуры все заработает, то стоит задуматься о том, каким образом файл системы мог быть поврежден.

Что делать, если ничего не помогло?

Если ничего из вышеперечисленного не помогло, это значит, что вам все же придется либо самому, либо с помощью техподдержки хостинга анализировать логи и искать проблему более тщательно. Либо можно обратиться за помощью к профессионалам.

Post Views: 1 539

Понравилась статья? Поделить с друзьями:

Не пропустите эти материалы по теме:

  • Яндекс еда ошибка привязки карты
  • Php ini set ошибки
  • Phone destroyer south park ошибка 200
  • Phoenix ошибка запуска модуля
  • Phoenix ошибка загрузки модуля

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии