欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP下載大文件失敗并限制下載速度的實(shí)例代碼

 更新時(shí)間:2019年05月10日 10:34:21   作者:洪志  
這篇文章主要介紹了PHP下載大文件失敗并限制下載速度的實(shí)例代碼,需要的朋友可以參考下

1.問(wèn)題:

PHP在使用readfile函數(shù)定義下載文件時(shí)候,文件不可以過(guò)大,否則會(huì)下載失敗,文件損壞且不報(bào)錯(cuò);

2.原因:

這個(gè)是因?yàn)閞eadfile讀取文件的時(shí)候會(huì)把文件放入緩存,導(dǎo)致內(nèi)存溢出;

3.解決:分段下載,并限制下載速度;

<?php
//設(shè)置文件最長(zhǎng)執(zhí)行時(shí)間
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);

  // 打開(kāi)文件
  $fp = fopen($file, 'rb');
  // 設(shè)置指針位置
  fseek($fp, 0);

  // 開(kāi)啟緩沖區(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();

總結(jié)

以上所述是小編給大家介紹的PHP下載大文件失敗并限制下載速度的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Yii框架引入coreseek分頁(yè)功能示例

    Yii框架引入coreseek分頁(yè)功能示例

    這篇文章主要介紹了Yii框架引入coreseek分頁(yè)功能,結(jié)合實(shí)例形式分析了Yii框架結(jié)合coreseek搜索進(jìn)行分頁(yè)的相關(guān)操作技巧,需要的朋友可以參考下
    2019-02-02
  • php支付寶手機(jī)網(wǎng)頁(yè)支付類實(shí)例

    php支付寶手機(jī)網(wǎng)頁(yè)支付類實(shí)例

    這篇文章主要介紹了php支付寶手機(jī)網(wǎng)頁(yè)支付類實(shí)例,是基于Yii框架使用的支付寶接口類文件,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Laravel5.1 框架Middleware中間件基本用法實(shí)例分析

    Laravel5.1 框架Middleware中間件基本用法實(shí)例分析

    這篇文章主要介紹了Laravel5.1 框架Middleware中間件基本用法,結(jié)合實(shí)例形式分析了laravel5.1框架Middleware中間件功能、創(chuàng)建、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-01-01
  • Laravel利用gulp如何構(gòu)建前端資源詳解

    Laravel利用gulp如何構(gòu)建前端資源詳解

    Gulp 是一個(gè)自動(dòng)化工具,前端開(kāi)發(fā)者可以使用它來(lái)處理常見(jiàn)任務(wù),下面這篇文章主要給大家介紹了關(guān)于Laravel利用gulp如何構(gòu)建前端資源的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2018-06-06
  • PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(九)

    PHP網(wǎng)頁(yè)游戲?qū)W習(xí)之Xnova(ogame)源碼解讀(九)

    這篇文章主要介紹了PHP網(wǎng)頁(yè)游戲Xnova(ogame)源碼解讀的艦隊(duì)相關(guān)函數(shù)部分,需要的朋友可以參考下
    2014-06-06
  • 我整理的PHP 7.0主要新特性

    我整理的PHP 7.0主要新特性

    截止到目前為止,PHP官方已經(jīng)發(fā)布了php7的RC5版本,預(yù)計(jì)在11月份左右會(huì)發(fā)布第一個(gè)正式版本!現(xiàn)在來(lái)說(shuō)php7的重大特性肯定已經(jīng)是定型了,不會(huì)再有什么變動(dòng)了。后續(xù)一些版本的迭代主要也就是修修bug,優(yōu)化之類的。下面就來(lái)說(shuō)話我們一直期待的php7.0新特征吧
    2016-01-01
  • PHP內(nèi)存緩存功能memcached示例

    PHP內(nèi)存緩存功能memcached示例

    這篇文章主要介紹了PHP內(nèi)存緩存功能memcached示例,簡(jiǎn)單的介紹了memcached,是php操作memcached的典型應(yīng)用,有需要的朋友可以來(lái)了解一下,
    2016-10-10
  • php的laravel框架快速集成微信登錄的方法

    php的laravel框架快速集成微信登錄的方法

    本文面向的是php語(yǔ)言laravel框架的用戶,介紹的是基于該框架實(shí)現(xiàn)的一個(gè)簡(jiǎn)易集成微信登錄的方法,需要的朋友可以參考下
    2016-12-12
  • php隨機(jī)輸出名人名言的代碼

    php隨機(jī)輸出名人名言的代碼

    正如你看到的“小談博客”標(biāo)題后面的名人名言一樣,每刷新一次就會(huì)隨機(jī)出現(xiàn)一條語(yǔ)句,把你喜歡的話放到一起,經(jīng)常出現(xiàn)在你眼前,給你溫暖的力量
    2012-10-10
  • thinkPHP使用pclzip打包備份mysql數(shù)據(jù)庫(kù)的方法

    thinkPHP使用pclzip打包備份mysql數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了thinkPHP使用pclzip打包備份mysql數(shù)據(jù)庫(kù)的方法,結(jié)合實(shí)例形式分析了thinkPHP使用pclzip操作壓縮文件的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04

最新評(píng)論