我只是注意到,如果你运行一个命令行的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();