按IP地址限制Laravel错误日志

时间:2014-03-23 07:41:28

标签: php laravel laravel-4

在Laravel的debug中将true设置为app/config.php时,有没有办法将带有堆栈跟踪的结果Whoops错误页面限制为某些IP地址,而不是IP在该列表上显示特定视图?

感谢。

2 个答案:

答案 0 :(得分:4)

不是建于否。

但你可以通过捕获所有例外来轻松实现这一点,并且只有在比较用户的IP地址后才重新投掷。

因此在app/start/global.php中您需要配置“应用程序错误处理程序”。目前,它捕获所有异常,并使用Log::error进行记录。因此,您可以将用户IP地址与有效IP地址数组进行比较:

App::error(function(Exception $exception, $code)
{
    Log::error($exception);

    $validIpAddresses = ['123.456.789.0', '321.654.987.0'];

    if (in_array(Request::getClientIp(), $validIpAddresses))
    {
        throw $exception;
    }

    return View::make('error');
});

答案 1 :(得分:2)

config.php(或app/config/app.php)文件是一个与其他文件类似的PHP文件。

所以没有人阻止你指定

'debug' => in_array($_SERVER['REMOTE_ADDR'], array('192.168.0.1','127.0.0.1')),

这会导致debug来自某些IP地址true,而不是其他地址。

更新:如果从CLI运行,我们可能需要

'debug' => array_key_exists('REMOTE_ADDR', $_SERVER)
        ? in_array($_SERVER['REMOTE_ADDR'], array(
             '192.168.0.1',         /* List of allowed addresses */
             '127.0.0.1'
        ))
        : true /* Actually, whatever we want when going CLI */
        ;

您甚至可以检查浏览器请求中嵌入的“用户密码”(请记住,除非您使用SSL,否则它将以明文形式显示;请勿使用“重要”密码)。

'debug' => (strpos($_SERVER['HTTP_USER_AGENT'], 'KLAATU-BARADA-NIKTO') > 0),

然后使用Firefox plug-in编辑浏览器的用户代理并添加密码。然后你的浏览器将进行调试,但没有其他的。