亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP基于session.upload_progress 實現文件上傳進度顯示功能詳解

2024-05-05 00:10:52
字體:
來源:轉載
供稿:網友

本文實例講述了PHP基于session.upload_progress 實現文件上傳進度顯示功能。分享給大家供大家參考,具體如下:

介紹

session.upload_progress 是PHP5.4的新特征。

當 session.upload_progress.enabled INI 選項開啟時,PHP 能夠在每一個文件上傳時監測上傳進度。 這個信息對上傳請求自身并沒有什么幫助,但在文件上傳時應用可以發送一個POST請求到終端(例如通過XHR)來檢查這個狀態。

當一個上傳在處理中,同時POST一個與INI中設置的session.upload_progress.name同名變量時,上傳進度可以在$_SESSION中獲得。 當PHP檢測到這種POST請求時,它會在$_SESSION中添加一組數據, 索引是session.upload_progress.prefix與 session.upload_progress.name連接在一起的值。

開啟session.upload_progress

修改php.ini文件,開啟session.upload_progress的支持。

session.upload_progress.enabled = Onsession.upload_progress.cleanup = Onsession.upload_progress.prefix = "upload_progress_"session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"session.upload_progress.freq = "1%"session.upload_progress.min_freq = "1"

對于PHP語言,這應該是最好的解決方案了,因為這種方式依賴于PHP內部的session機制,開始上傳文件創建相關session以便讀取,文件上傳完成就會銷毀session。html5的文件上傳api也可以顯示上傳進度,但是對IE的10以下的版本沒法使用,所以兼容性不太好。

接下來,我們通過一個例子,實現以下相關效果。

修改php上傳文件限制

php.ini默認的上傳文件大小上限為2M,然而我們既然需要顯示文件上傳進度,肯定都是要能夠上傳比較大的文件。尤其我們在本地服務器上測試的時候,因為服務器保存的路徑是在本地磁盤上,所以文件上傳就相當于在磁盤上復制,速度很快,我們想要比較直觀的看到上傳進度的顯示,就需要上傳一個比較大的文件,我在測試的時候,上傳的是一個400多M的壓縮包。

可以通過下面的php.ini的配置,調整上傳文件大小的限制(以上限500M為例)

upload_max_filesize = 500M; //上傳文件的最大值,還可以調更大post_max_size = 500M;    //post方式傳遞過來數據最大值,還可以調更大max_execution_time = 1800; //頁面最大執行時間,已經設置為最大值max_input_time = 1800; //解析傳入數據最大執行時間,已經設置為最大值memory_limit = 128M;  //每個頁面消耗的最大內存,已經設置為最大值

實例程序

首先放上最簡單的部分,上傳文件轉存程序

upload.php

<?phpif(isset($_FILES['demo'])){  $tmp=explode(".",$_FILES['demo']['name']);  $suffix_name = end($tmp);  $name = time().".".$suffix_name;  $path = __DIR__."//".$name;  move_uploaded_file($_FILES['demo']['tmp_name'],$path);  echo "upload success";}else{  echo "error";}

然后是前臺獲取上傳文件百分數的接口文件

progress.php

<?phpsession_start();$key = ini_get("session.upload_progress.prefix") . $_GET["key"];if (!empty($_SESSION[$key])) {  $current = $_SESSION[$key]["bytes_processed"];  $total = $_SESSION[$key]["content_length"];  echo $current < $total ? ceil($current / $total * 100) : 100;}else{  echo 100;}

最后是前臺的上傳文件界面

index.html

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>上傳文件示例程序</title></head><body><div id="fileUpload">  <form id="upload-form" action="upload.php" method="post" enctype="multipart/form-data" target="hidden_iframe">    <p>      <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="file1" />      <input type="file" name="demo">      <input type="submit" value="上傳">    </p>  </form></div><iframe name="hidden_iframe" src="about:blank" style="display:none;"></iframe><div id="process">  上傳進度:<span id="percent"></span></div></body><script src="http://apps.bdimg.com/libs/jquery/1.6.4/jquery.min.js"></script><script>  function fetch_progress(){    $.get('progress.php',{"key":"file1"}, function(data){      document.getElementById("percent").innerText = data+"%";      if(data == 100){        return;      }else{        setTimeout(fetch_progress,100);      }    });  }  $('#upload-form').submit(function(){    setTimeout(fetch_progress,100);  });</script></html>

在前臺頁面,通過form的target屬性,將提交之后的頁面指向了該頁的iframe,避免了頁面的跳轉。

總結

php.ini默認配置的上傳文件大小是2M,我們上傳文件通常是需要修改一下配置文件使用的。

從php5.4開始,通過php.ini配置session.upload_progress之后,文件上傳時,就會創建key為session.upload_progress.prefix+session.upload_progress.name的session。其中session.upload_progress.prefix是配置文件中定義的,session.upload_progress.name需要在form表單提交時,一并提交才可以。

文件開始上傳,創建session,上傳過程中,session文件中保存了以上傳字節數和總字節數,可以以及計算得到上傳文件百分比,在上傳完成之后,該session會被銷毀。

bootstrap樣式的進度條

index.html加上bootstrap的進度條樣式,頓時高大上多了,哈哈

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <title>上傳文件示例程序</title>  <link rel="stylesheet" href="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" >  <script src="http://cdn.static.runoob.com/libs/jquery/2.1.1/jquery.min.js"></script>  <script src="http://cdn.static.runoob.com/libs/bootstrap/3.3.7/js/bootstrap.min.js"></script></head><body><div style="width: 400px;margin-top: 30px;margin-left: 30px;">  <div id="fileUpload">    <form class="form-horizontal" role="form" id="upload-form" action="upload.php" method="post" enctype="multipart/form-data" target="hidden_iframe">      <input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="file1" />      <div class="form-group">        <div class="col-sm-8" style="margin-top: 7px;">          <input type="file" name="demo" >        </div>        <div class="col-sm-4">          <button type="submit" class="btn btn-primary btn-sm">上傳文件</button>        </div>      </div>    </form>  </div>  <iframe name="hidden_iframe" src="about:blank" style="display:none;"></iframe>  <div class="progress" style="display: none;">    <div id="percent" class="progress-bar" role="progressbar" aria-valuenow="60" aria-valuemin="0" aria-valuemax="100" style="width:0%;">      0%    </div>  </div></div></body><script>  function fetch_progress(){    $.get('progress.php',{"key":"file1"}, function(data){      document.getElementById("percent").innerText = data+"%";      document.getElementById("percent").setAttribute("style","width:"+data+"%;");      document.getElementsByClassName("progress")[0].setAttribute("style","display: block;");      if(data == 100){        return;      }else{        setTimeout(fetch_progress,100);      }    });  }  $('#upload-form').submit(function(){    setTimeout(fetch_progress,100);  });</script></html>

顯示效果

PHP,session.upload_progress,文件上傳,進度

參考文檔:

http://php.net/manual/zh/session.upload-progress.php

希望本文所述對大家PHP程序設計有所幫助。


注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国外成人免费在线播放| 国产精品一二区| 性色av一区二区三区免费| 少妇高潮久久77777| 91在线视频精品| 51久久精品夜色国产麻豆| 国产一区二区三区免费视频| 国产91精品视频在线观看| 久久久亚洲国产天美传媒修理工| 久久精品99无色码中文字幕| 亚洲一区二区自拍| 亚洲一区二区免费在线| 国产亚洲精品一区二555| 日韩欧美亚洲一二三区| 国产精品一区二区三区免费视频| 日韩中文字幕精品| 成人免费看黄网站| 亚洲色图17p| 亚洲精品国产精品国自产观看浪潮| 国产精品三级在线| 国产福利精品在线| 在线中文字幕日韩| 国产一区二区丝袜| 日韩av在线资源| 久久全球大尺度高清视频| 日韩成人中文字幕| 日本亚洲欧美成人| 91精品在线播放| 国产亚洲欧美日韩一区二区| 国产精品视频一区二区高潮| 国产综合在线观看视频| 伊人久久五月天| 亚洲free性xxxx护士hd| 欧美精品日韩三级| 色婷婷av一区二区三区在线观看| 国产精品草莓在线免费观看| 欧美国产精品人人做人人爱| 尤物yw午夜国产精品视频明星| 色综合久久88| 色吧影院999| 成人黄色免费片| 日韩在线视频中文字幕| 久久青草福利网站| 国产精品久久综合av爱欲tv| 欧美激情中文字幕在线| 宅男66日本亚洲欧美视频| 日韩欧美在线视频日韩欧美在线视频| 少妇高潮久久久久久潘金莲| 91在线视频一区| 亚洲第一网站男人都懂| 亚洲一区二区三区在线免费观看| 国内精品小视频| 久久久精品网站| 亚洲男人av电影| 亚洲综合精品一区二区| 亲子乱一区二区三区电影| 97av在线视频免费播放| 欧美成人在线影院| 久久久久久久久久久久av| 亚洲在线一区二区| 久久精品国产99国产精品澳门| 久久久久亚洲精品国产| 成人欧美一区二区三区黑人孕妇| 成人有码视频在线播放| 亚洲电影免费观看| 91日本在线视频| 91国内免费在线视频| 欧美激情精品久久久久久黑人| 亚洲免费中文字幕| 久久人人爽亚洲精品天堂| 欧美精品中文字幕一区| 国产欧美一区二区| 疯狂做受xxxx欧美肥白少妇| 欧美性猛交xxxx乱大交蜜桃| 国产一区二区三区在线免费观看| 奇米一区二区三区四区久久| 欧美华人在线视频| 一区二区三区在线播放欧美| 亚洲高清免费观看高清完整版| 国产在线拍揄自揄视频不卡99| 国产视频在线观看一区二区| 91成品人片a无限观看| 亚洲一区二区三区香蕉| 亚洲激情在线视频| 国产成人精品视频在线| 色综合伊人色综合网| 91精品视频在线看| 高清欧美性猛交xxxx黑人猛交| 精品久久久久久久久久| 欧美国产日产韩国视频| 亚洲精品videossex少妇| 日韩黄色高清视频| 91视频免费网站| 91免费高清视频| 黄网站色欧美视频| 欧美日韩国产丝袜美女| 韩国视频理论视频久久| 国精产品一区一区三区有限在线| 国产欧美日韩中文字幕| 亚洲精品福利视频| 亚洲黄色成人网| 超碰日本道色综合久久综合| 国产精品高清在线| 日韩av在线资源| 国产一区二区三区高清在线观看| 久久精品免费播放| 亚洲欧美国产精品专区久久| 亚洲成人国产精品| 91在线高清免费观看| 成人免费网站在线| 中文字幕日本精品| 亚洲图片在线综合| 最近2019年好看中文字幕视频| 中文.日本.精品| 日韩欧美综合在线视频| 91av网站在线播放| 日本久久久久久久久| 日韩动漫免费观看电视剧高清| 久久久精品亚洲| 成人免费大片黄在线播放| 欧美激情伊人电影| 久久福利视频导航| 久99久在线视频| 国产精品第一页在线| 国产成人中文字幕| 亚洲成人av资源网| 97香蕉超级碰碰久久免费的优势| 九九热视频这里只有精品| 欧美性高潮在线| 国产精品极品尤物在线观看| 亚洲一区二区久久久| 欧美日韩国产精品一区| 国产精品啪视频| 亚洲一区二区日本| 日韩精品免费在线观看| 日韩欧美在线字幕| 91精品在线影院| 福利视频一区二区| 国内精品在线一区| 亚洲天堂男人天堂女人天堂| 国产亚洲欧洲高清| 欧美性xxxxxxxxx| 亚洲一区二区久久久久久久| 中文字幕少妇一区二区三区| 亚洲男人天堂网站| 久久久久久久久久国产精品| 国精产品一区一区三区有限在线| 国产69精品久久久久99| 欧美性xxxx18| 久久精品这里热有精品| 亚洲欧美精品伊人久久| 久久久久久久久久久91| 日本在线观看天堂男亚洲| 日韩成人激情在线| 亚洲视频电影图片偷拍一区| 久久精品国产2020观看福利| 九九热这里只有精品6| 午夜精品蜜臀一区二区三区免费| 狠狠色香婷婷久久亚洲精品| 97色在线视频| 尤物tv国产一区| 欧美黑人又粗大| 91精品国产乱码久久久久久蜜臀| 91九色国产社区在线观看|