您好,登錄后才能下訂單哦!
小編給大家分享一下PHP下載大文件失敗并限制下載速度的案例分析,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!
1.問題:
PHP在使用readfile函數(shù)定義下載文件時候,文件不可以過大,否則會下載失敗,文件損壞且不報錯;
2.原因:
這個是因為readfile讀取文件的時候會把文件放入緩存,導(dǎo)致內(nèi)存溢出;
3.解決:分段下載,并限制下載速度;
<?php //設(shè)置文件最長執(zhí)行時間 set_time_limit(0); if (isset($_GET['filename']) && !empty($_GET['filename'])) { $file_name = $_GET['filename']; $file = __DIR__ . '/assets/' . $file_name; } else { echo 'what are your searching for?'; exit(); } if (file_exists($file) && is_file($file)) { $filesize = filesize($file); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Accept-Ranges: bytes'); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header('Content-Length: ' . $filesize); header('Content-Disposition: attachment; filename=' . $file_name); // 打開文件 $fp = fopen($file, 'rb'); // 設(shè)置指針位置 fseek($fp, 0); // 開啟緩沖區(qū) ob_start(); // 分段讀取文件 while (!feof($fp)) { $chunk_size = 1024 * 1024 * 2; // 2MB echo fread($fp, $chunk_size); ob_flush(); // 刷新PHP緩沖區(qū)到Web服務(wù)器 flush(); // 刷新Web服務(wù)器緩沖區(qū)到瀏覽器 sleep(1); // 每1秒 下載 2 MB } // 關(guān)閉緩沖區(qū) ob_end_clean(); fclose($fp); } else { echo 'file not exists or has been removed!'; } exit();
看完了這篇文章,相信你對“PHP下載大文件失敗并限制下載速度的案例分析”有了一定的了解,如果想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。