Reading PHP Error Logs on DirectAdmin

当您的网站显示"500内部服务器错误"、空白屏幕或行为异常时,PHP错误日志是首先要检查的地方。此文件记录代码中发生的每个PHP错误,允许您精确定位问题根源。本指南说明如何在DirectAdmin主机上启用和读取PHP错误日志。

什么是PHP错误日志?

PHP错误日志是一个纯文本文件,其中PHP写入脚本执行期间发生的每个错误的详细信息。错误分为几个严重级别:

在DirectAdmin上启用PHP错误日志记录

方法1 — 通过DirectAdmin编辑php.ini

  1. 转到DirectAdmin → 高级功能PHP配置
  2. 设置这些值:
error_reporting = E_ALL
log_errors = On
error_log = /home/username/public_html/php_errors.log
display_errors = Off

在生产服务器上始终设置 display_errors = Off 以防止错误消息对网站访问者可见。

方法2 — 使用.htaccess

如果您无法直接访问php.ini,请使用.htaccess:

php_flag log_errors on
php_value error_log /home/username/public_html/php_errors.log
php_flag display_errors off
php_value error_reporting 32767

方法3 — WordPress wp-config.php

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

WordPress将自动将错误写入 wp-content/debug.log

警告:切勿在生产网站上启用 display_errors = On。错误消息可能会向任何浏览您网站的人暴露文件路径、数据库凭据和其他敏感信息。

如何读取PHP错误日志

启用错误日志记录后,可以通过以下几种方式访问日志文件:

通过DirectAdmin文件管理器

  1. 打开文件管理器
  2. 找到 php_errors.logdebug.log
  3. 右键单击并选择查看编辑

通过SSH / Shell

# 查看最后50行
tail -n 50 /home/username/public_html/php_errors.log

# 实时跟踪日志
tail -f /home/username/public_html/php_errors.log

# 仅搜索致命错误
grep "Fatal error" /home/username/public_html/php_errors.log

解释错误消息

错误消息示例及各部分的含义:

[16-May-2026 10:23:45 UTC] PHP Fatal error: Uncaught Error: Call to undefined function get_header() in /home/user/public_html/wp-content/themes/mytheme/index.php:5

常见PHP错误和解决方案

调试的关键php.ini设置

除了错误日志记录外,多个php.ini值会显著影响如何捕获错误以及PHP运行脚本的可用资源。下表显示了开发环境与生产环境的推荐值 — 这两种环境应始终不同。

php.ini设置 开发 生产 效果
display_errors 开启 关闭 在屏幕上显示或隐藏错误
log_errors 开启 开启 将错误写入日志文件
error_reporting E_ALL E_ALL & ~E_NOTICE 要捕获的错误类型
memory_limit 256M 128M–256M 每个脚本的最大RAM
max_execution_time 120 60 脚本可运行的最大秒数

在DirectAdmin上,导航到高级功能 → PHP配置以调整这些值,而无需直接访问服务器。

使用Query Monitor调试WordPress

对于WordPress网站,Query Monitor插件是最全面的实时调试工具 — 它读取的内容远不止PHP错误。激活后,WordPress管理区域的每个页面加载都会显示一个摘要栏,可以即时访问更深层的面板。

从WordPress插件目录搜索"Query Monitor"进行安装。在推送到面向公众的生产环境之前将其停用,因为调试栏对任何登录的管理员都可见。

保护PHP错误日志免遭公开访问

存储在 public_html 内的日志文件可能对任何知道URL的人都可访问。包含文件路径、数据库名称或堆栈跟踪的日志是攻击者的有用地图。三层保护将消除风险。

选项1 — 将日志移到public_html外(最佳)

error_log 指向Web根目录上方的目录:

error_log = /home/username/logs/php_errors.log

public_html 上方的文件无法通过HTTP访问,使这成为最有效的方法。

选项2 — 通过.htaccess阻止

如果日志必须保留在 public_html 内,在 .htaccess 中拒绝浏览器访问:

<FilesMatch "\.(log|txt)$">
    Order Allow,Deny
    Deny from all
</FilesMatch>

选项3 — 使用不易预测的文件名

将日志从 php_errors.log 重命名为类似 err_a8f3b2c.log 的名称。这使自动发现更困难,但永远不应替代上述选项。

总结:将日志移到public_html上方是最安全的方法。如果不可能,请将.htaccess阻止与不明显的文件名结合,并将日志文件权限设置为600,以便只有您的帐户可以读取它。

比较共享主机上的PHP调试工具

不同的调试工具适合不同的工作流程。下表可帮助您为您的情况选择正确的方法,而不会过度设计。

工具 最适合 优势 限制
PHP错误日志 所有PHP应用 无需安装;捕获所有错误 必须手动打开文件
WP_DEBUG_LOG WordPress 易于设置;无需更改php.ini 仅限WordPress
Query Monitor WordPress 浏览器中实时;查询+钩子+错误 必须在生产环境中停用
var_dump / error_log() 所有PHP应用 精确定位特定变量或行 部署前必须删除

具有完全配置访问权限的PHP主机

AsiaGB主机支持PHP 7.4 / 8.2 / 8.3,具有可自定义的php.ini、DirectAdmin控制面板和SSD存储。起价仅为500泰铢/年。

查看主机计划

查看泰国虚拟主机全部套餐 →