我已经看到了一些隐藏php错误的方法,使用php.ini或将php_flag display_errors off
添加到.htaccess,但我想知道是否有办法让它只有我能看到php错误(显然可用于调试),但其他任何人都将被重定向到某些样板错误页面。我的网站上有一些脚本使用我的论坛来验证我作为管理员并将其他人踢出去,所以也许可以使用相同的方法?
如果这是不可能的,我想我会使用.htaccess方法,因为我无法访问php.ini。将php_flag display_errors off
添加到.htaccess是一个很好的方法吗?
谢谢!
答案 0 :(得分:2)
虽然在屏幕上显示错误非常适合开发(正如您立即看到的那样),但不应为生产服务器启用它们,因为您可能会意外地将敏感信息(例如,数据库密码)暴露给未经授权的用户。
有用的INI选项是:
ini_set('error_reporting', E_ALL & ~E_NOTICE);
ini_set('error_log', '/path/to/my/php.log');
ini_set('log_errors', 'On'); // log to file (yes)
ini_set('display_errors', 'Off'); // log to screen (no)
这样,所有错误都将记录到指定的文件中。屏幕上不会显示任何错误。
确保Web服务器用户能够写入该文件。在运行脚本之前,您可能需要相应地创建它并chmod
/ chown
。
在专用开发服务器上,您可以禁用日志文件并直接显示到屏幕。在开发时,我也会养成显示E_NOTICE
错误的习惯。 (只需使用E_ALL
作为值。)如果您的脚本写得很好,那么您也可以在生产中继续记录它们。 E_NOTICE
适用于在变量名或数组索引中捕获拼写错误。
请注意,所有这些选项也可以在php.ini
或.htaccess
文件中设置。但是如果使用.htaccess
,则无法使用E_*
常量;相反,您必须硬编码整数表示。 (即,在.htaccess
文件中,您可以使用<?php echo E_ALL ?>
显示的任何结果作为值,或者您希望记录的任何内容。)
事实上,我建议尽可能在php.ini
中设置它们。否则,如果脚本解析错误(或由于某种原因导致ini_set
被跳过),则可能无法正确记录错误等。
在Linux机器上,您始终可以从shell执行tail -f /path/to/my/php.log
以实时监控日志。
答案 1 :(得分:0)
您可以检查用户IP,如果它与您的IP匹配,则可以显示错误。 像这样:
if($_SERVER['REMOTE_ADDR'] == 'your.ip.address'){
error_reporting(E_ALL);
} else {
error_reporting(0);
}
如果您不知道外部IP,只需谷歌“我的IP是什么”或类似的。
基本情况显然是有一个开发服务器。
答案 2 :(得分:0)
虽然我同意konforce,但可以通过error_reporting()函数在运行时设置错误报告。如果您坚持这样做,请将其放在您提到的用于确定您是管理员的相同代码块中,这样您就无法在不同的地方做出决定。
答案 3 :(得分:0)
如果您有用户系统,请设置代码,以便在您登录时识别您并显示错误。因此,它只会在您登录时显示错误。
答案 4 :(得分:0)
由于你的代码已经知道你是管理员,你可以使用这样的逻辑:
if($_SESSION['isadmin']==1){
ini_set('display_errors', 1);
ini_set('log_errors', 1);
}
管理员会看到错误,但其他用户将看不到错误。