2017-03-06 168 views
1

我編寫了一個名爲「的download.php」到文件推送到客戶端PHP腳本,表現非常糟糕

$fd = fopen($path, "rb"); 
if ($fd === false) { 
    echo "404 file not found"; 
    return false; 
} 

Header("Content-type: image/png"); 

while (!feof($fd)) 
{ 
    $buf = fread($fd, 1024); 
    if ($buf === false) { 
     break; 
    } 
    echo $buf; 
} 

fclose($fd); 

當我在鉻試驗下載一個4M的圖像,它會消耗1.4s。 apache服務器在我的電腦上。如果我把圖像放在www /中並直接下載,那隻會消耗44ms。

我試圖增加fread的bufsize,但它只是提高性能。

+0

取而代之的閱讀和在一個循環輸出塊,嘗試簡單地使用readfile。 – CBroe

+0

@CBroe readfile會比fread好消耗643ms然後echo,但是仍然很長,而且readfile不支持部分下載,請問有沒有更好的方法? – yuanjianpeng

+0

消耗什麼......? – CBroe

回答

0

fpassthru($ FD)是一種更有效的方式來流的內容傳遞給PHP://輸出而不加載整個文件的內容到內存