簡體   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