@topuserman

GuzzleHttp, как записать информацию дебага в переменную?

Используя для REST-клиента библиотеку GuzzleHttp.

Написал свой клаcс (wrapper) для клиента. Теперь появилась необходимость реализовать режим отладки (метод получения информации отладки).

У этой библиотеки есть параметр 'debug' => true, который можно передать в конструктор.

В документации про этот параметр написано следующее:

Set to true or set to a PHP stream returned by fopen() to enable debug output with the handler used to send a request. For example, when using cURL to transfer requests, cURL's verbose of CURLOPT_VERBOSE will be emitted. When using the PHP stream wrapper, stream wrapper notifications will be emitted. If set to true, the output is written to PHP's STDOUT. If a PHP stream is provided, output is written to the stream.

Types

bool
fopen() resource


Т.е. вывод дебага будет на экран (через поток STDOUT).
Либо можно передать хендл на файл, куда будут записываться данные дебага.

Меня вариант с STDOUT и выводом в файл не устраивает.
Мне нужно значение записать в переменную.
Есть ли какие-тов арианты это сделать, не записывая в файли потом считывая оттуда?

Вероятно, возможно каким-то свой протокол потока использовать?
на подобии такого: fopen("myWrapper://") потом через fscanf считать,
может это можно как-то применить, только не пойму как правильно это сделать? И возможно, у библиотеки GuzzleHttp уже есть что-то подобное? Видел у них есть класс StreamWrapper .

Может кто-то работал с этой библиотекой и знает как решить вопрос?
  • Вопрос задан
  • 208 просмотров
Решения вопроса 1
TommyV888
@TommyV888 Куратор тега PHP
-
Создайте 'php://memory' и передайте его. Если данные не превысят 2Мб, они как любая переменная будут находится в оперативной памяти, если превысят то под них будет создан временный файл.
$debug = fopen('php://memory', 'r+');
...
rewind($debug );
$log = stream_get_contents($debug);

P.S. Есть вероятность сломать скрипт, если лог окажется слишком большим.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы