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

如何在使用php-fpm的本地开发环境中记录出站服务器请求

本地php-fpm环境出站请求日志记录方案

以下是三种不同适用场景的可行方案,可根据实际需求选择:

方案1:PHP层面Hook所有出站请求函数

仅记录PHP代码发起的请求,无需修改系统配置,适配性最高:

  • 在本地php.ini中配置auto_prepend_file参数,指定一个自定义前置PHP文件,该文件会在所有PHP脚本执行前自动加载
  • 在前置文件中重写所有网络请求相关函数,统一写入日志即可,核心逻辑示例:
<?php
// 通用日志记录方法
function log_outbound_req($url, $method = 'GET', $reqHeaders = [], $reqBody = '', $resp = '') {
    $logData = [
        'time' => date('Y-m-d H:i:s'),
        'url' => $url,
        'method' => $method,
        'req_headers' => $reqHeaders,
        'req_body' => $reqBody,
        'response' => $resp,
        'fpm_pid' => getmypid()
    ];
    file_put_contents('/你的本地日志路径/outbound_req.log', json_encode($logData, JSON_UNESCAPED_UNICODE).PHP_EOL, FILE_APPEND);
}

// 重写curl_exec示例
if (!function_exists('custom_curl_exec')) {
    function custom_curl_exec($ch) {
        $url = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
        $method = curl_getinfo($ch, CURLINFO_HTTP_METHOD);
        $reqHeaders = curl_getinfo($ch, CURLINFO_HEADER_OUT);
        $resp = original_curl_exec($ch);
        log_outbound_req($url, $method, $reqHeaders, '', $resp);
        return $resp;
    }
    rename_function('curl_exec', 'original_curl_exec');
    rename_function('custom_curl_exec', 'curl_exec');
}
  • 注意:函数重写需要提前安装runkit或apd扩展,本地开发环境安装无额外影响,除curl外可按相同逻辑重写file_get_contents、fsockopen等所有发起网络请求的函数。

方案2:系统层面抓包全量记录出站流量

可捕获所有进程的出站请求(含PHP以外的其他服务发起的请求),无需修改PHP代码:

  • 用tcpdump直接抓包存为pcap文件后续分析,命令示例:
    tcpdump -i any dst port 80 or dst port 443 -w /你的本地日志路径/outbound.pcap
  • 如需直接输出可读日志,可用tshark实时解析抓包结果:
    tshark -i any -T fields -e frame.time -e http.request.method -e http.host -e http.request.full_uri -e http.response.code -E separator=, >> /你的本地日志路径/outbound.log
  • 如需记录HTTPS请求的明文内容,可本地启动mitmproxy代理,将PHP全局代理指向mitmproxy端口,同时把mitmproxy的根证书加入本地系统/PHP信任库,启动时加--set logfile=/你的本地日志路径/outbound.log参数即可自动记录所有请求的明文头、请求体、响应内容。

方案3:用扩展追踪PHP函数调用

无需单独做请求适配,适合临时排查问题场景:
本地安装xdebug扩展,在php.ini中添加以下配置即可记录所有函数调用日志,可从日志中筛选所有网络请求相关的函数调用及参数:

xdebug.mode = trace
xdebug.trace_output_dir = /你的本地日志路径/php_trace
xdebug.trace_format = 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 20:00:04