Запись потоков PSR-7 в файл - PullRequest
0 голосов
/ 01 апреля 2019

Я создаю сквозной кэш изображений и ищу способ записи потоков PSR-7 в файлы на сервере.В документации не совсем понятно, как это сделать (она в основном фокусируется на обслуживании файлов, а не на их записи).

В настоящее время я стараюсь использовать $stream->detach(), что не идеально (так как уничтожаетосновной поток, который я затем не могу вернуть пользователю).Есть ли лучший способ сделать это?

/* @var GuzzleHttp\Client $httpClient */
$response = $httpClient->request(
  'GET', 'https://example.com/image.png'
);

// Validate response, etc.

$stream = $response->getBody();

$stream->isReadable(); // now true

$cachePath = '/path/to/local/cache/unique-name.png';

$writeHandle = fopen($cachePath, 'w');
stream_copy_to_stream($stream->detach(), $writeHandle);

$stream->isReadable(); // now false due to detach()

// To serve the data I'd need to create a new stream 
// from the image I've just created
return new GuzzleHttp\Psr7\Stream(fopen($cachePath, 'rb'))

Чтобы выгрузить все вопросы «зачем ты это делаешь»;Я получаю эти изображения из удаленного сервиса.Условия этого сервиса требуют от меня кэширования изображений локально.

...