


Implémentation PHP des exemples de téléchargement et de téléchargement de fichiers, explication détaillée
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 est POST
, ajoutez l'attribut enctype="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
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="doAction.php" method="post" enctype="multipart/form-data"> 请选择您要上传的文件: <input type="file" name="myFile" /><br/> <input type="submit" value="上传"/> </form> <?php ?> </body> </html>
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
.<?php //$_FILES:文件上传变量 //print_r($_FILES); $filename=$_FILES['myFile']['name']; $type=$_FILES['myFile']['type']; $tmp_name=$_FILES['myFile']['tmp_name']; $size=$_FILES['myFile']['size']; $error=$_FILES['myFile']['error']; //将服务器上的临时文件移动到指定位置 //方法一move_upload_file($tmp_name,$destination) //move_uploaded_file($tmp_name, "uploads/".$filename);//文件夹应提前建立好,不然报错 //方法二copy($src,$des) //以上两个函数都是成功返回真,否则返回false //copy($tmp_name, "copies/".$filename); //注意,不能两个方法都对临时文件进行操作,临时文件似乎操作完就没了,我们试试反过来 copy($tmp_name, "copies/".$filename); move_uploaded_file($tmp_name, "uploads/".$filename); //能够实现,说明move那个函数基本上相当于剪切;copy就是copy,临时文件还在 //另外,错误信息也是不一样的,遇到错误可以查看或者直接报告给用户 if ($error==0) { echo "上传成功!"; }else{ switch ($error){ case 1: echo "超过了上传文件的最大值,请上传2M以下文件"; break; case 2: echo "上传文件过多,请一次上传20个及以下文件!"; break; case 3: echo "文件并未完全上传,请再次尝试!"; break; case 4: echo "未选择上传文件!"; break; case 5: echo "上传文件为0"; break; } }
Jetons d'abord un coup d'œil aux print_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 temporaire error
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.ini UPLOAD_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ée UPLOAD_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
<form action="doAction2.php" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="101321" /> 请选择您要上传的文件: <input type="file" name="myFile" accept="image/jpeg,image/gif,text/html"/><br/> <input type="submit" value="上传"/> </form>
<?php header('content-type:text/html;charset=utf-8'); //接受文件,临时文件信息 $fileinfo=$_FILES["myFile"];//降维操作 $filename=$fileinfo["name"]; $tmp_name=$fileinfo["tmp_name"]; $size=$fileinfo["size"]; $error=$fileinfo["error"]; $type=$fileinfo["type"]; //服务器端设定限制 $maxsize=10485760;//10M,10*1024*1024 $allowExt=array('jpeg','jpg','png','gif');//允许上传的文件类型(拓展名 $ext=pathinfo($filename,PATHINFO_EXTENSION);//提取上传文件的拓展名 //目的信息 $path="uploads"; if (!file_exists($path)) { //当目录不存在,就创建目录 mkdir($path,0777,true); chmod($path, 0777); } //$destination=$path."/".$filename; //得到唯一的文件名!防止因为文件名相同而产生覆盖 $uniName=md5(uniqid(microtime(true),true)).$ext;//md5加密,uniqid产生唯一id,microtime做前缀 if ($error==0) { if ($size>$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
<?php function uploadFile($fileInfo,$path,$allowExt,$maxSize){ $filename=$fileInfo["name"]; $tmp_name=$fileInfo["tmp_name"]; $size=$fileInfo["size"]; $error=$fileInfo["error"]; $type=$fileInfo["type"]; //服务器端设定限制 $ext=pathinfo($filename,PATHINFO_EXTENSION); //目的信息 if (!file_exists($path)) { mkdir($path,0777,true); chmod($path, 0777); } $uniName=md5(uniqid(microtime(true),true)).'.'.$ext; $destination=$path."/".$uniName; if ($error==0) { if ($size>$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
<?php header('content-type:text/html;charset=utf-8'); $fileInfo=$_FILES["myFile"]; $maxSize=10485760;//10M,10*1024*1024 $allowExt=array('jpeg','jpg','png','tif'); $path="uploads"; include_once 'upFunc.php'; uploadFile($fileInfo, $path, $allowExt, $maxSize);
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="doAction5.php" method="post" enctype="multipart/form-data"> 请选择您要上传的文件:<input type="file" name="myFile1" /><br/> 请选择您要上传的文件:<input type="file" name="myFile2" /><br/> 请选择您要上传的文件:<input type="file" name="myFile3" /><br/> 请选择您要上传的文件:<input type="file" name="myFile4" /><br/> <input type="submit" value="上传"/> </form> </body> </html>
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éfaut<?php //print_r($_FILES); header('content-type:text/html;charset=utf-8'); include_once 'upFunc.php'; foreach ($_FILES as $fileInfo){ $file[]=uploadFile($fileInfo); }
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){
Print $_FILES
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="doAction5.php" method="post" enctype="multipart/form-data"> 请选择您要上传的文件:<input type="file" name="myFile[]" /><br/> 请选择您要上传的文件:<input type="file" name="myFile[]" /><br/> 请选择您要上传的文件:<input type="file" name="myFile[]" /><br/> 请选择您要上传的文件:<input type="file" name="myFile[]" /><br/> <input type="submit" value="上传"/> </form> </body> </html>
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 ) ) )
Ensuite, s'il y a une erreur de sortie comme avant, changez simplement la sortie ici. res
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
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="doAction6.php" method="POST" enctype="multipart/form-data"> 请选择您要上传的文件:<input type="file" name="myFile[]" multiple='multiple' /><br/> <input type="submit" value="上传"/> </form> </body> </html>
4. Téléchargement de fichiers orientés objet
<?php //print_r($_FILES); header("content-type:text/html;charset=utf-8"); require_once 'upFunc2.php'; require_once 'common.func.php'; $files=getFiles(); // print_r($files); foreach($files as $fileInfo){ $res=uploadFile($fileInfo); echo $res['mes'],'<br/>'; $uploadFiles[]=@$res['dest']; } $uploadFiles=array_values(array_filter($uploadFiles)); //print_r($uploadFiles);
5. Téléchargement
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Insert title here</title> </head> <body> <a href="1.rar">下载1.rar</a> <br /> <a href="1.jpg">下载1.jpg</a> <br /> <a href="doDownload.php?filename=1.jpg">通过程序下载1.jpg</a> <br /> <a href="doDownload.php?filename=../upload/nv.jpg">下载nv.jpg</a> <?php ?> </body> </html>
<?php $filename=$_GET['filename']; header('content-disposition:attachment; filename='.basename($filename)); header('content-length:'.filesize($filename)); readfile($filename);
总结:
<input type="file" name="myFile" /><br/>
二维数组的降维处理;
$_FILES变量
move_upload_file();copy();
tmp_name临时文件;
拓展名的提取;
真实图片的验证;
唯一文件名的生成;
函数封装以及调用;
利用单个文件函数实现多文件上传;
小功能的封装;
多文件的遍历;
面向对象的开发过程;
下载;
以上就是全部的讲解,希望可以帮助到大家,有错误的地方请指出。
更多相关问题请访问PHP中文网:PHP视频教程
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Pour implémenter le téléchargement et le téléchargement de fichiers dans des documents Workerman, des exemples de code spécifiques sont requis Introduction : Workerman est un framework de communication réseau asynchrone PHP hautes performances, simple, efficace et facile à utiliser. Dans le développement réel, le téléchargement et le téléchargement de fichiers sont des exigences fonctionnelles courantes. Cet article explique comment utiliser le framework Workerman pour implémenter le téléchargement et le téléchargement de fichiers, et donne des exemples de code spécifiques. 1. Téléchargement de fichiers : le téléchargement de fichiers fait référence à l'opération de transfert de fichiers de l'ordinateur local vers le serveur. Ce qui suit est utilisé

Comment utiliser Laravel pour implémenter les fonctions de téléchargement et de téléchargement de fichiers Laravel est un framework Web PHP populaire qui fournit une multitude de fonctions et d'outils pour rendre le développement d'applications Web plus facile et plus efficace. L'une des fonctions couramment utilisées est le téléchargement et le téléchargement de fichiers. Cet article expliquera comment utiliser Laravel pour implémenter les fonctions de téléchargement et de téléchargement de fichiers, et fournira des exemples de code spécifiques. Téléchargement de fichiers Le téléchargement de fichiers fait référence au téléchargement de fichiers locaux sur le serveur pour le stockage. Dans Laravel, nous pouvons utiliser le téléchargement de fichiers

Comment résoudre l'exception de téléchargement de fichiers Java (FileUploadException). Un problème souvent rencontré dans le développement Web est FileUploadException (exception de téléchargement de fichiers). Cela peut se produire pour diverses raisons telles qu'une taille de fichier dépassant la limite, une incompatibilité de format de fichier ou une configuration incorrecte du serveur. Cet article décrit quelques méthodes pour résoudre ces problèmes et fournit des exemples de code correspondants. Limiter la taille des fichiers téléchargés Dans la plupart des scénarios, limitez la taille du fichier

Comment implémenter le téléchargement de fichiers à l'aide de gRPC ? Créez des définitions de service de support, y compris des messages de demande et de réponse. Sur le client, le fichier à télécharger est ouvert et divisé en morceaux, puis diffusé sur le serveur via un flux gRPC. Côté serveur, des fragments de fichiers sont reçus et stockés dans un fichier. Le serveur envoie une réponse une fois le téléchargement du fichier terminé pour indiquer si le téléchargement a réussi.

Téléchargement et traitement de fichiers dans Laravel : gestion des fichiers téléchargés par les utilisateurs Introduction : Le téléchargement de fichiers est une exigence fonctionnelle très courante dans les applications Web modernes. Dans le framework Laravel, le téléchargement et le traitement de fichiers deviennent très simples et efficaces. Cet article explique comment gérer les fichiers téléchargés par les utilisateurs dans Laravel, y compris la vérification, le stockage, le traitement et l'affichage des téléchargements de fichiers. 1. Téléchargement de fichiers Le téléchargement de fichiers fait référence au téléchargement de fichiers du client vers le serveur. Dans Laravel, les téléchargements de fichiers sont très simples à gérer. d'abord,

Comment utiliser PHP pour implémenter la barre de progression du téléchargement de fichiers FTP 1. Introduction générale Dans le développement de sites Web, le téléchargement de fichiers est une fonction courante. Pour le téléchargement de fichiers volumineux, afin d'améliorer l'expérience utilisateur, nous devons souvent afficher une barre de progression du téléchargement à l'utilisateur pour l'informer du processus de téléchargement du fichier. Cet article explique comment utiliser PHP pour implémenter la fonction de barre de progression du téléchargement de fichiers FTP. 2. L'idée de base de la mise en œuvre de la barre de progression du téléchargement de fichiers FTP est généralement calculée en calculant la taille du fichier téléchargé et la taille du fichier téléchargé.

Réponse : Oui, Golang fournit des fonctions qui simplifient le traitement du téléchargement de fichiers. Détails : le type MultipartFile permet d'accéder aux métadonnées et au contenu des fichiers. La fonction FormFile obtient un fichier spécifique à partir de la demande de formulaire. Les fonctions ParseForm et ParseMultipartForm sont utilisées pour analyser les données de formulaire et les données de formulaire en plusieurs parties. L'utilisation de ces fonctions simplifie le processus de traitement des fichiers et permet aux développeurs de se concentrer sur la logique métier.

Guide de téléchargement de fichiers PHP : Comment utiliser la fonction move_uploaded_file pour gérer les fichiers téléchargés Dans le développement d'applications Web, le téléchargement de fichiers est une exigence courante. PHP fournit une fonction pratique move_uploaded_file() pour traiter les fichiers téléchargés. Cet article vous présentera comment utiliser cette fonction pour implémenter la fonction de téléchargement de fichiers. 1. Préparation Avant de commencer, assurez-vous que votre environnement PHP a été configuré avec les paramètres de téléchargement de fichiers. Vous pouvez le faire en ouvrant php.in
