繁体   English   中英

无法使用curlopt_stderr和curlopt_file使用PHP cURL写入文件

[英]unable to write to file with PHP cURL with curlopt_stderr and curlopt_file

我正在尝试将信息从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_FILECURLOPT_STDERR但既没有帮助原因,也不确定我是否在这里出错了。 任何有关调试此建议的建议将不胜感激。

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

请确保您还添加以下行 -

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

另外,请注意,请确保使用fclose()关闭文件以确保文件完整。

如果你已经添加了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);

使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM