Я создаю сквозной кэш изображений и ищу способ записи потоков 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'))
Чтобы выгрузить все вопросы «зачем ты это делаешь»;Я получаю эти изображения из удаленного сервиса.Условия этого сервиса требуют от меня кэширования изображений локально.