无论您是哪个级别的WordPress开发人员,您都会不断遇到一个问题:错误。即使是最有经验的开发人员也无法以不会产生错误的方式持续进行编码。幸运的是,通过WordPress的调试模式,我们可以很方便地查看错误的原因。
与使用通用编程语言进行编程不同,WordPress错误不会简单地打印在页面上。这是因为调试日志通常包含敏感信息,例如数据库的凭据。WordPress会将这些日志放入您的服务器上,公众无法访问的文件中。
今天,让我们从技术角度看一下WordPress调试过程中涉及的内容。
WordPress 调试模式
如您所知,WordPress是使用PHP开发的。这意味着官方的WordPress调试指南以及官方的PHP调试指南将是一路为您提供帮助的优秀资源。
为了进行调试,WordPress要求您定义一个全局PHP变量。在下一节中,我们将详细介绍如何执行此操作。
区分PHP调试过程与WordPress调试过程之间的区别很重要。通过vanilla PHP,默认情况下仅显示两种类型的PHP错误。一种是“致命错误(fatal error)”,这意味着它非常严重,甚至无法加载页面。另一种是“敏感致命错误(sensitive fatal error)”只是向用户显示空白页。换句话说,PHP知道打印出完整的错误消息可能会带来安全风险。这些设置可以在PHP本身中轻松修改。
另一方面,WordPress在调试方面有点麻烦。如果仅启用WordPress调试而不自定义它,则将显示错误,警告甚至为开发人员提供信息的各个级别。这意味着将显示从致命错误到有关如何优化JavaScript部分的技术性信息的所有内容。尽管这对开发人员非常有帮助,但它可能不是向用户显示的最佳内容。
另一个独特的功能是,您将收到有关已弃用的WordPress特定PHP函数的通知。已经过时的功能现在仍然可以使用,但是将来会不再支持它们。这通常也意味着有更好、更快的方式来完成相同的过程。
我们知道您可能对调试WordPress并不感到兴奋,但是如果您希望维护功能正常的博客或网站,这一点至关重要。不过,在开始编辑文件之前,请务必先使用受信任的WordPress备份插件。这样,如果您不小心使站点无法运行,则只需单击几下即可恢复所有内容!
如何在WordPress中启用调试功能?
为了开始WordPress调试过程,我们需要几行PHP。
启动您喜欢的文本编辑器(但是不要使用Windows记事本!),如果您还没有一款实用的代码编辑器,可以看下:WordPress开发者可选的23个优秀的PHP代码编辑器和IDE
接下来,下载您的wp-config.php文件的副本。不要编辑原始文件!完成后,我们将仅上传修改后的版本。
在文本编辑器中打开wp-config.php之后,您需要添加以下代码行。首先,搜索它以确保您还没有它;如果两次定义相同的变量,PHP将变得非常不高兴!
define( 'WP_DEBUG', true );
这些代码行都将名为WP_DEBUG的全局PHP变量设置为布尔值true。也就是启用了WordPress的调试模式。如果你希望把WordPress的调试功能关闭,你只需要将后面的值改为false:
define( 'WP_DEBUG', false );
添加了define( 'WP_DEBUG', true );仅仅是开启了调试模式,也会在页面中输出一些严重的错误提示,但是仅仅在页面中通常无法获取最详细最完整的错误。
所以,我们通常会同时使用下面的两行代码,将错误信息输出到一个日志文件中,方便我们查看所有错误内容:
define( 'WP_DEBUG_LOG', true ); //将错误输出到日志文件中define( 'WP_DEBUG_DISPLAY', false ); // 不要在页面上显示错误信息
推荐阅读:如何开启和设置WordPress调试模式
WordPress调试日志在哪里?
从技术上讲,此问题有两个答案,确切的答案取决于您的选择。
正如我们所说,一种方法是只添加define( 'WP_DEBUG_LOG', true );。这将使用默认的WordPress调试日志设置,如果该文件在wp-content/debug.log位置不存在(或者如果存在则追加到文件),则会自动创建一个文件。
但是,出于多种原因,您可能希望将其放在其他位置。例如,您可能希望将其放在第三方调试工具可以访问它的位置。为了自定义调试日志的放置位置,可以使用下面的代码:
define( 'WP_DEBUG_LOG', '/best-wp-dev/errors.log' );
WordPress调试日志说明
WordPress调试日志中信息的详细程度取决于您对其进行配置的方式。如果仅启用它而不进行任何其他修改,则几乎会记录所有错误,使用不推荐使用的功能或不是最佳功能的事件。
由于WordPress基于PHP构建,因此您的日志将显示每个PHP错误和引发的警告。它还将包含与每个事件关联的日期,时间和IP地址。不幸的是,您还将看到PHP在很多方面的(非常)冗长的输出,例如它不喜欢的代码样式,感觉应该加强的数据验证等等。
尤其是对于刚开始调试WordPress的人们而言,查看日志文件可能会让人不知所措。但是,您应该记住,仅需要查看其中几项信息即可。
调试与日志记录
尽管他们的目标是实现相同的目标,但了解调试和日志记录之间的区别很重要。换句话说,该行中的define( 'WP_DEBUG', true );与行define( 'WP_DEBUG_LOG', true );完全不同。
在任何情况下都不应在公众可以访问的网站上单独使用define( 'WP_DEBUG', true );。单独使用此命令时,将仅输出调试消息。这不会记录任何内容,它将输出可用于从您的站点窃取数据的信息。确保不启用此功能,并结合可靠的WordPress安全插件,将阻止绝大多数尝试的网络攻击。
在不冒安全风险的情况下调试WordPress
显然,您将需要定期调试站点。但是,您可能不希望不断地从wp-config.php文件中添加和删除代码行。
在整个过程中,我们首先需要启用调试功能。然后,我们需要确保记录错误以使其可能解决。但是,我们不希望显示这些错误给公众。请记住,我们需要同时禁止显示标准PHP错误和WordPress特定错误。
安全WordPress调试代码示例
使用上面概述的过程,这里有四行代码,可以帮助您开始安全调试站点!
define( 'WP_DEBUG', true );define( 'WP_DEBUG_LOG', true );define( 'WP_DEBUG_DISPLAY', false );@ini_set( 'display_errors', 0 );
上面的前三行仅是设置WordPress的全局PHP变量。我们可以进行调试,设置日志记录功能,然后关闭WordPress特定的错误。
第四行用于解决WordPress无法处理的PHP错误。这是确保恶意用户无法访问敏感站点信息的最后基础。
如何修复WordPress调试错误?
开发人员经常会使用以上的那四行代码。他们将遇到错误,例如数据库连接失败,但调试日志中将不会包含任何内容。这是因为WordPress对于不同的调试方法具有不同的全局PHP变量。
让我们看一些场景,在这些场景中,您需要向wp-config.php文件中添加更多代码行,以便正确调试WordPress。
调试WordPress JavaScript
如果您有WordPress网站,则很有可能会使用JavaScript。对于较新的开发人员,从本质上讲,这是支持网站交互元素的语言。JavaScript因调试很繁琐而臭名昭著。这是因为现代站点经常使用基于JavaScript的框架,这进一步使警告和错误消息变得更加复杂。
不幸的是,这并不是使调试WordPress JavaScript困难的唯一原因。JavaScript有两种基本形式:异步或“ AJAX”,以及常规JavaScript。常规JavaScript以线性方式运行;它不会运行一个功能,直到执行完一个功能为止。尽管这可能在Web的早期阶段就已经解决了,但对于Web应用程序并没有减少。
另一方面,AJAX在WordPress网站的后台运行。它允许您运行JavaScript函数并等待其输出,但不会阻止其他函数运行。通常有必要防止站点锁定。
WordPress让我们使用另一个PHP全局变量来表示我们要调试脚本的原因是因为这种调试方法会输出大量数据。这也是因为JavaScript和CSS在客户端运行,而PHP在服务器端运行。为了输出由于JavaScript和CSS而导致WordPress遇到的每个错误,只需添加以下行:
define( 'SCRIPT_DEBUG', true);
这将同时显示JavaScript和CSS(样式表)错误。它还可以帮助执行更复杂的AJAX操作。
解决数据问题
几乎每个网站都从数据库中获取信息。WordPress有几个数据表。一些站点将数据库存储在单独的服务器上,而某些站点将它们保留在同一服务器上。由于所有配置都不相同,因此数据库连接中总有可能出现问题。
如果您收到一条错误消息,指出WordPress无法连接到数据库,或者您发现数据没有正确提取,则可能需要调试。只需使用标准的WordPress调试变量,您可能会注意到在遇到与数据库相关的错误时不会记录任何内容。
这是因为WordPress将与数据库相关的错误与所有其他错误分开。数据库错误消息通常包含敏感信息,而WordPress的开发人员希望确保您不会意外将私人信息泄露给公众!
为了开始调试WordPress数据库问题,您需要在wp-config.php文件中添加另一行:
define( 'SAVEQUERIES', true );
深入数据库调试
与我们的其他全局WordPress调试变量不同,我们需要特别注意这一点。“ SAVEQUERIES”告诉WordPress,我们想查看每个查询的运行情况并返回结果。这将严重损害站点范围的性能!请注意不要在高峰时间在服务器上运行此程序,并在不需要时将其关闭。
它还存储了一些不同的输出。WordPress使用PHP字符串数组来查看数据库调试信息。它位于名为$wpdb的PHP全局变量和称为query的成员数组中。您可以通过打印$wpdb->queries的内容来实现
调试WordPress插件
与其他平台相比,WordPress的一个主要优势是其丰富的插件库,可以执行几乎所有操作。您可能正在阅读此书,并且已经对需要不断更改文件内容的后勤问题感到头痛。值得庆幸的是,一些插件可以帮助我们调试WordPress!有两种特别受欢迎的产品使它变得轻而易举。
WP Debugging
位于WordPress网站上,WP Debugging是最著名的WordPress调试插件之一。它实质上使我们已经讨论过的过程自动化。在仪表板上单击几下,即可在站点上打开和关闭所有这些PHP全局变量。
安装此插件时,还将安装一系列它所依赖的插件。总体而言,它们使您可以记录日志并帮助您解释遇到的错误。
这个工具非常适合启用调试过程,但是为了调试您自己的插件并轻松查看与数据库相关的WordPress调试信息,您还需要另一个插件。
Debug Bar
顾名思义,Debug Bar只是WordPress网站管理面板上的一个工具栏。它可以与WP Debugging结合使用。
它为更高级的开发人员提供了工具,使他们可以查看缓存,已输出的查询,查询的结果以及更高级的信息。就像我们提到的那样,WordPress将所有数据库调试信息放入PHP全局变量中。
为了实际查看该信息,您需要在自定义PHP文件中遍历该数组。该插件为您提供了一个简单的替代方法。它以一种易于阅读和理解的格式为您打印所有这些信息。它甚至为您提供了一些有关如何优化数据库调用的提示!
调试WordPress主题
调试WordPress主题通常涉及启用有关脚本的PHP全局变量。这是因为主题利用了客户端JavaScript和CSS。
首先,确保它是您创作的主题。如果它是第三方主题,则遇到问题,则需要联系该主题的作者。
如果这是您自己的主题,只需确保您按照我们讨论的步骤启用调试即可。执行任何使您注意到该错误的操作。您还可以通过按F12键在Web浏览器中启用开发者控制台。这显示了更多的客户端级错误消息,可以在此过程中提供帮助。
在对主题执行导致错误的操作之后,请查阅日志。那里应该有导致错误的详细信息。可能只需进行一些JavaScript和/或CSS调整,即可使一切恢复正常!
调试WordPress严重错误
如果插件,主题或其他自定义内容生成错误导致WordPress网站失败,则您的网站应向您发送有关失败的电子邮件。尤其是对于新的网站管理员而言,这可能令人不快。
无需担心,因为您只需按照以下步骤操作,即可在很短的时间内解决问题!
- 确保已打开WordPress调试模式。
- 访问您的错误日志。它应该具有有关致命错误的详细信息。如果是这样,请在线搜索确切的错误代码。
- 检查您的PHP版本。如果不是WordPress当前所需,只需更新服务器使用的PHP版本就可以解决此问题。
- 如果仍然没有运气,请检查一下插件。禁用所有插件后,如果该网站正常运行,则说明是由插件引起的。一步一步地进行操作,直到找到问题插件。与插件作者联系,并要求他们进行修复。
- 如果您仍然没有找到问题,则可能是与主题相关的问题。尝试将当前主题恢复为默认的WordPress主题。如果您的网站正常运行,则需要临时更改主题,直到作者解决该问题为止。
- 还没有找到问题根源和解决办法?在WordPress开发人员论坛上提出您的错误。有很多用户很乐意为您提供帮助。
总结
调试WordPress可以帮助您解决遇到的许多问题。它可以告诉您哪些插件有问题,或者主题可能有什么问题。作为WordPress开发人员,调试不仅可以帮助您成为更好的开发人员,还可以帮助您生成干净、优质的代码。
评论0