Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何只向自己显示PHP错误?_Php - Fatal编程技术网

如何只向自己显示PHP错误?

如何只向自己显示PHP错误?,php,Php,我已经看到了一些使用php.ini隐藏php错误的方法,或者通过将php\u flag display\u errors off添加到.htaccess来隐藏php错误,但是我想知道是否有一种方法可以让我只看到php错误(显然对调试很有用),但其他任何人都会被重定向到某个样板错误页面。我在我的网站上有一些脚本,它们使用我的论坛来验证我的管理员身份,并将其他人踢出网站,所以也许可以使用相同的方法 如果这不可能,我想我会使用.htaccess方法,因为我没有访问php.ini的权限。向.htacce

我已经看到了一些使用php.ini隐藏php错误的方法,或者通过将
php\u flag display\u errors off
添加到.htaccess来隐藏php错误,但是我想知道是否有一种方法可以让我只看到php错误(显然对调试很有用),但其他任何人都会被重定向到某个样板错误页面。我在我的网站上有一些脚本,它们使用我的论坛来验证我的管理员身份,并将其他人踢出网站,所以也许可以使用相同的方法

如果这不可能,我想我会使用.htaccess方法,因为我没有访问php.ini的权限。向.htaccess添加
php\u标志display\u errors off


谢谢

您可以对照用户IP进行检查,如果它与您的IP匹配,您可以显示错误。 大概是这样的:

if($_SERVER['REMOTE_ADDR'] == 'your.ip.address'){
    error_reporting(E_ALL);
} else {
    error_reporting(0);
}
if($_SESSION['isadmin']==1){
    ini_set('display_errors', 1);
    ini_set('log_errors', 1); 
}
如果你不知道你的外部IP,只需谷歌“什么是我的IP”或类似的


基本案例场景显然有一个开发服务器。

虽然我同意konforce的观点,但通过使用error_reporting()函数在运行时设置错误报告,这是可能的。如果您坚持这样做,请将其放在您提到的确定您是管理员的代码块中,这样您就不会在不同的地方做出决定。

如果您有用户系统,请设置代码,以便在您登录时识别您,并显示错误。因此,只有当您登录时,它才会显示错误。

虽然在屏幕上显示错误对开发很有好处(正如您马上看到的那样),但不应为生产服务器启用这些错误,因为您可能会意外地将敏感信息(如数据库密码)暴露给未经授权的用户

有用的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_通知
有助于捕捉变量名或数组索引中的键入错误

请注意,所有这些选项也可以在
php.ini
.htaccess
文件中设置。但是如果使用
.htaccess
则不能使用
E.*
常量;相反,必须对整数表示形式进行硬编码。(即,在
.htaccess
文件中,您使用
显示的任何结果作为值,或者使用希望记录的任何内容。)

事实上,如果可能的话,我建议在
php.ini
中设置它们。否则,如果出现脚本解析错误(或者由于某种原因跳过了
ini\u集
),则可能无法正确记录错误,等等


在Linux机器上,您始终可以从shell执行
tail-f/path/to/my/php.log
,以实时监控日志。

由于您的代码已经知道您是管理员,您可以使用如下逻辑:

if($_SERVER['REMOTE_ADDR'] == 'your.ip.address'){
    error_reporting(E_ALL);
} else {
    error_reporting(0);
}
if($_SESSION['isadmin']==1){
    ini_set('display_errors', 1);
    ini_set('log_errors', 1); 
}

管理员会看到错误,但其他用户不会看到错误。

我建议改为使用日志文件。在实时服务器上启用调试是危险的,因为它可能会暴露敏感数据。我知道您希望将其限制为授权用户。。。但我还是不会冒险犯错误。另外,如果您登录到文件,您可以捕获每个人的错误。+1,同意konforce。如果向用户显示错误的错误,可能会出现太多错误。日志文件依赖于单独的身份验证系统(OS)来确保您是唯一能够看到它的人,这正是您想要的,因为如果损坏的是您的身份验证代码怎么办?@konforce-感谢您的回复。您是否有一个链接或说明如何登录到文件的东西?我是一个新手,不知道怎么做:)我提供了一个答案,其中包括记录到一个文件。它应该涵盖足够的基础知识,让你开始。