国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Traitement de la progression du téléchargement du fichier PHP

Lorsque le fichier est trop volumineux ou que l'état du réseau de l'utilisateur est moyen, le processus de téléchargement prend généralement un certain temps. Si l'utilisateur attend avec un écran vide à ce moment-là, je pense que la plupart des utilisateurs fermeront simplement le fichier. application, il faut donc surveiller la progression du téléchargement. La nécessité de rendre compte aux utilisateurs en temps réel a été mise sur la table par Product Wang. Une invite de progression du téléchargement de haute qualité fera instantanément ressembler votre candidature.

Avant PHP 5.4, vous deviez toujours installer des extensions supplémentaires pour surveiller la progression du téléchargement des fichiers. à partir de la version 5.4, la nouvelle fonctionnalité session.upload_progress est introduite. Il suffit d'activer la configuration dans php.ini pour surveiller la progression du téléchargement du fichier tout au long de la session. dans php.ini.

Remarque?: Pour apprendre ce chapitre, vous devez avoir une connaissance de base de la session, du javascript et de l'ajax.

Nous devons configurer, faites attention à vérifier et modifier le fichier php.ini?:

配置項(xiàng)說(shuō)明
session.upload_progress.enabled是否啟用上傳進(jìn)度報(bào)告(默認(rèn)開(kāi)啟) 1為開(kāi)啟,0為關(guān)閉
session.upload_progress.cleanup是否在上傳完成后及時(shí)刪除進(jìn)度數(shù)據(jù)(默認(rèn)開(kāi)啟, 推薦開(kāi)啟)
session.upload_progress.prefix[=upload_progress_]進(jìn)度數(shù)據(jù)將存儲(chǔ)在_SESSION[session.upload_progress.prefix . _POST[session.upload_progress.name]]
session.upload_progress.name[=PHP_SESSION_UPLOAD_PROGRESS]如果_POST[session.upload_progress.name]沒(méi)有被設(shè)置, 則不會(huì)報(bào)告進(jìn)度.
session.upload_progress.freq[=1%]更新進(jìn)度的頻率(已經(jīng)處理的字節(jié)數(shù)), 也支持百分比表示’%’.
session.upload_progress.min_freq[=1.0]更新進(jìn)度的時(shí)間間隔(秒級(jí))

Avec la configuration activée, nous pouvons enregistrer la progression complète du téléchargement de fichiers tout au long de la session. Dans la session, un tableau avec les résultats suivants appara?tra?:

$_SESSION["upload_progress_test"] = array(
    //請(qǐng)求時(shí)間
     "start_time" => 1234567890,
     // 上傳文件總大小
     "content_length" => 57343257,
     //已經(jīng)處理的大小
     "bytes_processed" => 453489,
     //當(dāng)所有上傳處理完成后為T(mén)RUE,未完成為false
     "done" => false,
     "files" => array(
      0 => array(
        //表單中上傳框的名字
       "field_name" => "file1",
       //上傳文件的名稱(chēng)
       "name" => "test1.avi",
       //緩存文件,上傳的文件即保存在這里
       "tmp_name" => "/tmp/phpxxxxxx",
       //文件上傳的錯(cuò)誤信息
       "error" => 0,
       //是否上傳完成,當(dāng)這個(gè)文件處理完成后會(huì)變成TRUE
       "done" => true, 
       //這個(gè)文件開(kāi)始處理時(shí)間
       "start_time" => 1234567890,
       //這個(gè)文件已經(jīng)處理的大小
       "bytes_processed" => 57343250,     
      ),
      1 => array(
       "field_name" => "file2",
       "name" => "test2.avi",
       "tmp_name" => NULL,
       "error" => 0,
       "done" => false,                    
       "start_time" => 1234567899,
       "bytes_processed" => 54554,
      ),
     )
    );

Ce tableau enregistre la progression du téléchargement des fichiers en détail et l'état des fichiers qui ont été traités est vrai. Ensuite, nous utilisons un exemple jQuery AJAX pour apprendre le processus de progression du téléchargement de fichiers.

Tout d'abord, dans le formulaire, vous devez ajouter une balise d'entrée avec type=hidden, et la valeur de la balise est personnalisée (il est recommandé d'utiliser une valeur significative, car cette valeur sera utilisée en arrière-plan)

<form id="upload-form" action="upload.php" method="POST" enctype="multipart/form-data" style="margin:15px 0" target="hidden_iframe">
    <input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="test" />
    <p><input type="file" name="file1" /></p>
    <p><input type="submit" value="Upload" /></p>
</form>
<div id="progress" class="progress" style="margin-bottom:15px;display:none;">
    <div class="label">0%</div>
</div>

Ici, un div avec l'ID de progression est ajouté en tant que conteneur pour afficher la progression du téléchargement. Nous utilisons setTimeout() de js pour exécuter ajax régulièrement afin d'obtenir la progression du téléchargement du fichier, et le fichier d'arrière-plan renvoie le pourcentage de progression du téléchargement du fichier.

<script src="../jquery/1.8.2/jquery.min.js"></script>
<script type="text/javascript">
function fetch_progress(){
    $.get('progress.php',{ '<?php echo ini_get("session.upload_progress.name"); ?>' : 'test'}, function(data){
        var progress = parseInt(data);
        $('#progress .label').html(progress + '%');
        if(progress < 100){
            setTimeout('fetch_progress()', 100);    //當(dāng)上傳進(jìn)度小于100%時(shí),顯示上傳百分比
        }else{
            $('#progress .label').html('完成!'); //當(dāng)上傳進(jìn)度等于100%時(shí),顯示上傳完成
        }
    }, 'html');
}
$('#upload-form').submit(function(){
    $('#progress').show();
    setTimeout('fetch_progress()', 100);//每0.1秒執(zhí)行一次fetch_progress(),查詢(xún)文件上傳進(jìn)度
});
</script>

Le code ci-dessus renvoie la progression du téléchargement du fichier toutes les 0,1 seconde via l'ajax de JQ. Et affichez le pourcentage de progression dans la balise div.

Le code d'arrière-plan doit être divisé en deux parties. upload.php gère le téléchargement de fichiers. progress.php obtient la progression du téléchargement dans la session et renvoie le pourcentage de progression.

Je n'entrerai pas dans les détails sur le téléchargement de fichiers ici. Veuillez vous référer à ce qui précède pour les étapes détaillées upload.php?:

<?php
if(is_uploaded_file($_FILES['file1']['tmp_name'])){                                            //判斷是否是上傳文件
   //unlink($_FILES['file1']['tmp_name']);    
   move_uploaded_file($_FILES['file1']['tmp_name'], "./{$_FILES['file1']['name']}");     //將緩存文件移動(dòng)到指定位置
}
?>

Concentrez-vous principalement sur progress.php?:

<?php
/*
開(kāi)啟session。請(qǐng)注意在session_start()之前,請(qǐng)不要有想瀏覽器輸出內(nèi)容的動(dòng)作,否則可能引起錯(cuò)誤。
*/

session_start();

//ini_get()獲取php.ini中環(huán)境變量的值
$i = ini_get('session.upload_progress.name');

//ajax中我們使用的是get方法,變量名稱(chēng)為ini文件中定義的前綴 拼接 傳過(guò)來(lái)的參數(shù)
$key = ini_get("session.upload_progress.prefix") . $_GET[$i];    
//判斷 SESSION 中是否有上傳文件的信息
if (!empty($_SESSION[$key])) {                                        
   //已上傳大小
   $current = $_SESSION[$key]["bytes_processed"];
   //文件總大小
   $total = $_SESSION[$key]["content_length"];

   //向 ajax 返回當(dāng)前的上傳進(jìn)度百分比。
   echo $current < $total ? ceil($current / $total * 100) : 100;
}else{
   echo 100;                                                       
}
?>
<. ??>Ici, progression du fichier Le code est terminé. Avec le front-end, nous pouvons créer une fonction sympa de téléchargement de fichiers !


Formation continue
||
<?php /* 開(kāi)啟session。請(qǐng)注意在session_start()之前,請(qǐng)不要有想瀏覽器輸出內(nèi)容的動(dòng)作,否則可能引起錯(cuò)誤。 */ session_start(); //ini_get()獲取php.ini中環(huán)境變量的值 $i = ini_get('session.upload_progress.name'); //ajax中我們使用的是get方法,變量名稱(chēng)為ini文件中定義的前綴 拼接 傳過(guò)來(lái)的參數(shù) $key = ini_get("session.upload_progress.prefix") . $_GET[$i]; //判斷 SESSION 中是否有上傳文件的信息 if (!empty($_SESSION[$key])) { //已上傳大小 $current = $_SESSION[$key]["bytes_processed"]; //文件總大小 $total = $_SESSION[$key]["content_length"]; //向 ajax 返回當(dāng)前的上傳進(jìn)度百分比。 echo $current < $total ? ceil($current / $total * 100) : 100; }else{ echo 100; } ?>
soumettreRéinitialiser le code