passthru的表现(“猫文件”)

时间:2011-06-24 07:04:07

标签: php performance passthru

我在下载脚本中使用passthru(“cat filepath”)。我担心的是它可能会使用大量的服务器资源。

在公共目录中直接链接文件和在php中使用passthru(“cat filepath”)下载文件有什么区别?

3 个答案:

答案 0 :(得分:4)

  

在公共目录中直接链接文件和在php中使用passthru(“cat filepath”)下载文件有什么区别?

不同之处在于,直接链接到文件不会调用PHP,而运行PHP脚本又会运行cat会导致PHP和cat被调用。这将占用适量的额外内存,但在大多数情况下不会导致服务器负载

  

我使用的是readfile(),但此功能不能用于大于2gb的文件

在这种情况下,您可能希望找到比通过PHP传递所有文件内容更好的解决方案。在您选择的Web服务器软件中查看X-Sendfile支持。

答案 1 :(得分:3)

不要使用passthru(),你要打开 CLI注入并且性能很糟糕。 readfile()仅为此而存在。

readfile($filepath);

与直接链接相比,通过PHP时会产生很小的开销,但我们通常会谈到毫秒。但是,在使用206 Partial时,浏览器将无法请求readfile(),除非您为其编写代码或使用PEAR::HTTP_Download之类的内容。

编辑:似乎您使用的是passthru(),因为显然readfile()无法正确处理> 2GB文件(我从未遇到readfile()的问题,事实上,我只是用7.2 GB文件测试它,它工作正常)。在这种情况下,至少要转义参数。

function readfile_ext($filepath) {
  if(!file_exists($filepath))
    return false;

   passthru('cat ' . escapeshellarg($filepath));
   return true;
}

答案 2 :(得分:2)

而不是passthru('cat filepath'),使用具有更好性能的PHP原生readfile('filepath')

这两种方法都比简单地直接链接到文件慢,因为PHP有​​一定的开销。