【问题标题】:How to seek through a stream with file_get_contents?如何使用 file_get_contents 查找流?
【发布时间】:2013-03-15 14:44:02
【问题描述】:

我正在使用 PHP 来运行 Web 服务。其中一个 url 需要从 POST 正文中获取几张图片。我目前使用的是 fopen/fread 解决方案:

$size1 = intval($_REQUEST['img1']);
$size2 = intval($_REQUEST['img2']);
$sizeToRead = 4096;
$datas1 = null;
$datas2 = null;

$h = fopen('php://input','r+');
while($size1 > 0) {
    if($sizeToRead > $size1)
        $sizeToRead = $size1;

    $datas1 .= fread($h,$sizeToRead);
    $size1 -= $sizeToRead;
}
fclose($h);

file_put_contents('received1.png',$datas1);
//Same thing for the second image

这个解决方案工作正常,但我试图通过使用file_get_contents() 使其更具可读性:

file_put_contents('received1.png',file_get_contents('php://input',false,null,0,$size1));

但它给了我一个错误:

file_get_contents() 流不支持搜索
file_get_contents() 在流中寻找位置 21694 失败

这甚至可以在流中寻找吗?也许通过将第三个参数更改为其他参数?

如果没有,有没有办法让我的代码更优雅/高效?

谢谢。

【问题讨论】:

  • file_get_contents() 如何让任何东西更具可读性?

标签: php stream file-get-contents


【解决方案1】:

引用manual:

注意:使用 php://input 打开的流只能读取一次; 流不支持查找操作。但是,根据 SAPI 实现,可能会打开另一个 php://input 流并重新开始读取。这只有在请求正文数据已保存时才有可能。通常,这是 POST 请求的情况,但不是其他请求方法,例如 PUT 或 PROPFIND。

(我的重点)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 2013-02-04
    • 1970-01-01
    • 2016-03-15
    相关资源
    最近更新 更多