PHP请求日志记录实现

学习笔记作者:admin日期:2025-10-07点击:17

摘要:本文介绍了如何使用PHP代码将接收到的PUT请求信息(包括方法、头信息、请求体等)保存到指定的日志文件中,适用于开发调试和安全审计场景。

PHP请求日志记录实现

1. 概述

      本文提供了一个PHP脚本示例,用于将接收到的请求数据(如请求方法、请求头、请求体等)写入到名为 put.log 的日志文件中。该脚本特别适用于处理 PUT 请求,但也可以根据需求进行扩展以支持其他HTTP方法。

2. 功能说明

  • 获取请求方法(如 PUT、POST 等)
  • 获取请求头信息
  • 获取请求体内容
  • 获取客户端IP地址
  • 获取请求的URI路径
  • 记录当前时间
  • 将上述信息格式化为日志条目并写入 put.log

3. 示例代码

<?php
// 设置时区(可选)
date_default_timezone_set('Asia/Shanghai');

// 定义日志文件路径
$logFile = 'put.log';

// 获取请求方法
$method = $_SERVER['REQUEST_METHOD'];

// 只处理 PUT 请求(可根据需要修改)
if ($method === 'PUT') {
    // 获取请求头
    $headers = getallheaders();

    // 获取请求体内容
    $input = file_get_contents('php://input');

    // 获取客户端 IP
    $ip = $_SERVER['REMOTE_ADDR'] ?? 'unknown';

    // 获取请求的 URI
    $uri = $_SERVER['REQUEST_URI'] ?? 'unknown';

    // 获取当前时间
    $time = date('Y-m-d H:i:s');

    // 构建日志内容
    $logEntry = "------------------------\n";
    $logEntry .= "Time: $time\n";
    $logEntry .= "Method: $method\n";
    $logEntry .= "IP: $ip\n";
    $logEntry .= "URI: $uri\n";
    $logEntry .= "Headers:\n";
    foreach ($headers as $key => $value) {
        $logEntry .= "  $key: $value\n";
    }
    $logEntry .= "Body:\n$input\n";
    $logEntry .= "------------------------\n\n";

    // 写入日志文件
    file_put_contents($logFile, $logEntry, FILE_APPEND | LOCK_EX);
}

// 返回响应(可选)
http_response_code(200);
echo "Request logged.";
?>

4. 使用说明

  1. 将上述代码保存为 put_handler.php 文件。
  2. 将文件放置在 Web 服务器的可访问目录下(如 Apache 或 Nginx)。
  3. 通过工具如 curl 发送 PUT 请求测试:
curl -X PUT \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer token123" \
  -d '{"name": "test", "value": 123}' \
  http://your-domain.com/put_handler.php
  1. 检查同目录下的 put.log 文件,确认是否成功记录了请求信息。

5. 日志示例

------------------------
Time: 2024-04-05 10:30:22
Method: PUT
IP: 127.0.0.1
URI: /put_handler.php
Headers:
  Content-Type: application/json
  Authorization: Bearer token123
Body:
{"name": "test", "value": 123}
------------------------

6. 安全建议

  • 确保 put.log 不会被 Web 服务器直接访问(可以放在 webroot 外或通过 .htaccess 禁止访问)。
  • 在生产环境中,建议添加身份验证或限制访问 IP。
  • 根据需求决定是否记录敏感信息(如 Authorization 头)。

7. 扩展性

      如果希望支持 POSTPATCH 等其他 HTTP 方法,只需修改判断条件即可。

上一篇