繁体   English   中英

passthru(“ cat文件”)的性能

[英]performance of passthru(“cat file”)

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

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

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

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

我正在使用readfile(),但是此函数不能用于大于2GB的文件

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

请勿为此使用passthru() ,因为您正向CLI注入敞开大门,而性能却很糟糕。 readfile()仅用readfile()目的。

readfile($filepath);

与直接链接相比,通过PHP传递的开销很小,但是通常所说的是毫秒。 但是,使用readfile()时,浏览器将无法请求206 Partial ,除非您对此代码进行支持或使用类似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;
}

代替passthru('cat filepath') ,使用具有更好性能的PHP本机readfile('filepath')

但是,这两种方法都比直接直接链接到文件要慢,因为PHP具有一定的开销。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM