对于想了解为什么我的PHP错误日志滞后2个小时?的读者,本文将是一篇不可错过的文章,我们将详细介绍为什么我的php错误日志滞后2个小时呢,并且为您提供关于IIS上的PHP错误日志不会写入文件、ngin
对于想了解为什么我的PHP错误日志滞后2个小时?的读者,本文将是一篇不可错过的文章,我们将详细介绍为什么我的php错误日志滞后2个小时呢,并且为您提供关于IIS上的PHP错误日志不会写入文件、nginx php-fpm 输出php错误日志、php-fpm怎么输出PHP错误日志、php自定义错误日志是什么?错误日志实例代码详解的有价值信息。
本文目录一览:- 为什么我的PHP错误日志滞后2个小时?(为什么我的php错误日志滞后2个小时呢)
- IIS上的PHP错误日志不会写入文件
- nginx php-fpm 输出php错误日志
- php-fpm怎么输出PHP错误日志
- php自定义错误日志是什么?错误日志实例代码详解
为什么我的PHP错误日志滞后2个小时?(为什么我的php错误日志滞后2个小时呢)
我写了一个小片段来检查时间是否正确如下:
echo date('h:i A',time()); echo '<br />' . ini_get('date.timezone');
这会输出正确的时间,与我的localmachine的系统时间相匹配.
但是,当我查看我的PHP错误日志时,每个错误日志项的时间仅落后两个小时?这是为什么,我该如何解决这个问题.
还有Zend Cache的问题,我认为这个问题引起了它.
解决方法
检查服务器的系统时区.
IIS上的PHP错误日志不会写入文件
不知何故,我的PHP不想将错误记录到文件中.永远不会创建文件,当我手动创建它时,PHP不会写入它.
这是我的PHP.ini(经过验证,它是用PHPinfo()加载的那个;);)
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT log_errors = On error_log = "C:\inetpub\logs\PHP\PHP_errors.log"
指定的目录具有IIS_IUSRS,IUSR甚至AppPool用户的写访问权限(是的,我知道它是多余的,只是为了确保).
我甚至打开display_errors以查看是否有错误,它确实在我的浏览器中显示错误,但PHP仍然不想写错误日志.
编辑:[求助]
我在我的网站上使用BasicAuthentication,并且IIS模拟您登录的用户.因此,我只是将我的登录用户帐户添加到IIS_IUSRS组,现在它可以正常工作.
Edit: [SOLVED]
I was using BasicAuthentication for my website and there the IIS impersonates the user you are logging in with. Therefore I just added my log on user account to the IIS_IUSRS group and Now it works.
nginx php-fpm 输出php错误日志
nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog
原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出,直接把他们重定向到/dev/null,所以我们在nginx的error log 和php-fpm的errorlog都看不到php的错误日志。
调试起来就很痛苦了。解决nginx下php-fpm不记录php错误日志的办法:
立即学习“PHP免费学习笔记(深入)”;
1.修改php-fpm.conf中配置 没有则增加
catch_workers_output = yes error_log = log/error_log
2.修改php.ini中配置,没有则增加
log_errors = On error_log = "/usr/local/lnmp/php/var/log/error_log" error_reporting=E_ALL&~E_NOTICE
3.重启php-fpm
当PHP执行错误时就能看到错误日志在"/usr/local/lnmp/php/var/log/error_log"中了
请注意:
1. php-fpm.conf 中的php_admin_value[error_log] 参数 会覆盖php.ini中的 error_log 参数
所以确保你在phpinfo()中看到的最终error_log文件具有可写权限并且没有设置php_admin_value[error_log] 参数,否则错误日志会输出到php-fpm的错误日志里。
2.找不到php.ini位置,使用php的phpinfo()结果查看
3.如何修改PHP错误日志不输出到页面或屏幕上
修改php.ini
display_errors = off //不显示错误信息(不输出到页面或屏幕上) log_errors = on //记录错误信息(保存到日志文件中) error_reporting = E_ALL //捕获所有错误信息 error_log = //设置日志文件名
程序中修改以上配置
ini_set("display_errors",0) ini_set("error_reporting",E_ALL); //这个值好像是个PHP的常量 ini_set("error_log","<日志文件名>") ini_set("log_errors",1);
4.如何将php的错误日志输出到nginx的错误日志里
在PHP 5.3.8及之前的版本中,通过FastCGI运行的PHP,在用户访问时出现错误,会首先写入到PHP的errorlog中
如果PHP的errorlog无法写入,则会将错误内容返回给FastCGI接口,然后nginx在收到FastCGI的错误返回后记录到了nginx的errorlog中
在PHP 5.3.9及之后的版本中,出现错误后PHP只尝试写入PHP的errorlog中,如果失败则不会再返回到FastCGI了,错误日志会输出到php-fpm的错误日志里。
所以如果想把php错误日志输出到nginx错误日志,需要使用php5.3.8之前的版本,并且配置文件中php的error_log对于php worker进程不可写。
更多PHP相关知识,请访问PHP中文网!
以上就是
php-fpm怎么输出PHP错误日志
php-fpm输出php错误日志的方法:首先编辑php-fpm.conf配置文件,增加配置【error_log = log/error_log】;然后编辑php.ini配置文件,开启错误日志;最后重启php-fpm即可。
本文操作环境:windows10系统、php 7.3、thinkpad t480电脑。
前言:
我们知道nginx是一个web服务器,因此nginx的access日志只有对访问页面的记录,不会有php 的 error log信息。
nginx把对php的请求发给php-fpm fastcgi进程来处理,默认的php-fpm只会输出php-fpm的错误信息,在php-fpm的errors log里也看不到php的errorlog。原因是php-fpm的配置文件php-fpm.conf中默认是关闭worker进程的错误输出,直接把他们重定向到/dev/null,所以我们在nginx的error log 和php-fpm的errorlog都看不到php的错误日志。
立即学习“PHP免费学习笔记(深入)”;
解决nginx下php-fpm不记录php错误日志的办法:
修改php-fpm.conf中配置 没有则增加
catch_workers_output = yes error_log = log/error_log
修改php.ini中配置,没有则增加
log_errors = On error_log = "/usr/local/lnmp/php/var/log/error_log" error_reporting=E_ALL&~E_NOTICE
重启php-fpm
当PHP执行错误时就能看到错误日志在"/usr/local/lnmp/php/var/log/error_log"中了。
相关视频分享:php视频教程
以上就是php-fpm怎么输出PHP错误日志的详细内容,更多请关注php中文网其它相关文章!
php自定义错误日志是什么?错误日志实例代码详解
项目中需要对定义错误日志及时处理, 那么就需要修改自定义错误日志的输出方式(写日志、发邮件、发短信)
一. register_shutdown_function(array(''phperror'',''shutdown_function'')); //定义PHP程序执行完成后执行的函数
函数可实现当程序执行完成后执行的函数,其功能为可实现程序执行完成的后续操作。程序在运行的时候可能存在执行超时,或强制关闭等情况,但这种情况下默认的提示是非常不友好的,如果使用register_shutdown_function()函数捕获异常,就能提供更加友 好的错误展示方式,同时可以实现一些功能的后续操作,如执行完成后的临时数据清理,包括临时文件等。
可以这样理解调用条件:
立即学习“PHP免费学习笔记(深入)”;
1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当PHP代码执行完成时,代码执行存在异常和错误、警告
二. set_error_handler(array(''phperror'',''error_handler'')); // 设置一个用户定义的错误处理函数
通过 set_error_handler() 函数设置用户自定义的错误处理程序,然后触发错误(通过 trigger_error()):
三. set_exception_handler(array(''phperror'',''appException'')); //自定义异常处理
在写日志前,我们问问自己:为什么我们有时要记录自定义的日志呢?而不用系统默认的日志记录方式呢?
1.团队需要一个统一格式的日志方便管理
2.大量无用错误日志占据硬盘空间,仅需记录有意义的日志。
那么,实践一下。
1.打开你的php.ini
2.打开日志记录,将
log_errors = Off
改成
log_errors = On
3.将php.ini保存退出并重启web服务器
4.在你的代码最前面加上如下代码
<?php //错误处理函数 function myErrorHandler($errno, $errstr, $errfile, $errline) { $log_file = "./php_%s_log_".date("Ymd").".log";//定义日志文件存放目录和文件名 $template = ''; switch ($errno) { case E_USER_ERROR: $template .= "用户ERROR级错误,必须修复 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'error'); exit(1);//系统退出 break; case E_USER_WARNING: $template .= "用户WARNING级错误,建议修复 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'warning'); break; case E_USER_NOTICE: $template .= "用户NOTICE级错误,不影响系统,可不修复 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'notice'); break; default: $template .= "未知错误类型: 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'unknown'); break; } file_put_contents($log_file,$template,FILE_APPEND); return true; } $error_handler = set_error_handler("myErrorHandler");//开启自定义错误日志
5.试着在刚才的代码后写下一段错误代码
echo 1/0;
看看你定义的路径下是否多了一个日志文件呢?:)
注:以下级别的错误不能由用户定义的函数来处理: E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING,和在 调用 set_error_handler() 函数所在文件中产生的大多数 E_STRICT。
不过当你开启了错误日志系统(php.ini中的log_error = on)并且指定了系统日志文件(同样也是php.ini中的error_log=路径名),并且error_reporting开启了全部后,以上的错误都会作为系统错误日志而记录在你定义的文件中。
以上就是php自定义错误日志是什么?错误日志实例代码详解的详细内容,更多请关注php中文网其它相关文章!
关于为什么我的PHP错误日志滞后2个小时?和为什么我的php错误日志滞后2个小时呢的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于IIS上的PHP错误日志不会写入文件、nginx php-fpm 输出php错误日志、php-fpm怎么输出PHP错误日志、php自定义错误日志是什么?错误日志实例代码详解的相关知识,请在本站寻找。
本文标签: