PHP调试的详细指南

如果您使用PHP,或者您发现自己“采用”了一个PHP应用程序(就像我几年前做的那样),那么您必须知道如何调试PHP。

在这个详细的PHP调试指南中,您将看到一些几乎适用于任何编程语言的调试技术。但是别担心。我将介绍应用于PHP的细节,从基础到完全集成的调试技术。让我们从PHP调试中的一项基本技术开始:输出和日志记录值。

打印值

当您需要一种简单的方法来调试程序并且没有其他选项时,通常可以输出值。有时这意味着执行var_dump或记录整个系列的事件。

在程序中进行调试日志记录非常有用。在PHP中,可以使用各种日志记录器来记录调试消息。当程序在调试模式下运行或将日志级别设置为debug时,这些消息将出现在您的stdout、stderr或日志文件中。在“调试模式”中,日志将很快被填满,因此您只想临时打开它,使用简单的方法来输出值。

打印值到标准输出

var_dump函数是查看PHP程序中发生的情况的一种方法。它将把一个变量值转储到stdout。还可以使用其他函数通过输出进行调试。以下是一些可以帮助你的方法:

  • var_dump ($var)将变量类型和值转储到stdout。
  • print_r ($var)以人类可读的形式将变量值打印到stdout。
  • get_defined_vars()获取所有定义的变量,包括内置变量和自定义变量(print_r来查看它们)。
  • debug_zval_dump ($var)转储变量及其引用计数。当有多个路径要更新单个引用时,这很有用。
  • debug_print_backtrace()打印一个显示当前函数调用链的backtrace。
  • debug_backtrace()获取回溯信息。您可以print_r,将其记录到文件中,或者将其异步发送到日志端点。
<?php
$myVar = "hello world!";

var_dump($myVar);
print_r($myVar);

$allVars = get_defined_vars();
print_r($allVars);
debug_zval_dump($allVars);

function sayHello($hello) {
    echo $hello;
    debug_print_backtrace();
}

sayHello($myVar);
?>

切换错误报告级别

PHP有几种配置错误报告的方法。如果可以访问php.ini文件,则可以使用它。

设置组合将为您提供正确的错误日志记录级别。你需要考虑以下设置:

  • error_reporting设置日志记录级别。E_NOTICE在开发过程中非常有用,因为它可以告诉您诸如未分配变量之类的缺陷。
  • display_errors告诉PHP在何处显示错误消息。
  • display_startup_errors应该只在调试时使用。
  • log_errors和error_log一起工作,将错误发送到日志文件。在生产环境中这样做,而不是将它们显示给最终用户。
使用Vagrant和Puppet自动化开发环境
显示所有PHP错误: 基本和高级用法