php 匯入匯出怎麼做成有進度條??

來源:互聯網
上載者:User
我要做匯入匯出功能,為了介面友好,提示時想出線進度條顯示進度,但我不知道怎麼做!
我的匯入是匯入csv格式的檔案,直接讀取,然後 insert into 資料表中,匯出也是直接查詢產生csv格式檔案,
我能做了一個進度條,但是不知道怎麼來擷取匯入匯出執行的進度,然後再通過ajax及js更新我的進度條。


回複討論(解決方案)

用戶端支援,通過
sliverlight,flash,html5

或者伺服器端,你查apc擴充,,好像還一個,忘記名字了

這個用ajax很容易實現,你可以查下相關資料

假如有100個操作,你可以讓第一個操作前進1,第二個操作前進3 ...

我建議不要做這個進度條效果,因為可能影響速度
只要弄一個"匯入中"

使用緩衝輸出吧


// 省略其他html+js進度條代碼$i = 0;while($i<100) {    // 執行內容    sleep(1);    // 根據總量和當前任務計算任務進度$i    $i = $i++;    echo '';    ob_flash()    flash();}

0%';echo str_repeat(' ', 4096);ob_flush();flush();// 執行任務$i = 0;while($i<100) {    // 執行內容    sleep(1);    // 根據總量和當前任務計算任務進度$i    $i++;    echo '';    ob_flush();    flush();}

我以前做採集的時候寫的,ie下有用,chrome下試了下進度不跑,懶得該了
http://devp.cosrc.com/scroll2.php

很不錯,很強>>>

PHP code
// 省略其他html+js進度條代碼
$i = 0;
while($i<100) {
// 執行內容
sleep(1);
// 根據總量和當前任務計算任務進度$i
$i = $i++;
echo '';
ob_flash()
flash();
}
我會做進度條,關鍵是我不會這一步 “// 根據總量和當前任務計算任務進度$i”
我查詢怎麼做這一步呢?

引用 6 樓 hnxxwyq 的回複:
PHP code
// 省略其他html+js進度條代碼
$i = 0;
while($i<100) {
// 執行內容
sleep(1);
// 根據總量和當前任務計算任務進度$i
$i = $i++;
echo '';
ob_flash()
flash();
}

……

通常這種進度條是這樣做的
先擷取整體任務,然後以一個維度來量化,再隨時取當前進度,除以整體的,再化整

比如一個檔案內有x行要讀入,那麼雖然每行內容大小不一,但可以看做計算完每行算完成總體進度1/x

那麼如果要每處理完一行,就要響應不斷的查詢和進行一個輸出,會影響效能的,而且你的匯入方式必須能夠量化每一步

比如這樣
$file_size=檔案內資料行數;
$current=0; //第一行,開始

while (沒處理完)
{
匯入一行;
$current++;
輸出 $current/$file_size * 100;
//繼續
}

顯而易見,這得你的處理是逐步的....如果你是用某種現成的直接匯入匯出檔案的函數,你根本不會擷取到中間執行的過程.






引用 6 樓 hnxxwyq 的回複:
PHP code
// 省略其他html+js進度條代碼
$i = 0;
while($i<100) {
// 執行內容
sleep(1);
// 根據總量和當前任務計算任務進度$i
$i = $i++;
echo '';
ob_flash()
flash();
}

……

匯入時,你可以計算下csv的總行數n,然後每次固定讀取m行(可以根據你的認為的效率修正),每次處理m行,則記錄一次執行任務次數i,最後的進度比就是 floor(i*m / n) * 100;

虛擬碼

 

引用 10 樓 wxhbbdd 的回複:

引用 6 樓 hnxxwyq 的回複:
PHP code
// 省略其他html+js進度條代碼
$i = 0;
while($i<100) {
// 執行內容
sleep(1);
// 根據總量和當前任務計算任務進度$i
$i = $i++;
echo '';
ob……



$n = '總任務量';
$m = '批次任務執行量';
$i = 0;

while($i * $m < $n) {
// 處理m個執行量的內容

// 統計執行任務量
$total = ++$i * $m;

// 計算進度比
$p = floor(min($total, $n) / $n * 100); // 少乘了個100
}

APC實現方法:

安裝APC,參照官方文檔安裝,可以使用PECL模組安裝方法快速簡捷,這裡不說明
配置php.ini,設定參數 apc.rfc1867=1 ,使APC支援上傳進度條功能,在APC源碼說明文檔裡面有說明
代碼範例:
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 {
//其他代碼,比如上傳表單等
}

uploadprogress 模組實現方法:
使用PECL模組安裝方法安裝該模組
php.ini裡面設定 uploadprogress.file.filename_template = “/tmp/upd_%s.txt”
代碼範例:
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 {
//顯示上傳表單
}

收藏 留名~~~

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.