
PHP错误日志与调试技巧大全调试是开发过程中必不可少的环节。PHP提供了丰富的调试工具和日志记录功能。今天说说各种调试技巧。var_dump和print_r是最快的调试方式。phpfunction debugLog(mixed $var, string $label ): void{if ($label) echo $label: ;echo ; var_dump($var); echo ;}$data [user [name 张三, age 28], scores [95, 87, 92]];debugLog($data, 用户数据);?Xdebug是PHP最强大的调试工具。配置好IDE的调试端口后可以设置断点、单步执行、查看变量。php// php.ini配置// xdebug.modedebug// xdebug.start_with_requestyes// xdebug.client_host127.0.0.1// xdebug.client_port9003// xdebug.idekeyPHPSTORMfunction factorial(int $n): int{if ($n 1) return 1;return $n * factorial($n - 1);}echo factorial(10) . \n;?错误日志记录也很重要。error_log可以写文件Monolog是专业的日志库。phperror_log(用户登录失败);$context [user_id 123, ip 192.168.1.1];error_log(json_encode([time date(Y-m-d H:i:s),level ERROR,message 数据库连接失败,context $context,]));// 自定义日志函数function appLog(string $level, string $message, array $context []): void{$entry json_encode([time date(c),level $level,message $message,context $context,pid getmypid(),], JSON_UNESCAPED_UNICODE);file_put_contents(/tmp/app.log, $entry . \n, FILE_APPEND | LOCK_EX);if ($level ERROR || $level CRITICAL) {error_log($entry);}}appLog(INFO, 用户登录成功, [user_id 123]);appLog(ERROR, 支付失败, [order_id ORD-001]);?设置错误处理器可以统一处理错误。phpset_error_handler(function (int $level, string $message, string $file, int $line) {if (!(error_reporting() $level)) return false;throw new ErrorException($message, 0, $level, $file, $line);});set_exception_handler(function (Throwable $e) {http_response_code(500);error_log(未捕获异常: {$e-getMessage()} in {$e-getFile()}:{$e-getLine()});if ($_SERVER[APP_ENV] development) {echo 错误: {$e-getMessage()}\n;echo 追踪: {$e-getTraceAsString()}\n;} else {echo json_encode([error 服务器内部错误]);}});throw new RuntimeException(测试异常);?线上环境关闭display_errors开启log_errors。错误信息只记录日志不给用户看既安全又方便排查问题。生产环境排查问题的时候日志是主要手段。结构化日志配上请求ID可以串联一个请求在所有服务中的日志。平时多花点时间在日志上线上出问题的时候能省很多时间。