Я только что заметил, что если вы запускаете php-скрипт командной строки, который использует curl с включенной опцией CURLOPT_VERBOSE, вы не сможете захватить вывод …
Пример:
$php myscript.php > logfile.txt 2>&1
Весь вывод PHP будет идти в лог-файл, но вывод curl по-прежнему попадет на экран.
Как я могу захватить оба вывода PHP с выводом curl?
$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 и перезаписывает файл журнала своим собственным выводом. Weird!
Изменить 2:
Это работает
$php myscript.php >> logfile.txt 2>&1
На самом деле мой первый ответ неверен. Страница руководства cURL гласит:
URLOPT_VERBOSE TRUE для вывода подробной информации. Записывает вывод в
STDERR или файл, указанный с помощью CURLOPT_STDERR.
Так что уточнение STDOUT
за CURLOPT_STDERR
буду работать:
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();