无法使用带有curlopt_stderr和curlopt_文件的PHP cURL写入文件
我正试图将卷曲命中的信息记录到日志文件中,但无法这样做, 我使用wamp运行windows,并对机器中的所有用户进行了完全控制,并且调用cURL的日志和php文件位于同一目录中,用于此测试。我使用了以下代码:无法使用带有curlopt_stderr和curlopt_文件的PHP cURL写入文件,php,logging,curl,Php,Logging,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, C
$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);
日志文件打开时没有错误,my cURL返回success,但没有任何内容记录到该文件中。我使用了
CURLOPT_file
和CURLOPT_STDERR
作为替代方法,但这两种方法都不能帮助找出原因,也不能确定我是否在此处出错。任何关于调试的建议都将不胜感激。注意:如果您试图卷曲的URL重定向到另一个URL,那么将输出写入文件将失败
请确保同时添加以下行-
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
另外,作为旁注,请确保使用
fclose()
关闭文件,以确保文件完整。如果您添加了fclose()
,并进行了上述注释中列出的各种“小修复”,但它仍然不起作用。。。然后我怀疑你看到了相互冲突的选择:
告诉curl将响应作为CURLOPT\u RETURNTRANSFER
curl\u exec()调用的返回值返回
和CURLOPT_FILE
告诉curl将响应(或错误输出)写入指定的文件句柄CURLOPT_STDERR
CURLOPT\u 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);
$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);
或者使用CURLOPT_文件
,如下所示:
$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);
$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\u HEADER\u OUT
=true时也可能出现问题。我想在CURLINFO\u 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\u exec
,我看不到您对的调用。您的示例中缺少什么内容吗?您忘记了$session=curl_init()
@Lee觉得这些很明显,因为我指定curl返回成功(200),但编辑了问题检查curl\u exec()
的返回值,例如$status=curl\u exec($session);如果(!$session)死亡(curl_错误($session))
如果您在同一脚本中使用该文件,请确保使用fclose关闭该文件,然后访问它,否则它将是一个不完整的文件感谢您的响应,我已经设置了CURLOPT\u FOLLOWLOCATION
和CURLOPT\u MAXREDIRS
,但是尚未完成fclose()
。。。我会尝试一下的非常感谢你,它是fclose()
:)