最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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)文章

  • PHP模擬post提交數(shù)據(jù)方法匯總

    PHP模擬post提交數(shù)據(jù)方法匯總

    使用php模擬post傳值雖然在日常生活中用到的不是很多,但是在某些場(chǎng)合還是經(jīng)常用到的。下面腳本之家小編給大家整理了三種php模擬post傳值的方法,file_get_contents、curl和socket,需要的朋友參考下
    2016-02-02
  • PHP獲取真實(shí)IP及IP模擬方法解析

    PHP獲取真實(shí)IP及IP模擬方法解析

    這篇文章主要介紹了PHP獲取真實(shí)IP及IP模擬方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • PHP中使用smarty生成靜態(tài)文件的例子

    PHP中使用smarty生成靜態(tài)文件的例子

    這篇文章主要介紹了PHP中使用smarty生成靜態(tài)文件的例子,需要的朋友可以參考下
    2014-04-04
  • 搭建PhpStorm+PhpStudy開(kāi)發(fā)環(huán)境的超詳細(xì)教程

    搭建PhpStorm+PhpStudy開(kāi)發(fā)環(huán)境的超詳細(xì)教程

    這篇文章主要介紹了搭建PhpStorm+PhpStudy開(kāi)發(fā)環(huán)境的超詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • php中的雙引號(hào)與單引號(hào)的基本使用及區(qū)別

    php中的雙引號(hào)與單引號(hào)的基本使用及區(qū)別

    字符串是一個(gè)非常要的知識(shí),在開(kāi)發(fā)中,有的使用單引號(hào),有的使用雙引號(hào),這個(gè)是有區(qū)別的,這篇文章主要介紹了php中的雙引號(hào)與單引號(hào)的基本使用,需要的朋友可以參考下
    2023-06-06
  • ThinkPHP之import方法實(shí)例詳解

    ThinkPHP之import方法實(shí)例詳解

    import方法是ThinkPHP框架用于類庫(kù)導(dǎo)入的封裝實(shí)現(xiàn),這篇文章主要介紹了ThinkPHP的import方法,需要的朋友可以參考下
    2014-06-06
  • Laravel框架Eloquent ORM修改數(shù)據(jù)操作示例

    Laravel框架Eloquent ORM修改數(shù)據(jù)操作示例

    這篇文章主要介紹了Laravel框架Eloquent ORM修改數(shù)據(jù)操作,結(jié)合實(shí)例形式詳細(xì)分析了laravel框架更新數(shù)據(jù)的兩種常見(jiàn)操作技巧,需要的朋友可以參考下
    2019-12-12
  • PHP實(shí)現(xiàn)文件上傳與下載

    PHP實(shí)現(xiàn)文件上傳與下載

    這篇文章主要為大家詳細(xì)介紹了PHP實(shí)現(xiàn)文件上傳與下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Symfony2創(chuàng)建頁(yè)面實(shí)例詳解

    Symfony2創(chuàng)建頁(yè)面實(shí)例詳解

    這篇文章主要介紹了Symfony2創(chuàng)建頁(yè)面的方法,結(jié)合實(shí)例形式分析了Symfony頁(yè)面創(chuàng)建的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-03-03
  • php 的反射詳解及示例代碼

    php 的反射詳解及示例代碼

    本文主要介紹PHP的反射內(nèi)容的知識(shí),這里提供相關(guān)的資料講解,及簡(jiǎn)單示例代碼供大家參考,有興趣的小伙伴可以參考下
    2016-08-08

最新評(píng)論

容城县| 开封县| 西盟| 观塘区| 疏附县| 中山市| 佛坪县| 青田县| 镇康县| 康马县| 龙州县| 田阳县| 琼中| 阿拉善左旗| 且末县| 龙游县| 稻城县| 炎陵县| 黔西县| 屯门区| 绵阳市| 叙永县| 平和县| 循化| 察哈| 佛坪县| 海宁市| 葫芦岛市| 杭锦后旗| 剑川县| 盐边县| 图们市| 九寨沟县| 东乌珠穆沁旗| 称多县| 京山县| 马鞍山市| 维西| 柏乡县| 恩平市| 信宜市|