5

我正在尝试将来自 cURL 命中的信息记录到日志文件中,但我无法这样做,我使用 wamp 运行 Windows 并完全控制了机器中的所有用户,并且调用 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_FILECURLOPT_STDERR或者,但都没有帮助,也不确定我是否在这里出错了。任何有关调试的建议将不胜感激。

4

3 回答 3

5

注意:如果您尝试 curl 的 URL 重定向到另一个 URL,则将输出写入文件将失败。

请确保您还添加以下行 -

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

另外作为旁注,请确保关闭文件fclose()以确保文件完整。

于 2012-06-22T18:50:36.077 回答
4

如果您已添加fclose(),并进行了上述评论中列出的各种“小修复”,但仍然无法正常工作......那么我怀疑您看到的选项相互冲突:

  • CURLOPT_RETURNTRANSFER告诉 curl 返回响应作为调用的返回curl_exec()

  • CURLOPT_FILECURLOPT_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);
于 2012-06-22T20:39:23.693 回答
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.

于 2013-08-12T16:30:07.010 回答