php 大文件上傳的實現

1.使用PHP的創始人 Rasmus Lerdorf 寫的APC擴展模塊來實現(http://pecl.php.net/package/apc
APC實現方法:php

  • 安裝APC,參照官方文檔安裝,能夠使用PECL模塊安裝方法快速簡捷,這裏不說明
  • 配置php.ini,設置參數 apc.rfc1867=1 ,使APC支持上傳進度條功能,在APC源碼說明文檔裏面有說明
  • 代碼範例:

[php]if
($_SERVER[‘REQUEST_METHOD‘] == ‘POST‘)
{
//上傳請求
$status = apc_fetch(‘upload_‘ . $_POST[‘APC_UPLOAD_PROGRESS‘]);
    $status[‘done‘] = 1;
    echo
json_encode($status);  //輸出給用戶端頁面裏的ajax調用,相關文檔請本身尋找
exit;
}
elseif
(isset($_GET[‘progress_key‘]))
{
//讀取上傳進度
$status = apc_fetch(‘upload_‘.$_GET[‘progress_key‘]);
    echo
json_encode($status);
    exit;
}
else
{
//其餘代碼,好比上傳表單等
}[/php]


2.使用PECL擴展模塊uploadprogress實現(http://pecl.php.net/package/uploadprogress
uploadprogress 模塊實現方法:html

  • 使用PECL模塊安裝方法安裝該模塊
  • php.ini裏面設置 uploadprogress.file.filename_template = 「/tmp/upd_%s.txt」
  • 代碼範例:
  • [php]if($_SERVER[‘REQUEST_METHOD‘]==‘POST‘)
    {
    if
    (is_uploaded_file($_FILES[‘upfile‘][‘tmp_name‘]))
    {
    $upload_dir = ‘your_path/‘;
            $ext        = strrchr($_FILES[‘video‘][‘name‘], ‘.‘);
            $sessid     = $_POST[‘UPLOAD_IDENTIFIER‘] ;
            $tmpfile    = $upload_dir . $sessid; 
            $sessfile   = $upload_dir . $sessid .$ext;
            if
    (move_uploaded_file($_FILES[‘upfile‘][‘tmp_name‘],$tmpfile))
    {
    //上傳成功
    }
    else
    {
    //上傳失敗
    }
    else
    {
    //上傳錯誤
    }
    elseif
    (!empty($_GET[‘sessid‘]))
    {
    header(「Expires: Mon, 26 Jul 1997 05:00:00 GMT「);
        header(「Last-Modified: 「 . gmdate(「D, d M Y H:i:s「) . 「 GMT「);
        header(「Cache-Control: no-store, no-cache, must-revalidate「);
        header(「Cache-Control: post-check=0, pre-check=0「, false);
        header(「Pragma: no-cache「);
        header(「Content-Type:text/html;charset=UTF-8「);
  •     $unique_id = $_GET[‘sessid‘];
        $uploadvalues = uploadprogress_get_info($unique_id);
  •     if
    (is_array($uploadvalues))
    {
    echo
    json_encode($uploadvalues);
        }
    else
    {
    //讀取進度失敗,另外處理邏輯
    }
    }
    else
    {
    //顯示上傳表單
    }
    [/php]

3.UGiA
在他的官網有下詳細的說明http://www.ugia.cn/?page_id=74

理論上能夠上傳無限大的文件實時顯示上傳狀態、進度支持多文件上傳以及與表單混合上傳方便的用戶調用接口上傳進度提供兩種顯示模式:新窗口或者內嵌式(0.3)多語言支持(0.21)兼容各類瀏覽器(通過測試的瀏覽器:IE5.0、IE6.0、Mozilla、Firefox、Opera)




4XUploadFiles 
最後一個是c#的組件,傳說中很強大。http://www.blue999.com/xuploadfiles/index.htm

web

  • 支持上傳時的斷線續傳功能
  • 支持多文件選擇功能
  • 提供上傳文件大小限制、文件個數限制、文件總數據量限制
  • 提供上傳文件過濾功能:指定容許上傳的文件類型,也能夠指定不容許上傳的文件類型
  • 顯示上傳進度條
  • 自動生成縮略圖(在瀏覽器中生成,不佔用服務器資源)
  • 支持對上傳文件進行統計
  • 提供自定義上傳文件名、自定義文件存儲路徑的功能
  • 提供自定義驗證信息的功能
  • 支持Session、Cookie等操做
相關文章
相關標籤/搜索