(Linux CLI PHP)在执行期间将CURL的详细输出捕获到文件

我只是注意到,如果你运行一个命令行的PHP脚本,利用curl与CURLOPT_VERBOSE选项上,你不能捕获输出…

例:

$php myscript.php > logfile.txt 2>&1 

所有的PHP输出都会进入日志文件,但是curl的输出仍然会显示在屏幕上。

我怎样才能用curl输出捕获两个PHP输出?

  $ch = curl_init(); // Initialising cURL curl_setopt($ch, CURLOPT_VERBOSE, TRUE); curl_setopt($ch, CURLOPT_USERAGENT, $this->agentString); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $data = curl_exec($ch); curl_close($ch); 

编辑:

添加线

 curl_setopt($ch, CURLOPT_STDERR, STDOUT); 

似乎要做的伎俩。 然而,现在似乎curl输出与php的输出冲突,并用自己的输出覆盖日志文件。 奇怪的!

编辑2:

这工作

  $php myscript.php >> logfile.txt 2>&1 

其实,我的第一个答案是错的。 cURL的手册页说:

URLOPT_VERBOSE TRUE输出详细信息。 将输出写入STDERR,或使用CURLOPT_STDERR指定的文件。

所以为CURLOPT_STDERR指定STDOUT将会起作用:

 curl_setopt($ch, CURLOPT_VERBOSE, true); curl_setopt($ch, CURLOPT_STDERR, STDOUT); 

原始答案

检查你是否也设置了CURLOPT_RETURNTRANSFER

我想我应该做一个实际的答案,而不是只是一个评论。 我只是意识到你想要的所有内容。

 ob_start() $ch = curl_init(); // Initialising cURL curl_setopt($ch, CURLOPT_VERBOSE, TRUE); curl_setopt($ch, CURLOPT_USERAGENT, $this->agentString); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $data = curl_exec($ch); curl_close($ch); // What ever other functions you want run... // discard content: ob_end_clean() $extra_curl_stuff = ob_get_flush(); // save $extra_curl_stuff to your logfile too... 

如果你正在寻找一个PHP解决方案,你可以使用CURL选项:

 ... // this returns the data instead of outputing it curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // output the data echo curl_exec($ch); 

或者你可以缓冲和刷新输出:

 // turn on output buffering ob_start(); // do some curl operations here // flush and turn off buffering ob_end_flush();