PHP passthrough慢

时间:2009-06-16 15:10:59

标签: php

由于各种原因,我需要在HTTP请求和磁盘上的文件之间播放中介。我的方法是填充标题然后执行readfile('/ path / to / file.jpg');

现在,一切正常,但它甚至会非常缓慢地返回中等大小的图像。

在发送标题后,有人能为我提供更有效的方式将文件流式传输到客户端吗?

注意:如果重要的话,它是共享托管环境中的Linux盒子

4 个答案:

答案 0 :(得分:3)

多个Web服务器允许外部脚本告诉他们这样做。 Apache上的X-Sendfile(使用mod_xsendfile)是一个。

简而言之,您发送的只是标题。特殊X-Sendfile标头指示Web服务器将命名文件作为响应正文发送。

答案 1 :(得分:0)

您可以从实施条件GET请求支持开始。

发送带有文件的“Last-Modified”标头,并在客户端使用“If-Modified-Since”请求文件时回复“304 Not Modified”,并且您看到该文件尚未被修改。一些明智的新鲜度信息(通过“Cache-Control”/“Expires”标题)也建议首先防止对未更改资源的重复请求。

这样,即使您发现自己无法对实际表现采取任何行动,至少可以改善感知性能。

答案 2 :(得分:0)

这实际上应该相当快。我们用大图像完成了这个没有问题。在输出可能会减慢过程的图像之前,您是否正在执行其他操作,例如计算图像上的某些元数据?

编辑: 您可能需要刷新输出并使用fread。 IE:

$fp = fopen($strFile, "rb");
//start buffered download
while(!feof($fp))
    {
    print(fread($fp,1024*16));
    flush();
    ob_flush();
    }
fclose($fp);

答案 3 :(得分:-2)

基本上你想建立一个服务器......这不是一件容易的事。

基于PHP的服务器有一个非常有希望的项目:Nanoweb

它是免费的,并且完全可扩展。