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. 使用说明
- 将上述代码保存为
put_handler.php
文件。 - 将文件放置在 Web 服务器的可访问目录下(如 Apache 或 Nginx)。
- 通过工具如
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
- 检查同目录下的
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. 扩展性
如果希望支持 POST
、PATCH
等其他 HTTP 方法,只需修改判断条件即可。