1. Principe et configuration du téléchargement
1.1 Principe
Téléchargez les fichiers client sur le serveur, puis déplacez les fichiers du serveur (fichiers temporaires) vers l'emplacement spécifié. L'annuaire suffit.
1.2 Configuration client
requise : page de formulaire (sélectionner le fichier de téléchargement) ;
Plus précisément : la méthode d'envoi estPOST
, ajoutez l'attributenctype="multipart/form-data"
, les deux sont indispensable (cependant, des avantages et des inconvénients coexistent, ici limite également la méthode de téléchargement et l'appel après le téléchargement du fichier, etc., qui seront discutés plus tard
Le premier est la page de formulaire (veuillez ignorer le front-end émet automatiquement. . ), la clé est l'attribut form ; l'autre est l'utilisation de type="file" (reflétant la puissante expansion de php, etc.)
puis doAction.php
.Copier après la connexion
Jetons d'abord un coup d'œil auxprint_r($_FILES)
informations
Array ( [myFile] => Array ( [name] => 梁博_简历.doc [type] => application/msword [tmp_name] => D:\wamp\tmp\php1D78.tmp [error] => 0 [size] => 75776 ) )
Donc, ce que vous obtenez est un tableau bidimensionnel. Comment l'utiliser, ce sont toutes des choses de base (en fait, j'aime réduire. la dimension puis l'utiliser);
C'est en gros quelque chose qui peut être compris d'un coup d'oeil, sans être verbeux, il y a deux points clés :tmp_name
nom du fichier temporaireerror
message d'erreur (nom de code; , vous pourrez l'utiliser plus tard);
Ensuite, jetez un œil à doAction ici. Dans la dernière partie, les informations sur l'erreur sont utilisées pour renvoyer l'utilisateur. Ce qui doit être expliqué, c'est pourquoi l'erreur est signalée et quoi. les informations d'erreur sont
1.3 À propos du rapport d'erreurs
--Cause du rapport d'erreur
Fondamentalement, elles dépassent ou ne sont pas conformes à la configuration du serveur pour télécharger des fichiers. Alors, quelles sont les configurations côté serveur ?
Considérez d'abord ce que nous utilisons pour télécharger POST, téléchargez
Recherchez donc ces éléments dans php.ini :
file_upload
:On
upload_tmp_dir
= - répertoire d'enregistrement des fichiers temporaires
upload_max_filesize
= 2M
max_file_uploads
=20——Le nombre maximum de fichiers autorisés à être téléchargés en une seule fois (notez la différence avec celui ci-dessus, n'y pensez pas s'il y a une taille)
post_max_size
=8M—— La valeur maximale des données envoyées par courrier mode
Autres configurations associées
max_exectuion_time
=-1 - temps d'exécution maximum pour éviter que le programme n'occupe les ressources du serveur
max_input_time
=60
max_input_nesting_level
=64 - Entrez la profondeur d'imbrication
memory_limit
=128M - Utilisation maximale de la mémoire indépendante d'un seul thread
En bref, c'est tout à propos de la configuration des ressources.
--Numéro d'erreur
UPLOAD_ERR_OK
Valeur : 0 ; Aucune erreur ne s'est produite, le téléchargement du fichier a réussi >
Valeur : 1. ; Le fichier téléchargé dépasse la valeur de l'option upload_max_filesize dans php.iniUPLOAD_ERR_INI_SIZE
Valeur : 2 ; La taille du fichier téléchargé dépasse la valeur spécifiée par l'option MAX_FILE_SIZE dans le formulaire HTML. > Valeur : 3 ; Seule une partie du fichier a été téléchargéeUPLOAD_ERR_FORM_SIZE
Valeur : 4 ;UPLOAD_ERR_PARTIAL
UPLOAD_ERR_NO_FILE
Remarque : Ce message d'erreur concerne les informations téléchargées lors de la première étape, c'est-à-dire lors du téléchargement vers un dossier temporaire, et non lors du déplacement ou de la copie.
2. Restrictions liées au téléchargement
2.1 Restrictions du client
$maxsize) { exit("上传文件过大!"); } if (!in_array($ext, $allowExt)) { exit("非法文件类型"); } if (!is_uploaded_file($tmp_name)) { exit("上传方式有误,请使用post方式"); } if (@move_uploaded_file($tmp_name, $uniName)) {//@错误抑制符,不让用户看到警告 echo "文件".$filename."上传成功!"; }else{ echo "文件".$filename."上传失败!"; } //判断是否为真实图片(防止伪装成图片的病毒一类的 if (!getimagesize($tmp_name)) {//getimagesize真实返回数组,否则返回false exit("不是真正的图片类型"); } }else{ switch ($error){ case 1: echo "超过了上传文件的最大值,请上传2M以下文件"; break; case 2: echo "上传文件过多,请一次上传20个及以下文件!"; break; case 3: echo "文件并未完全上传,请再次尝试!"; break; case 4: echo "未选择上传文件!"; break; case 7: echo "没有临时文件夹"; break; } }
pour appeler
$maxSize) { exit("上传文件过大!"); } if (!in_array($ext, $allowExt)) { exit("非法文件类型"); } if (!is_uploaded_file($tmp_name)) { exit("上传方式有误,请使用post方式"); } //判断是否为真实图片(防止伪装成图片的病毒一类的 if (!getimagesize($tmp_name)) {//getimagesize真实返回数组,否则返回false exit("不是真正的图片类型"); } if (@move_uploaded_file($tmp_name, $destination)) {//@错误抑制符,不让用户看到警告 echo "文件".$filename."上传成功!"; }else{ echo "文件".$filename."上传失败!"; } }else{ switch ($error){ case 1: echo "超过了上传文件的最大值,请上传2M以下文件"; break; case 2: echo "上传文件过多,请一次上传20个及以下文件!"; break; case 3: echo "文件并未完全上传,请再次尝试!"; break; case 4: echo "未选择上传文件!"; break; case 7: echo "没有临时文件夹"; break; } } return $destination; }
3.1 Utiliser l'encapsulation de fichier unique
Copier après la connexion
L'idée ici peut être trouvé à partir de. Lorsque vous l'imprimerez, vous verrez qu'il s'agit d'un tableau à 2 dimensions, c'est très simple, il suffit de le parcourir et de l'utiliser
Changez la définition de la fonction ci-dessus et donnez-en quelques-unes ! valeurs par défautCopier après la connexion
print_r($_FILES)
Il n'y a aucun problème pour télécharger 4 images normalement, mais si la sortie est activée dans la fonction, ce sera le cas. s'arrête immédiatement, empêchant le téléchargement d'autres images
Package de la version 3.2 mise à niveau
Destiné à encapsuler les téléchargements de fichiers multiples ou uniques Écrivez d'abord un. fichier statique comme celui-cifunction uploadFile($fileInfo,$path="uploads",$allowExt=array('jpeg','jpg','png','tif'),$maxSize=10485760){
Array ( [myFile] => Array ( [name] => Array ( [0] => test32.png [1] => test32.png [2] => 333.png [3] => test41.png ) [type] => Array ( [0] => image/png [1] => image/png [2] => image/png [3] => image/png ) [tmp_name] => Array ( [0] => D:\wamp\tmp\php831C.tmp [1] => D:\wamp\tmp\php834C.tmp [2] => D:\wamp\tmp\php837C.tmp [3] => D:\wamp\tmp\php83BB.tmp ) [error] => Array ( [0] => 0 [1] => 0 [2] => 0 [3] => 0 ) [size] => Array ( [0] => 46174 [1] => 46174 [2] => 34196 [3] => 38514 ) ) )
function getFiles(){ $i=0; foreach($_FILES as $file){ if(is_string($file['name'])){ //单文件判定 $files[$i]=$file; $i++; }elseif(is_array($file['name'])){ foreach($file['name'] as $key=>$val){ //我的天,这个$key用的diao $files[$i]['name']=$file['name'][$key]; $files[$i]['type']=$file['type'][$key]; $files[$i]['tmp_name']=$file['tmp_name'][$key]; $files[$i]['error']=$file['error'][$key]; $files[$i]['size']=$file['size'][$key]; $i++; } } } return $files; }
function uploadFile($fileInfo,$path='./uploads',$flag=true,$maxSize=1048576,$allowExt=array('jpeg','jpg','png','gif')){ //$flag=true; //$allowExt=array('jpeg','jpg','gif','png'); //$maxSize=1048576;//1M //判断错误号 $res=array(); if($fileInfo['error']===UPLOAD_ERR_OK){ //检测上传得到小 if($fileInfo['size']>$maxSize){ $res['mes']=$fileInfo['name'].'上传文件过大'; } $ext=getExt($fileInfo['name']); //检测上传文件的文件类型 if(!in_array($ext,$allowExt)){ $res['mes']=$fileInfo['name'].'非法文件类型'; } //检测是否是真实的图片类型 if($flag){ if(!getimagesize($fileInfo['tmp_name'])){ $res['mes']=$fileInfo['name'].'不是真实图片类型'; } } //检测文件是否是通过HTTP POST上传上来的 if(!is_uploaded_file($fileInfo['tmp_name'])){ $res['mes']=$fileInfo['name'].'文件不是通过HTTP POST方式上传上来的'; } if($res) return $res; //$path='./uploads'; if(!file_exists($path)){ mkdir($path,0777,true); chmod($path,0777); } $uniName=getUniName(); $destination=$path.'/'.$uniName.'.'.$ext; if(!move_uploaded_file($fileInfo['tmp_name'],$destination)){ $res['mes']=$fileInfo['name'].'文件移动失败'; } $res['mes']=$fileInfo['name'].'上传成功'; $res['dest']=$destination; return $res; }else{ //匹配错误信息 switch ($fileInfo ['error']) { case 1 : $res['mes'] = '上传文件超过了PHP配置文件中upload_max_filesize选项的值'; break; case 2 : $res['mes'] = '超过了表单MAX_FILE_SIZE限制的大小'; break; case 3 : $res['mes'] = '文件部分被上传'; break; case 4 : $res['mes'] = '没有选择上传文件'; break; case 6 : $res['mes'] = '没有找到临时目录'; break; case 7 : case 8 : $res['mes'] = '系统错误'; break; } return $res; } }
function getExt($filename){ return strtolower(pathinfo($filename,PATHINFO_EXTENSION)); } /** * 产生唯一字符串 * @return string */ function getUniName(){ return md5(uniqid(microtime(true),true)); }
doAction6. php
4. Téléchargement de fichiers orientés objet
'; $uploadFiles[]=@$res['dest']; } $uploadFiles=array_values(array_filter($uploadFiles)); //print_r($uploadFiles);
5. Téléchargement
Insert title here 下载1.rar
下载1.jpg
通过程序下载1.jpg
下载nv.jpg
Copier après la connexion
总结: