Php 将PSR-7流写入文件

Php 将PSR-7流写入文件,php,stream,psr-7,Php,Stream,Psr 7,我正在构建一个直通式图像缓存,并且正在寻找一种将PSR-7流写入服务器上文件的方法。文档并没有非常清楚地说明如何做到这一点(它主要关注的是服务文件,而不是编写文件) 我目前的最大努力是使用$stream->detach(),这并不理想(因为它会破坏底层流,然后我无法将其返回给用户)。有更好的方法吗 /*@var GuzzleHttp\Client$httpClient*/ $response=$httpClient->request( “得到”https://example.com/image.

我正在构建一个直通式图像缓存,并且正在寻找一种将PSR-7流写入服务器上文件的方法。文档并没有非常清楚地说明如何做到这一点(它主要关注的是服务文件,而不是编写文件)

我目前的最大努力是使用
$stream->detach()
,这并不理想(因为它会破坏底层流,然后我无法将其返回给用户)。有更好的方法吗

/*@var GuzzleHttp\Client$httpClient*/
$response=$httpClient->request(
“得到”https://example.com/image.png'
);
//验证响应等。
$stream=$response->getBody();
$stream->isReadable();//现在是真的
$cachePath='/path/to/local/cache/unique name.png';
$writeHandle=fopen($cachePath,'w');
流\u复制\u到\u流($stream->detach(),$writeHandle);
$stream->isReadable();//现在由于分离()而为false
//为了提供数据,我需要创建一个新的流
//根据我刚刚创建的图像
返回新的GuzzleHttp\Psr7\Stream(fopen($cachePath,'rb'))

抢先回答所有“你为什么要这样做”的问题;我从远程服务获取这些图像。该服务的条款要求我在本地缓存图像。

我发现Guzzle有一个。检查代码。也许有帮助。也检查Zend Diactoros。。。问题:将
$stream
的内容作为字符串读取并将其写入
$writeHandle
中是否是有效的解决方案?我现在可能问了你一个错误的问题,但最好是问而不是不试。干杯,我来看看笑声。我当然可以将字符串内容写入文件中,但在应用程序的逻辑流程中,有一个分支返回缓存图像的url,而不是图像数据,因此这种方式对我的应用程序来说效率略高。我发现Guzzle有一个。检查代码。也许有帮助。也检查Zend Diactoros。。。问题:将
$stream
的内容作为字符串读取并将其写入
$writeHandle
中是否是有效的解决方案?我现在可能问了你一个错误的问题,但最好是问而不是不试。干杯,我来看看笑声。我当然可以将字符串内容写入文件,但在应用程序的逻辑流程中,有一个分支返回缓存图像的url,而不是图像数据,因此这种方式对我的应用程序来说稍微更有效。