在PHP中触发500内部服务器错误,并显示Apache错误页面

我如何触发500内部服务器错误404页面在PHP中找不到 Apache的错误?

对于500内部服务器错误我已经试过下面的代码:

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

但它显示了我一个空白页面。 我怎样才能显示在Apache的默认格式的错误?

请指导..

您可以将Apache错误文档复制到您的Web根目录(或将其中的符号链接),并使用header()设置错误代码,并将这些文档作为输出。 这可能是最好的,除非你有一个令人信服的理由不要。 但是,如果这不适合你,有一些替代品(尽管,哈克替代品)。

对于500,只需要在你的代码中添加一个bug。

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

PHP脚本会引发异常,导致常规的Apache 500错误页面。 (但要注意,如果PHP初始化设置display_errors设置为0 ,这将只会导致Apache错误,在大多数开发配置中,情况并非如此,在大多数生产配置中,情况如此。不知道你的生产服务器的设置,你只能测试一下,看它是否工作。)

对于404,我认为你可以做的最好的是重定向到一个不存在的页面。 这不完全一样的东西,但可能会为你的目的。

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

在大多数浏览器中,用户实际上不会看到重定向,他们只会默默无闻地快速重定向到一个不存在的页面,导致常规的Apache 404错误。 当然,网址会改变,一些用户可能会注意到。 如果这是不可接受的,也许可以使用Apache mod_rewrite将url后端重写为不存在的位置来实现类似的结果。

要回应几个意见:通过header() (或其他方式)设置响应代码不会导致标准的Apache错误文档。 它将简单地用你自己的输出返回这个响应代码。 这是有意的行为,旨在使您可以拥有自定义的错误文档,或者根据HTTP规范的要求设置响应代码。 如果你想要Apache的错误文档,你必须伪造它们(按照我最初的建议,简单地将错误文档复制到你的web根目录),否则你将不得不诱使Apache返回它们(根据我的备份建议) 。

经过这样的知识充分的讨论,我认为没有PHP代码可以显示默认500内部服务器错误。 解决方案是:
1.在php文件旁边创建一个名为http500的文件夹。
2.在其中创建一个.htaccess文件并添加以下代码:

 <Ifmodulee mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^])(.(*/ RewriteRule ^])((a-zA </Ifmodulee> 
  1. PHP重定向代码:

标题('location:http500 /');

 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? } 

但是,在使用echo等输出函数后,需要输出缓冲ON才能使用php header()函数。

我可能相当晚,但这个解决方案应该工作

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

这将触发500 ISE响应,并显示默认的500错误页面,然后停止脚本。 显然你需要修改包含文件的位置

你根本不能触发apache错误页面从php代码没有hackery重定向由ben lee提出,因为错误文档重定向是由你的应用程序的堆栈(特别是,apache的mod_core )的另一层处理。
当你的脚本运行时,已经太晚了。

通过抛出一个异常来获取错误页面的技巧很大程度上取决于你的php.ini关于错误处理和冗长的设置。

http_response_code()目前只存在于PHP的svn中,因此它在大多数生产环境中都不可用,它们应该运行正式版本。

我的建议是通过set_error_handler()set_exception_handler()分别正确地实现自定义的错误和异常处理程序,使用header()发送客户端正确的http状态信息和(如果需要)生成错误页面。

显然有一个叫做http_response_code的函数,可以让你适当地设置响应代码。 如果这不起作用(在文档中有关于它可能只在SVN中的说明),那么header函数可以采用一个可选的响应代码参数:

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

这应该正确地向Apache发信号。

在PHP 5.5 =>“header(”tester.php“,true,500);” tester.php不存在。 它的工作,带我到我的500页:)

不幸的是,这里列出的其他方法都没有为我的原因或其他。

我知道这是一个古老的线程,但是…

您可以将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> 

这将导致所有用户都有一个合适的错误代码,如果你在开发堆栈上设置$ env变量为'dev',那么这个错误代码也是dev的堆栈跟踪。 用户看到这个,默认情况下使用安装了yum的PHP 5.4使用CENTOS7

没有重定向,没有hackery,安全,除非你需要暴露它不会的错误。 🙂