Windows 7 x64下PHP 7.2.2的CURLOPT_VERBOSE不生效问题求助
解决cURL VERBOSE模式无输出的问题
我太懂这种摸不着头脑的感觉了——明明照着文档加了CURLOPT_VERBOSE,结果啥调试输出都看不到!这问题在Windows环境下的PHP里挺常见的,原因很简单:cURL默认把VERBOSE的调试日志输出到STDERR,而Windows的PHP CLI环境不会默认把STDERR内容显示在控制台里。
给你两种快速解决的办法,选哪种都行:
方法1:把VERBOSE日志捕获到临时流再输出
这种方法能把调试内容存下来,方便你后续查看或者处理:
<?php // 创建一个临时流来存储VERBOSE日志 $verboseHandle = fopen('php://temp', 'w+'); $c = curl_init('https://www.google.com'); curl_setopt($c, CURLOPT_VERBOSE, 1); // 关键:把VERBOSE输出定向到我们的临时流 curl_setopt($c, CURLOPT_STDERR, $verboseHandle); curl_setopt($c, CURLOPT_POST, 1); curl_setopt($c, CURLOPT_POSTFIELDS, 'monkey=uncle&rhino=aunt'); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); $page = curl_exec($c); // 重置流指针到开头,读取日志内容 rewind($verboseHandle); $verboseLog = stream_get_contents($verboseHandle); fclose($verboseHandle); // 打印调试日志 echo "=== cURL Verbose Log ===\n"; echo $verboseLog; // 顺便检查下请求有没有错误 if (curl_errno($c)) { echo "\n=== cURL Error ===\n"; echo curl_error($c); } curl_close($c); ?>
方法2:直接把VERBOSE输出定向到控制台
如果只想快速看到输出,也可以直接把STDERR重定向到STDOUT:
<?php $c = curl_init('https://www.google.com'); curl_setopt($c, CURLOPT_VERBOSE, 1); // 把VERBOSE输出直接打到控制台 curl_setopt($c, CURLOPT_STDERR, fopen('php://stdout', 'w')); curl_setopt($c, CURLOPT_POST, 1); curl_setopt($c, CURLOPT_POSTFIELDS, 'monkey=uncle&rhino=aunt'); curl_setopt($c, CURLOPT_RETURNTRANSFER, 1); $page = curl_exec($c); curl_close($c); ?>
运行修改后的脚本,你就能看到完整的请求负载、响应头这些调试信息啦!
内容的提问来源于stack exchange,提问作者MonkeyZeus
相关产品推荐
相关产品推荐

