(Linux CLI PHP) Получение подробного вывода CURL в файл во время выполнения

Я только что заметил, что если вы запускаете 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

4

Решение

На самом деле мой первый ответ неверен. Страница руководства cURL гласит:

URLOPT_VERBOSE TRUE для вывода подробной информации. Записывает вывод в
STDERR или файл, указанный с помощью CURLOPT_STDERR.

Так что уточнение STDOUT за CURLOPT_STDERR буду работать:

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

Оригинальный ответ:

Проверьте, что вы также устанавливаете CURLOPT_RETURNTRANSFER,

2

Другие решения

Я думаю, что я должен сделать реальный ответ, а не просто комментарий.
Я только что понял, что вы хотите все содержимое.

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...
0

Если вы ищете решение 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();
-1