没有ini_set()的错误日志和显示设置?

时间:2014-01-20 18:03:36

标签: php

我正在尝试让错误记录工作,以便错误不会在我的实时网站上显示给我以外的人(通过我的IP地址识别),但它不起作用,因为显然ini_set()被禁用我的服务器由于“安全原因”。这是我试图使用的代码:

error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', '/path/to/php-error.log');

我不想硬编码禁用显示错误的选项,因为我在我的PHP页面中检查是否是我的IP地址访问网站,如果是这样仍然显示错误。

有没有办法记录错误,动态更改它们是否显示在页面上,而不使用ini_set()

1 个答案:

答案 0 :(得分:2)

您应该看看PHP的内置自定义错误处理函数,您可以将验证构建到其中。这将使用自定义函数替换PHP的错误处理程序。

function myErrorHandler($errno, $errstr, $errfile, $errline)
{
    $ip = $_SERVER['REMOTE_ADDR'];
    if ( $ip != '127.0.0.1' ) return true; // Leave if not your IP

    switch ($errno) {
    case E_USER_ERROR:
        echo "<b>My ERROR</b> [$errno] $errstr<br />\n";
        echo "  Fatal error on line $errline in file $errfile";
        echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ")<br />\n";
        echo "Aborting...<br />\n";
        exit(1);
        break;

    case E_USER_WARNING:
        echo "<b>My WARNING</b> [$errno] $errstr<br />\n";
        break;

    case E_USER_NOTICE:
        echo "<b>My NOTICE</b> [$errno] $errstr<br />\n";
        break;

    default:
        echo "Unknown error type: [$errno] $errstr<br />\n";
        break;
    }

    /* Don't execute PHP internal error handler */
    return true;
}

set_error_handler("myErrorHandler");

手册中的更多信息:http://www.php.net/manual/en/function.set-error-handler.php