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() //打印变量的相关信息,将变量的信息详细的展示出来 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) //错误码,详见上面错误码介绍 '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']) { //错误码不为0,即文件上传过程中出现了错误 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 "上传出错<br/>"; } }else{ //错误码为0,即上传成功,可以进行后续处理,处理流程见下文 } ?>
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 //判断错误 if ($_FILES['file']['error'] > 0) { //有错误可停止执行 } else { //当前上传文件无误,运行本段代码 //判断文件是否超出了指定的大小 //单位为byte $MAX_FILE_SIZE = 100000; if ($_FILES['file']['size'] > $MAX_FILE_SIZE) { //判断,如果上传的文件,大小超出了我们给的限制范围,退上传并产生错误提示 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类型是否符合指定需求 例如: 当前项目指定上传后缀为.jpg或.gif的图片,则$allowSuffix = array('jpg','gif'); */ //定义允许的后缀名数组 $myImg = explode('.', $_FILES['file']['name']); /* explode() 将一个字符串用指定的字符切割,并返回一个数组,这里我们将文件名用'.''切割,结果存在$myImg中,文件的后缀名即为数组的最后一个值 */ $myImgSuffix = array_pop($myImg); /* 根据上传文件名获取文件的后缀名 使用in_array()函数,判断上传文件是否符合要求 当文件后缀名不在我们允许的范围内时退出上传并返回错误信息 */ if(!in_array($myImgSuffix, $allowSuffix)){ exit("文件后缀名不符"); } /* mime类型和文件后缀名的对应关系,我们可以通过很多途径查询到,为了避免用户自主修改文件后缀名造成文件无法使用。 mime类型也必须做出限制检查mime类型,是为了防止上传者直接修改文件后缀名 导致文件不可用或上传的文件不符合要求。 */ //数组内容为允许上传的mime类型 $allowMime = array( "image/jpg", "image/jpeg", "image/pjpeg", "image/gif" ); if(!in_array($_FILES['file']['type'], $allowMime)){ //判断上传文件的mime类型是否在允许的范围内 exit('文件格式不正确,请检查'); //如果不在允许范围内,退出上传并返回错误信息 } ?>
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/"; /* 根据当前时间生成随机文件名,本行代码是使用当前时间 + 随机一个0-9的数字组合成文件名,后缀即为前面取到的文件后缀名 */ $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()判断是否是上传文件,函数介绍见上文 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()移动上传文件至指定位置,第一个参数为上传文件,第二个参数为我们在前面指定的上传路径和名称。 */ if(move_uploaded_file($_FILEs['file']['tmp_name'], $path.$name)){ //提示文件上传成功 echo "上传成功"; }else{ /* 文件移动失败,检查磁盘是否有足够的空间,或者linux类系统中文件夹是否有足够的操作权限 */ echo '上传失败'; } }else{ echo '不是上传文件'; } } ?>
Nous organisons ce fragment de fichier en un fichier entier :
<?php if ($_FILES['file']['error'] > 0) { switch ($_FILES['file']['error']) { //错误码不为0,即文件上传过程中出现了错误 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 "上传出错<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 '不是上传文件'; } } ?>