PHP流读取:如果我将结果写入较大文件中的字符串

时间:2015-07-21 08:17:53

标签: php

全新的PHP,并且很难实现。我试图获得服务器响应并将内容放入字符串中。听起来很简单,但它只适用于非常短的内容(内容通常是图像)。

解析很简单:

    while (!feof($fp))
    {
        $data = fread($fp, 1024);
        //echo $data;
        $this->response_body .= $data;
    }

现在,令人费解的是,如果我取消注释那个回声,那事实际上是有效的($response_body似乎仍然没有被填满,但至少这个东西正确终止并没有&#39 ; t超时)。如果我不回复内容,那么永远不会达到eof并且事情会超时。

所有这一切告诉我,当前写入response_body(一个之前只在代码中使用的变量是($response_body = ""),而不是从流中读取时,似乎存在问题,而且我很明显我不知道回声到底是什么。顺便说一句,如果我使用fgets()也会发生同样的事情。

所以第一个问题是,如何在没有超时的情况下获取对象中的整个内容? 接下来的问题是,如何将该内容放入对首先调用代码的请求的回复中(如上所述,内容通常描述一个图像。如果我能做一个{那将是非常好的{1}}标记并让src调用我的脚本)?

如果没有额外的库可以实现这一点也很好,但如果有必要,我可以在服务器上安装扩展。我只是没有多少经验。

其他信息: 该脚本应该转发从另一台服务器获取的图像。该服务器不会释放URL并动态处理图像以使像素的某些区域像素化。它也不会直接将图像发送到浏览器。因此,我的脚本应该接受浏览器请求,修改它,将其发送到图像服务器,在回复中接收图像并再次将其转发到浏览器。我最初使用this class作为请求,这是问题发生的地方。

1 个答案:

答案 0 :(得分:1)

问题确实是块编码。块编码不发送EOF,显然你也永远不会得到一个空字符串。我不确定实际发生了什么,但是在块编码的流上调用fgets或fread将永远不会返回false并且永远不会返回空字符串。解决方案是跟上块并以0块大小终止。任何其他检查显然都无法可靠地运作。