2012-10-09 72 views
0

我有一個使用readfile()下載大文件(1.3gb)的腳本。ModX Evo:snippet中的PHP readfile()?

如果我創建一個只帶有腳本的.php頁面,它可以正常工作,但是如果我將同一個腳本放在一個Snippet中並將其放在頁面上,則不會發生任何事情。

是ModX阻止下載的一些方法嗎?任何建議將非常感謝!

編輯代碼:

$file = $_SERVER['DOCUMENT_ROOT']."/movie.mov"; 
if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
}; 
+0

不應在'header()'調用之前調用'ob_clean();'**嗎? – Niloct

+0

@Niloct也許,但上面是PHP文檔中的示例 – MeltingDog

+0

Modx片段不能[輸出](http://rtfm.modx.com/display/revolution20/Snippets#Snippets-SimpleExample)信息,只有'return數據。 'flush()'可能是罪魁禍首。 – Niloct

回答

0

鏌鋣確實有一個最大文件大小設置[最大上載大小upload_maxsize]但這是文件管理器。我懷疑這是你的問題。

讓我們來看看腳本和錯誤日誌。

UPDATE

只是測試你的小片段出[用微小的改動] - 它工作正常。

$base_path = $modx->config['base_path']; 

$movie = 'frankenweenie-mrwhiskers_r640s.mov'; 

$file = $base_path.$movie; 


if (file_exists($file)) { 

    echo 'file exists '.filesize($file); 

    header('Content-Description: File Transfer'); 
    header('Content-Type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename='.basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Cache-Control: must-revalidate'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    ob_clean(); 
    flush(); 
    readfile($file); 

    return true; 

}else{ 

    echo 'file does not exist'; 

    return false; 

} 

使用$ modx->配置[「BASE_PATH」]是不是你的問題,它的工作使用服務器瓦爾還有,這只是一個良好的習慣。就像返回的真/假modx希望它的代碼片段能夠返回true,false或者$ output一樣...也不是你沒有的問題。

開始看着你的PHP設置,我想可能是內存限制可能是問題。檢查php文檔&看它是否需要有足夠的內存來讀取大小的文件。 [儘管它表示'大小沒有關係']

啓用錯誤記錄在腳本本身&檢查服務器錯誤日誌。

它適用於小文件?然後看這裏:PHP readfile() and large downloads

祝你好運!

+0

上面加了,沒有錯誤日誌... – MeltingDog