在之前的文章中给大家带来了《带你一起了解PHP的错误类型和错误级别》,其中详细介绍了PHP中的错误类型和错误级别,本篇文章我们一起来看一下PHP中错误日志的配置和使用方法。希望对大家有帮助!
在我们之前的文章中,我们介绍了PHP错误的异常处理、错误类型还有错误级别,接下来我们来介绍一下PHP中错误日志的配置和使用方法。对于 PHP 开发者来说,一旦某个项目投入使用,应该立即将配置文件 php.ini 中的 display_errors
选项关闭,以免因为这些错误而透露路径、数据库连接、数据表等信息。
再投入使用的任何一个项目中,不可避免的会有错误的出现,有些错误报告对开发者是有用的,这时候我们可以通过单独的文本文件来进行错误报告的日志记录。这样的话,开发人员可以更轻松的进行查看系统是否存在问题。将PHP配置文件中的 log_errors
开启的话,就可以将程序中的错误报告写进错误日志中了。
其中这份错误报告会自动记录到服务器的日志文件中,想要发送到系统的syslog
中,也就是系统日志中,也是可以的。接下来我们就一起来看一下怎样去实现这样错误处理的方法吧。
通过指定文件记录错误报告
想要实现使用目标文件来记录错误报告日志,其中重要的是需要让这个制定的文件的位置在文档根目录外面,这样的话受到攻击的可能性较低,而且这个指定文件需要拥有一定的权限,首先我们先来看一下我们需要针对php.ini
的配置指令做出怎样的修改:
<strong>log_errors = On</strong>
;决定日志语句记录的位置<strong>log_errors_max_len = 1024</strong>
;设置每个日志项的最大长度<strong>error_reporting = E_ALL</strong>
;将会向PHP报告发生的每个错误<strong>display_errors = Off</strong>
;不显示满足上条 指令所定义规则的所有错误报告<strong>error_log = /usr/local/error.log</strong>
;指定产生的 错误报告写入的日志文件位置
按照上述的方式修改php.ini文件后,成功设置之后,在运行PHP的脚本文件的时候,就不会在浏览器中有显示错误报告了,这时候错误报告就都显示在这个我们设置的目标文件中,也就是错误日志中了。
另外还需要注意的是,这个目标文件中可以记录error_reporting
定义的错误也可以通过 error_log()
函数将错误信息放到服务器中的错误日志或者这个目标文件中。
error_log()
函数的语法格式如下:
error_log ( string $message [, int $message_type = 0 [, string $destination [, string $extra_headers ]]] ) : bool
其中需要注意的是:
$message
表示需要记录的错误信息;$destination
表示目标,也就是错误消息被发送到的目的地。它的含义描述于以上,由 $message_type
参数所决定;$extra_headers
表示额外的头。当 $message_type
设置为 1 的时候使用。 该信息类型使用了 mail() 的同一个内置函数。
$message_type表示
设置错误应该发送到何处。可能的信息类型有以下几个:
0
:(默认值)将$message
发送到 PHP 的系统日志,使用操作系统的日志机制或者一个文件,取决于配置文件中 error_log 设置了什么;1
:将$message
发送到参数 $destination 设置的邮件地址。 第四个参数 $extra_headers 只有在这个类型里才会被用到;(2已经被弃用了)3
:$message
被发送到位置为 $destination 的文件里。字符 $message 不会默认被当做新的一行;4
:将$message
直接发送到 SAPI 的日志处理程序中。
接下来我们通过示例看一下以登入 Mysql 数据库为例,当登入失败时记录错误信息。示例如下:
<?php $link = mysqli_connect("127.0.0.1", "my_user", "my_password", "my_db"); if (!$link) { error_log('Mysql 数据库连接失败!',0); exit(); } ?>
如果以登入Oracle数据库出现问题的处理为例,该函数的使用示例如下:
<?php if(!Ora_Logon($username, $password)){ error_log("Oracle数据库不可用!", 0); //将错误消息写入到操作系统日志中 } if(!($foo=allocate_new_foo()){ error_log("不行!", 1, ". mydomain.com"); //发送到管理员邮箱中 } error_log("不行!", 2, "localhost:5000"); //发送到本机对应5000端口的服务器中 error_log("不行!", 3, "/usr/local/errors.log"); //发送到指定的文件中 ?>
代码运行之后就会在php.ini 配置文件中 error_log
一项所设置的目录中生成对应的错误日志文件。接下来我们看一下错误信息记录到操作系统的日志里是什么情况。
通过系统日志记录错误报告
上文中我们讲到了将使用目标文件来记录错误报告日志,接下来我们就来看一下将错误信息放到操作系统的日志里面,这是可以实现的,其中不同的操作系统,它们的日志管理也是不一样的,下面我们都是使用常见的windows举例,Windows 上错误将发送到事件日志里,可以通过事件查看器来查看。
通过什么样的方法才能够在操作系统的日志里有错误信息呢?这时候我们可以通过php.ini 配置文件中 error_log
,接下来我们看一下应该怎样修改php.ini中的配置文件。
修改error_reporting = E_ALL
用来报告所发生的每个错误;修改display_errors = Off
用来不显示满足上条指令所定义规则的所有错误报告;修改log_errors = On
用于决定日志语句记录的位置;修改log_errors_max_len = 1024
用于设置每个日志项的最大长度;修改error_log = syslog
用于指定产生的错误报告写入操作系统的日志里 。
虽然通过前面介绍的 error_log()
函数,可以向 syslog 中发送定制的消息,想要实现将错误信息放到操作系统的日志里面,我们还需要三个函数的帮助,下面我们就来简单的介绍一下:
<strong>openlog()</strong>
函数
该函数是用来打开连接的,用于向系统中写入日志信息做的准备。并且每个日志的消息中都有它的一个参数是字符串形式的。
<strong>syslog()</strong>
函数
该函数拥有两个参数,它的作用是用来给系统中的日志给一个特定消息,第一个参数就是用来设置这个消息的优先级,第二个参数即使提供字符串,这个字符串就是这个特定的消息。
<strong>closelog()</strong>
函数
该函数就是用来关闭连接的,这个连接就是上文中openlog()
函数打开的。
那么接下来我们通过示例来看一下实际操作吧,示例如下:
<?php openlog("PHP中文网", LOG_PID, LOG_USER); syslog(LOG_WARNING, "向 syslog 中发送定时消息,发送时间:".date("Y/m/d H:i:s")); closelog(); ?>
以windows系统为例,打开“此电脑”右键选择“管理”选项,进入计算机管理界面,找到图示中应用程序的选项,就能够看到我们自己定制的警告信息了。如下所示:
其中我们需要注意的是:
你所使用的Web服务器环境决定了是使用指定文件还是使用syslog记录错误日志。可以控制服务器的话就可以利用解析工具来查看和分析日志,推荐使用syslog 激励错误日志,网站在共享服务器的虚拟主机中运行,推荐使用单独的文本文件记录错误日志了。
大家如果感兴趣的话,可以点击《PHP视频教程》进行更多关于PHP知识的学习。
以上是总结使用不同的方法记录错误报告日志的详细内容。更多信息请关注PHP中文网其他相关文章!

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 Linux新版
SublimeText3 Linux最新版

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。