php termine le téléchargement du fichier en fonction du tableau et des étapes
Le contenu du fichier soumis par le formulaire pointe vers file.php.
Nous traitons les fichiers téléchargés via le code PHP dans file.php.
Nous choisissons une image nommée à télécharger. Supposons que le nom de l'image soit : psu.jpg, cliquez pour télécharger.
PHP a préparé une fonction système spéciale $_FILES pour les données de fichiers. Toutes les données associées aux fichiers téléchargés sont enregistrées dans cette fonction système.
Dans le fichier PHP, on imprime $_FILES pour observer la structure de ce tableau :
<?php //var_dump()或print_r() //打印變量的相關(guān)信息,將變量的信息詳細(xì)的展示出來 var_dump($_FILES); ?>
La structure du tableau du résultat imprimé est la suivante :
array (size=1) 'file' => array (size=5) //文件名 'name' => string 'psu.jpg' (length=7) //文件的mime類型 'type' => string 'image/jpeg' (length=10) //緩存文件,上傳的圖片即保存在這里 'tmp_name' => string 'E:\wamp\tmp\phpC32A.tmp' (length=23) //錯(cuò)誤碼,詳見上面錯(cuò)誤碼介紹 'error' => int 0 //上傳的文件大小 'size' => int 225824
Obtenir le au-dessus de la structure du tableau.
Nous pouvons démarrer le processus de traitement du dossier.
La première étape consiste à déterminer le code d'erreur?:
<?php if($_FILES['file']['error'] > 0){ switch ($_FILES['file']['error']) { //錯(cuò)誤碼不為0,即文件上傳過程中出現(xiàn)了錯(cuò)誤 case '1': echo '文件過大'; break; case '2': echo '文件超出指定大小'; break; case '3': echo '只有部分文件被上傳'; break; case '4': echo '文件沒有被上傳'; break; case '6': echo '找不到指定文件夾'; break; case '7': echo '文件寫入失敗'; break; default: echo "上傳出錯(cuò)<br/>"; } }else{ //錯(cuò)誤碼為0,即上傳成功,可以進(jìn)行后續(xù)處理,處理流程見下文 } ?>
Le code ci-dessus présente le code d'erreur et l'erreur correspondante en détail. Code d'erreur pour générer des invites d'erreur précises.
La deuxième étape consiste à déterminer si le fichier dépasse la taille. Dans les projets réels, en raison des limitations matérielles du système et des limitations des périphériques de stockage, il est impossible pour les utilisateurs de télécharger des fichiers sans limite, nous devons donc limiter la taille des fichiers téléchargés par les utilisateurs. Définir une taille limite appropriée peut rendre notre application plus stable.
<?php //判斷錯(cuò)誤 if ($_FILES['file']['error'] > 0) { //有錯(cuò)誤可停止執(zhí)行 } else { //當(dāng)前上傳文件無誤,運(yùn)行本段代碼 //判斷文件是否超出了指定的大小 //單位為byte $MAX_FILE_SIZE = 100000; if ($_FILES['file']['size'] > $MAX_FILE_SIZE) { //判斷,如果上傳的文件,大小超出了我們給的限制范圍,退上傳并產(chǎn)生錯(cuò)誤提示 exit("文件超出指定大小"); } } ?>
Définit la taille du fichier que nous spécifions comme $MAX_FILE_SIZE. L'unité de comptage de cette variable est l'octet, ce qui correspond à la taille $_FILES['file']['size'] du fichier téléchargé.
Dans l'exemple de code, la limite est celle des fichiers d'une taille d'environ 100?Ko et moins.
La troisième étape consiste à déterminer si le type MIME du fichier est correct.
Le plus souvent, notre fonction de téléchargement de fichiers doit déterminer si les fichiers téléchargés par les utilisateurs répondent aux exigences. Après le téléchargement de fichiers indisponibles, l'effet d'affichage global de l'application en ligne sera affecté. entra?nera des effets néfastes. Nous devons donc utiliser le type MIME et le nom du suffixe pour déterminer si le fichier téléchargé par l'utilisateur répond aux exigences.
Dans l'exemple de code suivant, nous supposons que l'exigence actuelle du projet est de spécifier les images téléchargées, nécessitant le téléchargement de fichiers avec le suffixe GIF ou jpg. Lorsque l'utilisateur télécharge un fichier qui ne répond pas aux exigences, un message d'erreur est renvoyé.
<?php /*判斷后綴名和MIME類型是否符合指定需求 例如: 當(dāng)前項(xiàng)目指定上傳后綴為.jpg或.gif的圖片,則$allowSuffix = array('jpg','gif'); */ //定義允許的后綴名數(shù)組 $myImg = explode('.', $_FILES['file']['name']); /* explode() 將一個(gè)字符串用指定的字符切割,并返回一個(gè)數(shù)組,這里我們將文件名用'.''切割,結(jié)果存在$myImg中,文件的后綴名即為數(shù)組的最后一個(gè)值 */ $myImgSuffix = array_pop($myImg); /* 根據(jù)上傳文件名獲取文件的后綴名 使用in_array()函數(shù),判斷上傳文件是否符合要求 當(dāng)文件后綴名不在我們允許的范圍內(nèi)時(shí)退出上傳并返回錯(cuò)誤信息 */ if(!in_array($myImgSuffix, $allowSuffix)){ exit("文件后綴名不符"); } /* mime類型和文件后綴名的對應(yīng)關(guān)系,我們可以通過很多途徑查詢到,為了避免用戶自主修改文件后綴名造成文件無法使用。 mime類型也必須做出限制檢查mime類型,是為了防止上傳者直接修改文件后綴名 導(dǎo)致文件不可用或上傳的文件不符合要求。 */ //數(shù)組內(nèi)容為允許上傳的mime類型 $allowMime = array( "image/jpg", "image/jpeg", "image/pjpeg", "image/gif" ); if(!in_array($_FILES['file']['type'], $allowMime)){ //判斷上傳文件的mime類型是否在允許的范圍內(nèi) exit('文件格式不正確,請檢查'); //如果不在允許范圍內(nèi),退出上傳并返回錯(cuò)誤信息 } ?>
La quatrième étape consiste à générer le chemin et le nom de fichier spécifiés.
Générer un chemin de stockage de fichiers en fonction de la disposition des fichiers du projet Afin d'éviter les erreurs causées par des noms de fichiers en double, un nom de fichier aléatoire est généré selon un certain format.
<?php //指定上傳文件夾 $path = "upload/images/"; /* 根據(jù)當(dāng)前時(shí)間生成隨機(jī)文件名,本行代碼是使用當(dāng)前時(shí)間 + 隨機(jī)一個(gè)0-9的數(shù)字組合成文件名,后綴即為前面取到的文件后綴名 */ $name = date('Y').date('m').date("d").date('H').date('i').date('s').rand(0,9).'.'.$myImgSuffix; ?>
La cinquième étape consiste à déterminer si le fichier est téléchargé.
La fonction is_uploaded_file() est une fonction dédiée pour déterminer si le fichier cible est un fichier téléchargé.
<?php //使用is_uploaded_file()判斷是否是上傳文件,函數(shù)介紹見上文 if(is_uploaded_file($_FILEs['file']['tmp_name'])){ } ?>
étape 6, déplacez le fichier vers l'emplacement spécifié.
Utilisez la fonction move_uploaded_file() pour déplacer le fichier vers l'emplacement spécifié et nommez-le. Il convient de noter que le système Linux dispose d'autorisations sur le répertoire cible et que l'espace disque est suffisant, sinon l'opération de téléchargement échouera.
<?php /* 使用move_uploaded_file()移動(dòng)上傳文件至指定位置,第一個(gè)參數(shù)為上傳文件,第二個(gè)參數(shù)為我們在前面指定的上傳路徑和名稱。 */ if(move_uploaded_file($_FILEs['file']['tmp_name'], $path.$name)){ //提示文件上傳成功 echo "上傳成功"; }else{ /* 文件移動(dòng)失敗,檢查磁盤是否有足夠的空間,或者linux類系統(tǒng)中文件夾是否有足夠的操作權(quán)限 */ echo '上傳失敗'; } }else{ echo '不是上傳文件'; } } ?>
Nous organisons ce fragment de fichier en un fichier entier?:
<?php if ($_FILES['file']['error'] > 0) { switch ($_FILES['file']['error']) { //錯(cuò)誤碼不為0,即文件上傳過程中出現(xiàn)了錯(cuò)誤 case '1': echo '文件過大'; break; case '2': echo '文件超出指定大小'; break; case '3': echo '只有部分文件被上傳'; break; case '4': echo '文件沒有被上傳'; break; case '6': echo '找不到指定文件夾'; break; case '7': echo '文件寫入失敗'; break; default: echo "上傳出錯(cuò)<br/>"; } } else { $MAX_FILE_SIZE = 100000; if ($_FILES['file']['size'] > $MAX_FILE_SIZE) { exit("文件超出指定大小"); } $allowSuffix = array( 'jpg', 'gif', ); $myImg = explode('.', $_FILES['file']['name']); $myImgSuffix = array_pop($myImg); if (!in_array($myImgSuffix, $allowSuffix)) { exit("文件后綴名不符"); } $allowMime = array( "image/jpg", "image/jpeg", "image/pjpeg", "image/gif", ); if (!in_array($_FILES['file']['type'], $allowMime)) { exit('文件格式不正確,請檢查'); } $path = "upload/images/"; $name = date('Y') . date('m') . date("d") . date('H') . date('i') . date('s') . rand(0, 9) . '.' . $myImgSuffix; if (is_uploaded_file($_FILEs['file']['tmp_name'])) { if (move_uploaded_file($_FILEs['file']['tmp_name'], $path . $name)) { echo "上傳成功"; } else { echo '上傳失敗'; } } else { echo '不是上傳文件'; } } ?>