GVKun编程网logo

为什么我的PHP错误日志滞后2个小时?(为什么我的php错误日志滞后2个小时呢)

10

对于想了解为什么我的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个小时呢)

为什么我的PHP错误日志滞后2个小时?(为什么我的php错误日志滞后2个小时呢)

当从命令行上的PHPinfo和PHP -i检查PHP.ini时,我的时区设置为Africa / Johannesburg.所以我的时区是GMT 2.

我写了一个小片段来检查时间是否正确如下:

echo date('h:i A',time());
echo '<br />' . ini_get('date.timezone');

这会输出正确的时间,与我的localmachine的系统时间相匹配.

但是,当我查看我的PHP错误日志时,每个错误日志项的时间仅落后两个小时?这是为什么,我该如何解决这个问题.

还有Zend Cache的问题,我认为这个问题引起了它.

解决方法

听起来PHP配置了一个时区,并且它运行的服务器被设置为不同的时区(可能是GMT / UTC).这意味着所有文件操作等都将在PHP脚本的不同时区工作.

检查服务器的系统时区.

IIS上的PHP错误日志不会写入文件

IIS上的PHP错误日志不会写入文件

我通过FastCGI在 Windows Server 2008 R2和 PHP 5.5 NTS上使用IIS 7.5.
不知何故,我的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-fpm 输出php错误日志

nginx php-fpm 输出php错误日志

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的错误日志。

调试起来就很痛苦了。解决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中文网!

以上就是nginx php-fpm 输出php错误日志的详细内容,更多请关注php中文网其它相关文章!

php-fpm怎么输出PHP错误日志

php-fpm怎么输出PHP错误日志

php-fpm输出php错误日志的方法:首先编辑php-fpm.conf配置文件,增加配置【error_log = log/error_log】;然后编辑php.ini配置文件,开启错误日志;最后重启php-fpm即可。

php-fpm怎么输出PHP错误日志

本文操作环境: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自定义错误日志是什么?错误日志实例代码详解

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 = &#39;&#39;;
    switch ($errno) {
    case E_USER_ERROR:
        $template .= "用户ERROR级错误,必须修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;error&#39;);
        exit(1);//系统退出
        break;
    case E_USER_WARNING:
        $template .= "用户WARNING级错误,建议修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;warning&#39;);
        break;
    case E_USER_NOTICE:
        $template .= "用户NOTICE级错误,不影响系统,可不修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
    $log_file = sprintf($log_file,&#39;notice&#39;);
        break;
    default:
        $template .= "未知错误类型: 错误编号[$errno] $errstr  ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;unknown&#39;);
        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自定义错误日志是什么?错误日志实例代码详解的相关知识,请在本站寻找。

本文标签: