(Linux CLI PHP)捕获CURL';在执行期间将详细输出到文件
我刚刚注意到,如果运行一个使用curl的命令行php脚本,并且启用了CURLOPT_VERBOSE选项,则无法捕获输出 例如:(Linux CLI PHP)捕获CURL';在执行期间将详细输出到文件,php,linux,curl,command-line,Php,Linux,Curl,Command Line,我刚刚注意到,如果运行一个使用curl的命令行php脚本,并且启用了CURLOPT_VERBOSE选项,则无法捕获输出 例如: $php myscript.php > logfile.txt 2>&1 所有PHP输出都将进入日志文件,但是curl的输出仍然会出现在屏幕上 如何用curl输出捕获两个PHP输出 $ch = curl_init(); // Initialising cURL curl_setopt($ch, CURLOPT_VERBOSE, T
$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,或使用curloptu STDERR指定的文件 因此,为
CURLOPT\u STDERR
指定STDOUT
将起作用:
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, STDOUT);
原始答案:
检查您是否也设置了
CURLOPT\u RETURNTRANSFER
如果您正在寻找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();
我想我应该做一个实际的回答,而不仅仅是一个评论。 我刚意识到你想要所有的内容
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...
Haig Bedrosian建议使用输出缓冲区,但不是使用
ob\u end\u flush()
而是使用ob\u end\u clear()
insteadob不工作,这就是问题所在。在不修改第三方客户端的情况下,我们无法修改curl选项,因此我们正在寻找一种灵活的方法,在不需要详细/调试时隐藏此垃圾邮件信息。客户端不允许更改其默认选项。函数为ob\u end\u clean不清楚。但这不起作用(你说得对。它很干净。哈哈。这就是我累的时候会发生的事。我把它改了。但是我改成了用ob\u get\u flush()
)=P@GabrielAlack是的,对不起,我用正确的解决方案修正了我的答案。