You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将访客访问的URL打印记录到PHP error_log错误日志中

PHP error_log 记录访客原始访问URL实现方法

PHP默认错误日志仅会记录触发错误的具体脚本路径,多脚本嵌套引入生成页面的场景下,无法追溯用户最初发起请求的入口URI,可以根据自己的环境选择以下方案实现:

方案1:修改php.ini全局配置(全站点生效,PHP 7.3+推荐)

PHP 7.3及以上版本原生支持自定义错误日志格式,直接修改配置即可自动注入请求URI,不需要改动业务代码:

  • 找到对应运行模式的php.ini文件:PHP-FPM环境常见路径为/etc/php/{版本号}/fpm/php.ini,Apache mod_php环境常见路径为/etc/php/{版本号}/apache2/php.ini
  • 找到error_log_format配置项,修改为包含REQUEST_URI环境变量的格式,参考配置如下:
error_log_format = "[%t] [%l] [pid %P] [client %a] Request URI: %{REQUEST_URI}e  Error: %m in %f on line %d"

配置项占位符说明:

  • %{REQUEST_URI}e:读取服务器传递的原始请求URI,即访客最初访问的页面地址
  • %m:错误具体信息
  • %f:触发错误的脚本路径
  • %d:错误所在行号
  • 保存配置后重启PHP-FPM或Apache服务,后续生成的错误日志会自动携带原始访问URL。

方案2:自定义错误处理器(兼容全版本PHP,无需修改服务端配置)

如果使用的是PHP 7.2及以下版本,或是没有服务器配置权限,可以在项目公共入口文件(所有请求都会加载的公共配置文件、框架入口文件)头部注册自定义错误处理逻辑,手动将请求URI写入日志:

<?php
// 放在公共加载文件的最顶部,保证所有请求都能执行到这段逻辑
function write_custom_error_log(int $errno, string $errstr, string $errfile, int $errline): bool
{
    $requestUri = $_SERVER['REQUEST_URI'] ?? 'cli runtime';
    $logContent = sprintf(
        "[%s] Level: %d | Msg: %s | File: %s | Line: %d | Original URI: %s\n",
        date('Y-m-d H:i:s'),
        $errno,
        $errstr,
        $errfile,
        $errline,
        $requestUri
    );
    // 日志写入PHP默认配置的error_log路径,也可以自行指定独立日志文件路径
    error_log($logContent, 0);
    // 返回false则继续执行PHP原生错误处理逻辑,返回true则跳过原生处理
    return false;
}
set_error_handler('write_custom_error_log');

// 捕获Fatal Error、语法错误等set_error_handler无法拦截的致命级错误
register_shutdown_function(function () {
    $lastError = error_get_last();
    if ($lastError && in_array($lastError['type'], [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR])) {
        write_custom_error_log($lastError['type'], $lastError['message'], $lastError['file'], $lastError['line']);
    }
});

部署注意事项

  • 如果使用Nginx做反向代理或URL重写,需要确认fastcgi配置中正确传递了原始请求URI,否则日志中记录的会是重写后的内部脚本路径,确保fastcgi_params配置中包含以下行:
fastcgi_param REQUEST_URI $request_uri;
  • 命令行(CLI)模式下运行PHP脚本无HTTP请求上下文,日志中会标记为cli runtime,不会产生异常脏数据。

内容的提问来源于stack exchange,提问作者MastaP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:39:17