![](/img/trans.png)
[英]php Curl confilict CURLOPT_FILE and CURLOPT_RETURNTRANSFER in docker
[英]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_FILE
和CURLOPT_STDERR
但既没有帮助原因,也不确定我是否在这里出错了。 任何有关调试此建议的建议将不胜感激。
注意:如果您尝试卷曲的URL重定向到另一个URL,则将输出写入文件将失败。
请确保您还添加以下行 -
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
另外,请注意,请确保使用fclose()
关闭文件以确保文件完整。
如果你已经添加了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);
使用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.