【问题标题】:PHP readfile/fgets/fread causes multiple requests to serverPHP readfile/fgets/fread 导致对服务器的多个请求
【发布时间】:2012-09-25 19:00:17
【问题描述】:

我正在尝试使用 PHP 代理通过 Apache / Nginx 流式传输 MP4 文件以进行身份​​验证。我已经实现了字节范围来为 iOS 流式传输,如下所述:http://mobiforge.com/developing/story/content-delivery-mobile-devices。这在 Chrome 和 Safari 中工作得非常好,但是.... 真正奇怪的是,如果我监控服务器对 php 页面的请求,浏览器中的每个页面加载都会发生其中三个。这是 Chrome 的检查器的屏幕截图(直接进入 PHP 代理页面):

如您所见,第一个被取消,第二个保持等待状态,第三个有效。同样,该文件在浏览器中播放。我尝试了其他读取文件的方法(readfile、fgets、fread 等),结果相同。是什么导致了这三个请求,我怎样才能获得一个工作请求?

【问题讨论】:

    标签: php apache readfile fread fgets


    【解决方案1】:

    不确定这是否能回答您的问题,但使用 PHP 提供大型二进制文件并不是正确的做法。

    最好让 PHP 只处理身份验证,并将文件引用传递给 Web 服务器进行服务,从而释放资源。

    另请参阅:Caching HTTP responses when they are dynamically created by PHP

    它更详细地描述了我建议做的事情。

    【讨论】:

    • 我对这种方法很感兴趣,但是您知道它是否适用于流式传输文件吗?也就是说,它是否支持 HTTP_RANGE / HTTP/1.1 206 Partial Content 以便用户可以搜索到内容中的特定点?
    【解决方案2】:

    第一个请求是针对第一个字节范围的,预加载文件。浏览器下载指定数量后取消请求。

    第二个我不确定...

    第三个是当你真正开始播放媒体文件时,它会请求并下载完整的东西。

    【讨论】:

    • 嗯。所以没有办法将请求减少到一个。有趣的。感谢您的信息。
    猜你喜欢
    • 2011-03-08
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多