Подтвердить что ты не робот

Ошибка внутреннего сервера Trigger 500 в PHP и отображение страницы с ошибкой Apache

Как я могу запустить Внутренняя ошибка сервера или 404 Страница не найдена Ошибки Apache в PHP?

Для 500 внутренних ошибок сервера я пробовал следующий код:

header("HTTP/1.0 500 Internal Server Error");

Но это показывает мне пустую страницу. Как я могу показать ошибку в формате по умолчанию Apache?

Пожалуйста, направляйте..

4b9b3361

Ответ 1

После такого всестороннего обсуждения, я думаю, что нет кода php, может отображать по умолчанию 500 Internal Server Error. Решение:
1. Создайте папку с именем http500 рядом с файлом php.
2. Создайте в нем файл .htaccess и добавьте следующий код:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^])(.(*/
    RewriteRule ^])((a-zA
</IfModule>
  • Код перенаправления PHP:

header ('location: http500/');

Ответ 2

Вы можете просто скопировать документы об ошибках Apache в свой корневой каталог (или их символическую привязку) и использовать header(), чтобы установить коды ошибок и с этими документами в качестве вывода. Это, вероятно, лучше всего, если у вас нет веской причины. Но в случае, если это не сработает для вас, есть несколько альтернатив (хотя и хакерских альтернатив).

Для 500 просто поместите ошибку в свой код.

<?php throw new Exception('Nooooooooooooooo!'); ?>

PHP скрипт приведет к возникновению исключения, в результате чего будет создана страница ошибки Apache 500. (Но помните о том, что это приведет только к ошибке Apache, если для параметра PHP init display_errors установлено значение 0. В большинстве конфигураций разработки это не так. В большинстве производственных конфигураций это Если вы не знаете настройки своего производственного сервера, вам нужно просто проверить это, чтобы увидеть, работает ли он.)

В течение 404 я думаю, что лучшее, что вы можете сделать, это перенаправить на несуществующую страницу. Это не совсем то же самое, но может сделать для ваших целей.

<?php header("Location: /i-dont-think-therefore-i-am-not"); ?>

В большинстве браузеров пользователи фактически не видят перенаправление, они просто будут тихо и быстро перенаправляться на несуществующую страницу, что приведет к обычной ошибке Apache 404. Конечно, URL-адрес изменится, и некоторые пользователи могут это заметить. Если это неприемлемо, вы можете достичь аналогичных результатов, используя Apache mod_rewrite, чтобы переписать бэкэнд URL-адреса в несуществующее место.

Чтобы ответить на несколько комментариев: установка кода ответа с помощью header() (или каким-либо другим способом) не приведет к стандартному документу об ошибке Apache. Он просто вернет этот код ответа с вашим собственным выходом. Это преднамеренное поведение, спроектированное таким образом, что вы можете создавать собственные файлы ошибок или иным образом устанавливать коды ответов, поскольку спецификация HTTP задает любой запрос. Если вам нужны документы об ошибках Apache, вам нужно либо подделать их (согласно моему первоначальному предложению просто скопировать документы с ошибкой в ​​ваш корневой каталог), либо вам придется обмануть Apache в их возврате (согласно моему предложению резервного копирования).

Ответ 3

function ISE()
{
  header('HTTP/1.1 500 Internal Server Error', true, 500);
  trigger_error('ISE function called.', E_USER_ERROR);//if you are logging errors?
}

Однако вам понадобится буферизация вывода ON, чтобы иметь возможность использовать функцию php header() после использования любой функции вывода, например echo.

Ответ 4

Я, вероятно, довольно поздно, но это решение должно работать

header("HTTP/1.0 500 Internal Server Error");
include("/path-to-public-html/errors/500.php");
die();

Это вызовет ответ 500 ISE и покажет страницу ошибки 500 по умолчанию, а затем остановит script. Очевидно, вам нужно будет изменить расположение включенного файла

Ответ 5

вы просто не можете запускать страницы ошибок apache из php-кода без перенаправления хакеров, как было предложено ben lee, поскольку перенаправление документов с документами обрабатывается другим уровнем вашего стека приложений (в частности, apache mod_core).
когда ваш script работает, это слишком поздно.

сложность получения страницы с ошибкой путем значительного исключения исключения зависит от настроек php.ini обработки ошибок и многословия.

http_response_code() в настоящее время существует только в php svn, поэтому он недоступен в большинстве производственных средах, которые должны запускать официальную версию.

Мой совет заключается в правильном внедрении настраиваемой ошибки и обработчика исключений через set_error_handler() и set_exception_handler(), соответственно, используйте header(), чтобы отправить клиентскую информацию о состоянии http и (при необходимости) генерировать страницы ошибок.

Ответ 6

По-видимому, существует функция, называемая http_response_code, которая позволит вам правильно установить код ответа. Если это не работает (есть примечание в документации о нем, возможно, только в SVN), то функция header может принимать необязательный аргумент кода ответа:

header("HTTP/1.0 ...", true, 404);

Это должно правильно сигнализировать Apache.

Ответ 7

В PHP 5.5 = > "header (" tester.php ", true, 500);" где tester.php не существует. Он работает и берет меня на мою 500-страничную страницу:)

К сожалению, ни один из других методов, перечисленных здесь, не работал у меня по той или иной причине.

Ответ 8

Я знаю, что это старый поток, однако...

Вы можете отобразить элемент iframe в своем представлении, а затем установить его высоту и ширину на 100% в случае ошибки, которую вы собираетесь обработать.

<?php header("HTTP/1.0 500 Internal Server Error"); http_response_code(500); ?>

<iframe src="page_displaying_apache_screenshot_fullscreen.html"></iframe>

СКАЖИТЕ

Я действительно считаю, что лучшим современным решением для этого было бы что-то вроде:

<?php
header("HTTP/1.0 500 Internal Server Error");
http_response_code(500);
?>
<div class="panel-body">
    <h1>Error!</h1>
     <p>
         <?php

         // Then, in the view if your in dev env, print exception and stack trace
         if ($env === 'dev') 
         {
             throw new Exception('Uh oh! Something broke while adding a new user the db.');
         }
         else 
         {
             echo "Hold your butts, an error has occured.";
             die();
         }
         ?>
     </p>
   </div>

Это приведет к созданию надлежащего кода ошибки для всех пользователей, а также трассировки стека для dev, если вы установите переменную $env в dev на стек dev. Что пользователь видит с этим, используя PHP 5.4, установленный с yum, используя CENTOS7 по умолчанию

Нет переадресации, без взлома, безопасности, если вам не нужно выставлять ошибку, это не будет.:)