![](/img/trans.png)
[英]PHP performance file_get_contents() vs readfile() and 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.