Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用带有curlopt_stderr和curlopt_文件的PHP cURL写入文件_Php_Logging_Curl - Fatal编程技术网

无法使用带有curlopt_stderr和curlopt_文件的PHP cURL写入文件

无法使用带有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

我正试图将卷曲命中的信息记录到日志文件中,但无法这样做, 我使用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);

日志文件打开时没有错误,my cURL返回success,但没有任何内容记录到该文件中。我使用了
CURLOPT_file
CURLOPT_STDERR
作为替代方法,但这两种方法都不能帮助找出原因,也不能确定我是否在此处出错。任何关于调试的建议都将不胜感激。

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

请确保同时添加以下行-

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

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

如果您添加了
fclose()
,并进行了上述注释中列出的各种“小修复”,但它仍然不起作用。。。然后我怀疑你看到了相互冲突的选择:

  • CURLOPT\u RETURNTRANSFER
    告诉curl将响应作为
    curl\u exec()调用的返回值返回

  • CURLOPT_FILE
    CURLOPT_STDERR
    告诉curl将响应(或错误输出)写入指定的文件句柄

看起来这些可能是相互排斥的。我建议您使用其中一种,但不能同时使用两种:

使用
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()
:)