注意:提出这个问题的想法是,只有一个答案被标记为 Community Wiki,以鼓励使用错误日志,这可能会节省我们几个小时,帮助我们以具体的方式找到几乎所有错误的原因. 编程。
我在线使用 PHP,链接到托管在共享主机上的域。
就我而言,错误日志是一个名为 的文件error_log
,该文件在每个包含 php 文件的文件夹中创建,其中一个文件会生成错误。
当某事失败时,第一件事是检查errorlog
失败的 PHP 脚本运行所在的文件夹。
根据我在这里回答问题的经验,我意识到大量用户在询问之前没有检查错误日志。有人说他们绞尽脑汁几天或几个小时都没有找到错误,当我读到时我总是想:哦,如果我只知道有错误日志!
错误日志的部分视图,指示失败文件的路径、行和错误原因。
这个问题的想法是生成一个可以是社区 Wiki 的答案,其中指出了访问错误日志的方式(根据框架,或根据我们有经验的主机)。
它还旨在使初学者程序员或已经开始使用一段时间的程序员敏感地使用这种有用的调试工具,在我看来,由于缺乏相关知识,在很多情况下都不会使用它。
然后:
如何根据我们使用的平台或PHP框架找到错误日志来调试我们的程序?
在 PHP 中,错误日志用于:
因此,该文件包含有关我们程序中可能发生的错误的宝贵信息。
这将是第一个确定错误发生位置的来源,因为错误日志提供了有关失败脚本的路径、失败原因和发现错误的页码的信息。
许多人可能会问的问题是:但是我在哪里可以找到错误日志来查看它?答案并不那么简单,因为它的位置和名称因我们使用的平台/环境而异。
让我们用两种方法来考虑这个答案,以找到如此重要的信息来源。
快车道
它至少会让我们知道我们的文件叫什么。知道您的姓名,我们将能够更轻松地搜索您的位置。
为此,我们可以在任何页面上执行:
此调用将显示我们 PHP 的所有配置。它通常包含很多信息,因此您可以使用单词
error
进行搜索。顺便检查一下错误日志是否被激活。这几乎是我们想知道的一切:
error_log
display_errors
,即Off
。这样错误不会显示在客户端屏幕上。现在我们只需要找到错误文件的位置。这可能因上下文而异。例如,在我的情况下:Bluehost 共享网页托管,在每个文件夹中创建一个文件。当该文件夹中的文件失败时,它会被写入错误日志。
要记住的另一件事是最后的错误总是写在文件的末尾,而不是文件的开头。如果有很多错误,文件可能会增长,甚至是几兆字节。为了避免这种情况,首先要做的是优化代码,当然,避免出现未定义索引类型的消息…… 不要偷懒,在尝试使用变量之前检查它们。
直达路线(取决于您的平台)
这是一个根据最常用的框架或主机完成错误日志位置的表格。
答案是 Community Wiki,如果您有任何环境/框架的经验,请花 3 分钟编辑它,将错误日志的访问方式放在最后一行。
小心不要损坏电路板。当写一些垂直线会移动时,重新定位它,使其低于其他垂直线。
(*) 请务必注意,错误将写入调用脚本的文件夹。例如,如果我有一个名为的脚本
llamador.php
可以正常工作,但它调用了另一个文件,但调用了另一个文件夹中的错误llamado.php
。错误将被写入所在的文件夹llamador.php
,即使它是llamado.php
失败的文件夹。当然,日志会告诉我们在llamado.php
.资源 1:链接
开发中的错误登录
如果我们使用 Xampp(版本 3.x)在 Windows 上进行开发,可以通过以下步骤访问 PHP 错误日志:
这是一个很少使用的选项,因为如果我们有display_errors ON , “通常”解释器本身会向我们显示错误,但当我们使用第三方代码时,可能需要在代码本身中消除错误。
框架自身错误的日志
框架和其他一些工具可以实现自己的日志系统,记录错误,有时还会记录其他类型的消息。
Laravel 5 日志可以在“storage/logs/”目录中找到。
如果我们在 Windows(版本 3.x)上使用 XAMPP 进行开发,访问PHP 错误日志:
至于框架和其他一些工具,每个都实现了自己的日志系统,在Laravel 5中我们可以在“storage/logs/”目录中找到它们。
如果你标记了它,你可以在 PHP 路由中获取日志,但是如果你不标记它会发生什么?嗯,它也存在。
假设你有 Apache2 的基本知识并且已经安装在 gnu/linux 服务器上
您必须在默认文件夹
/var/log/apache2/
中查看,您将找到当天生成的所有日志apache2/PHP
但是,如果您有多个虚拟主机并且您不知道哪个 PHP 网页给出了错误,该怎么办。好吧,让我们看一个虚拟主机:
如您所见,有一个变量
ErrorLog
告诉您它的位置(它${APACHE_LOG_DIR}
是默认位置),它还存储 PHP 错误,因此您不需要启用 PHP 错误,除非您想将其存储在另一个路由中额外的: