PHP 不显示错误 - 内部服务器错误 (500) [重复]

PHP not displaying errors - Internal Server Error (500) [duplicate]

提问人:iainjames88 提问时间:8/1/2012 最后编辑:iainjames88 更新时间:2/28/2023 访问量:47773

问:

我已经使用 *Apache2/MySQL/PHP5 在 Amazon AWS 上设置了 Ubuntu Server 12.04 LTS 的全新安装。当我运行PHP脚本并遇到错误时,我没有看到PHP的任何错误报告,我看到的只是

HTTP Error 500 (Internal Server Error): An unexpected condition was encountered while the server was attempting to fulfil the request.

我已经检查了我的文件,据我所知,应该设置错误报告。该文件的内容(关于错误)是:/etc/php5/apache2/php.ini

;    display_errors
;      Default Value: On
;      Development Value: On
;      Production Value: Off

;    display_startup_errors
;      Default Value: Off
;      Development Value: On
;      Production Value: Off

;    error_reporting
;      Default Value: E_ALL & ~E_NOTICE
;      Development Value: E_ALL | E_STRICT
;      Production Value: E_ALL & ~E_DEPRECATED

谁能建议?如果我尝试类似的东西,它不会告诉我它会给我一个服务器 500 错误。$obj = new ObjectDoesntExist;Fatal error: Class 'ObjectDoesntExist'

有什么建议吗?

* 我安装的模块是: .除此之外,它是 Ubuntu Server 12.04 LTS 的完全基础安装mysql-server mysql-client apache2 php5 libapache2-mod-php5 phpmyadmin

编辑: 如果我在脚本开始时使用,它会像往常一样显示错误,但是我如何在整个站点范围内启用此站点?ini_set('display_errors', '1');

php ubuntu-12.04 报告 内部服务器错误

评论

0赞 favoretti 8/1/2012
如果你的apache服务器,你看到error_log有什么东西吗?听起来mode_php就是行不通。只包含输出的 php 文件会给出输出吗?<? phpinfo(); ?>
0赞 Kalpesh 8/1/2012
你检查过apache错误日志吗?/var/log/apache2/error.log
2赞 Steve Robbins 8/1/2012
php.ini中的所有这些行都会被注释掉。找到声明的位置并将其打开。display_errors
0赞 iainjames88 8/1/2012
<?phpinfo(); ?>按预期提供输出。Apache错误日志显示了我所期望的PHP错误(意外T_STRING/打开所需文件失败)以及我识别的其他内容(Apache重新启动)。
0赞 iainjames88 8/1/2012
@stevether我发现并更改了他们的值,但仍然存在相同的问题?我是否必须取消注释它们上面的行,这些行的读法与我最初发布的注释行相同?display_errorsdisplay_startup_errorsOffOn

答:

14赞 Wouter 8/1/2012 #1

粘贴的php.ini代码段每行都有一个分号(;字符)。分号是php.ini注释的开头,因此不使用分号后面的一行中的所有内容。尝试手动将display_errors设置为“打开”,将“error_reporting”设置为“E_ALL”,或删除相应的分号来解决此问题。

此外,检查您的apache的错误日志,php可能会在那里记录其错误。

评论

0赞 iainjames88 8/1/2012
我已经从我上面发布并设置的片段中取消了注释,以及我在文件中找到它们的位置,但仍然有同样的问题?;display_errors = Ondisplay_startup_errors = Onphp.ini
1赞 Wouter 8/1/2012
在php.ini中进行更改后,您是否重新启动了 apache?apache的错误日志中有什么错误吗?
2赞 iainjames88 8/1/2012
在等待您的回复时重新启动了apache,这就解决了。为最初不这样做而感到有点傻!感谢您的帮助:)
0赞 mandza 10/23/2013 #2

我有同样的问题,但与php.ini无关 如果遇到相同的错误,在开始在服务器上截图之前,请先检查代码。 错误可能是缺失的 } ) 或 ;或类似的东西。 这只是参考首先要做什么。

3赞 user2779489 12/13/2013 #3

请使用 sudo gedit /etc/php5/apache2/php.ini 和 Production Value 编辑php.ini文件,或者您也可以使用 ini_set('display_errors', '1');在 PHP 文件顶部

0赞 warfish 2/28/2023 #4
// Disable displaying errors, enable logging
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', '/var/log/php_error.log');

// Handle errors and exceptions
set_error_handler(function($errno, $errstr, $errfile, $errline) {
    error_log(sprintf("[%s] %s in %s on line %d", date('Y-m-d H:i:s'), $errstr, $errfile, $errline));
    http_response_code(500);
    exit();
});

set_exception_handler(function($exception) {
    error_log(sprintf("[%s] Uncaught exception '%s' with message '%s' in %s:%d\nStack trace:\n%s\n", 
        date('Y-m-d H:i:s'), 
        get_class($exception), 
        $exception->getMessage(), 
        $exception->getFile(), 
        $exception->getLine(), 
        $exception->getTraceAsString()
    ));
    http_response_code(500);
    exit();
});
  • set_error_handler处理 PHP 错误,set_exception_handler处理异常。发生错误或异常时,使用 error_log 函数将消息记录到错误日志文件中,并将响应代码设置为 500 以指示服务器错误。最后,尝试使用未定义的变量会触发示例错误。