Php passthru(“cat文件”)的性能
我在下载脚本中使用passthru(“cat filepath”)。我担心的是,它可能会占用大量服务器资源 在php中,直接链接公共目录中的文件和使用passthru(“cat filepath”)下载文件有什么区别 不要使用Php passthru(“cat文件”)的性能,php,performance,passthru,Php,Performance,Passthru,我在下载脚本中使用passthru(“cat filepath”)。我担心的是,它可能会占用大量服务器资源 在php中,直接链接公共目录中的文件和使用passthru(“cat filepath”)下载文件有什么区别 不要使用passthru()为此,您正在向CLI注入打开自己的大门,性能非常糟糕。存在就是为了这个 readfile($filepath); 与直接链接相比,通过PHP的开销很小,但我们通常谈论的是毫秒。但是,在使用readfile()时,浏览器将无法请求206部分,除非您对其进
passthru()
为此,您正在向CLI注入打开自己的大门,性能非常糟糕。存在就是为了这个
readfile($filepath);
与直接链接相比,通过PHP的开销很小,但我们通常谈论的是毫秒。但是,在使用readfile()
时,浏览器将无法请求206部分
,除非您对其进行编码支持或使用类似的方法
编辑:似乎您使用的是passthru()
,因为readfile()
显然不能正确处理>2GB的文件(我从未遇到过readfile()
的问题,事实上我只是用一个7.2GB的文件对它进行了测试,效果很好)。在这种情况下,至少要转义参数
function readfile_ext($filepath) {
if(!file_exists($filepath))
return false;
passthru('cat ' . escapeshellarg($filepath));
return true;
}
不要使用passthru()。存在就是为了这个
readfile($filepath);
与直接链接相比,通过PHP的开销很小,但我们通常谈论的是毫秒。但是,在使用readfile()
时,浏览器将无法请求206部分
,除非您对其进行编码支持或使用类似的方法
编辑:似乎您使用的是passthru()
,因为readfile()
显然不能正确处理>2GB的文件(我从未遇到过readfile()
的问题,事实上我只是用一个7.2GB的文件对它进行了测试,效果很好)。在这种情况下,至少要转义参数
function readfile_ext($filepath) {
if(!file_exists($filepath))
return false;
passthru('cat ' . escapeshellarg($filepath));
return true;
}
使用性能更好的PHP本机readfile('filepath')
,而不是passthru('cat filepath')
不过,这两种方法都比直接链接到文件要慢,因为PHP有一定的开销。使用PHP原生的readfile('filepath')
,而不是passthru('cat filepath')
,它具有更好的性能
不过,这两种方法都比直接链接到文件要慢,因为PHP有一定的开销
在php中,直接链接公共目录中的文件和使用passthru(“cat filepath”)下载文件有什么区别
不同之处在于,直接链接到文件不会调用PHP,而运行PHP脚本(该脚本反过来运行cat
)会导致调用PHP和cat
。这将占用适量的额外内存,但在大多数情况下不会导致服务器负载
我使用的是readfile(),但此函数不能用于大于2gb的文件
在这种情况下,您可能希望找到一个比通过PHP传递所有文件内容更好的解决方案。查看您选择的web服务器软件中的支持
在php中,直接链接公共目录中的文件和使用passthru(“cat filepath”)下载文件有什么区别
不同之处在于,直接链接到文件不会调用PHP,而运行PHP脚本(该脚本反过来运行cat
)会导致调用PHP和cat
。这将占用适量的额外内存,但在大多数情况下不会导致服务器负载
我使用的是readfile(),但此函数不能用于大于2gb的文件
在这种情况下,您可能希望找到一个比通过PHP传递所有文件内容更好的解决方案。查看您选择的web服务器软件中的支持。//我使用的是readfile(),但此函数不能用于大于2GB的文件。通过PHP提供2GB文件一开始就不是很理想。这里需要PHP吗?您的web服务器不能直接处理吗?//文件不能放在公共目录中。我把文件放在一个私有目录中。所以..我不能直接链接它们//我使用的是readfile(),但是这个函数不能用于大于2GB的文件。通过PHP提供2GB的文件一开始就不是很理想。这里需要PHP吗?您的web服务器不能直接处理吗?//文件不能放在公共目录中。我把文件放在一个私有目录中。所以..我不能直接链接它们。@Andrew Moore//请看我在deceze帖子上的评论。@Andrew Moore//谢谢你的建议。我将对变量进行转义。@Moon:请注意,readfile()
从未出现过2GB的问题。你从哪里读到的限制?你测试过吗?@Andrew Moore//我遇到一个大文件错误。我之前的问题@Andrew Moore//同样,这是fopen function doc.,但它似乎也适用于readfile。@Andrew Moore//请参阅我对deceze帖子的评论。@Andrew Moore//谢谢您的建议。我将对变量进行转义。@Moon:请注意,readfile()
从未出现过2GB的问题。你从哪里读到的限制?你测试过吗?@Andrew Moore//我遇到一个大文件错误。我前面的问题@Andrew Moore//同样,这是fopen函数文档,但它似乎也适用于readfile//谢谢你的建议。我在这里学到了一个新东西。X-Sendfile!我会找的。//还有……谢谢你的性能建议。我担心passthru会在服务器端造成大量负载//谢谢你的建议。我在这里学到了一个新东西。X-Sendfile!我会找的。//还有……谢谢你的性能建议。我担心passthru会在服务器端造成大量负载。