我正在尝试将来自cURL命中的信息记录到日志文件中,但我无法这样做, 我运行带有wamp的窗口并完全控制机器中的所有用户,调用cURL的日志和php文件位于此测试的同一目录中。我使用了以下代码:
$session = curl_init();
$logfh = fopen("my_log.log", 'a+');
if ($logfh) {
print "Opened the log file without errors";
}
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// Optional settings for debugging
curl_setopt($session, CURLOPT_VERBOSE, true);
curl_setopt($session, CURLOPT_FILE, $logfh); // logs curl messages
// curl_setopt($session, CURLOPT_STDERR, $logfh); // logs curl messages
curl_exec($session);
curl_close($session);
日志文件打开时没有错误,我的cURL返回成功,但没有记录到文件中。我曾经使用过CURLOPT_FILE
和CURLOPT_STDERR
但是既没有帮助原因也不确定我是否有所收获这里错了。任何有关调试的建议都将受到赞赏。
答案 0 :(得分:5)
注意:如果您尝试卷曲的URL重定向到另一个URL,则将输出写入文件将失败。
请确保您还添加以下行 -
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
另外,请注意,请确保使用fclose()
关闭文件,以确保文件已完整。
答案 1 :(得分:4)
如果您添加了fclose()
,并在上面的评论中列出了各种“小修正”,但它仍然无效...那么我怀疑您看到了相互矛盾的选项:
CURLOPT_RETURNTRANSFER
告诉curl将响应作为curl_exec()
来电的返回值返回。
CURLOPT_FILE
和CURLOPT_STDERR
告诉curl将响应(或错误输出)写入指定的文件句柄。
似乎这些可能是相互排斥的。我建议您使用其中一种,但不能同时使用两者:
使用CURLOPT_RETURNTRANSFER
,如下所示:
$session = curl_init();
$logfh = fopen("my_log.log", 'a+');
if ($logfh !== false) {
print "Opened the log file without errors";
}
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($session, CURLOPT_VERBOSE, true);
$result = curl_exec($session);
curl_close($session);
fwrite($logfh, $result);
fclose($logfh);
或使用CURLOPT_FILE
,如下所示:
$session = curl_init();
$logfh = fopen("my_log.log", 'a+');
if ($logfh !== false) {
print "Opened the log file without errors";
}
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_FILE, $logfh);
curl_setopt($session, CURLOPT_VERBOSE, true);
curl_exec($session);
curl_close($session);
fclose($logfh);
答案 2 :(得分:0)
使用CURLINFO_HEADER_OUT
= true时也可能存在问题。我想CURLINFO_VERBOSE
中有一些东西使用这个选项并且只是压制VERBOSE信息......
curl_setopt($ch, CURLINFO_HEADER_OUT, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, fopen('log.log', 'a+'));
提一下,你可以使用:
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, fopen('log.log', 'a+'));
如果要将输出记录到文件中,仍然可以返回curl_exec
。