Maison > Article > développement back-end > Comment télécharger des fichiers et télécharger en PHP
Chapitre 1 Téléchargement de fichiers
1.1 Paramètres de téléchargement du client
Le téléchargement de fichiers est devenu une fonction courante dans les programmes B/S. Le but est que les clients puissent télécharger des fichiers dans le répertoire spécifié sur le serveur (Serveur) via le navigateur (Navigateur).
Sites Web courants sur Internet prenant en charge le téléchargement de fichiers :
Divers disques réseau
Avatar
Album photo Web
Authentification par nom réel
Pièces jointes aux e-mails
Pour faire simple, le développement Web oblige les utilisateurs à transmettre des fichiers au serveur, qui entrent tous dans la catégorie du téléchargement PHP. Le serveur ne peut accepter des copies que s'il ne remplit pas cette fonction. Tout comme le service client 10086, tant que vous appelez, il l'acceptera. S'il ne l'accepte pas, cela ne peut que signifier que le serveur est occupé.
Connaissance de base du téléchargement de fichiers en PHP :
1) Paramètres du formulaire client
2) Le serveur exploite et traite les fichiers téléchargés
Doit être défini sur les éléments du formulaire :
<html> <head><title>文件上传</title></head> <body> <form action="./upload.php" method="post" enctype="multipart/form-data"><!--必须要写--> <!--typle写file类型,name必须要写,名字随便--> 选择文件:<input type="file" name="myfile"> <input type="submit" value="上传文件"> </form> </body> </html>
Notez plusieurs attributs caractéristiques :
1 Le fichier doit être téléchargé dans la méthode post et la méthode get ne peut pas être utilisée.
2. Enctype="multipart/form-data" doit être écrit sous la forme.
3. Le nom doit être écrit dans le formulaire de saisie.
1.2 Traitement des téléchargements via PHP côté serveur
La réception et le traitement des fichiers téléchargés sont gérés via des scripts PHP, qui nécessitent les trois aspects d'informations suivants :
1 ) Définissez les instructions dans le fichier de configuration PH : utilisé pour ajuster finement la fonction de téléchargement de fichiers de PHP.
2) Tableau multidimensionnel $FILES : utilisé pour stocker diverses informations liées aux fichiers téléchargés. D'autres données sont toujours obtenues en utilisant $_POST.
3) Fonction de traitement de téléchargement de fichiers PHP : utilisée pour le traitement ultérieur des fichiers téléchargés.
1) Options liées au téléchargement de fichiers dans le fichier de configuration PHP.
2) Tableau multidimensionnel $_FILES.
Super tableau global $_FILES
1. La valeur dans $_FILES["myfile"]["name"] est : le nom du fichier dans le système de fichiers client.
2. La valeur dans $FILES["myfile"]["type"] est : le type de fichier transmis par le client.
3. La valeur dans $_FILES["myfile"]["size"] est : la taille du fichier en octets.
4. La valeur dans $_FILES["myfile"]["tmp_name"] est : le chemin complet temporaire stocké sur le serveur après le téléchargement du fichier.
5. La valeur dans $_FILES["myfile"]["error"] est : le code d'erreur du téléchargement de fichier - une fonction ajoutée après PHP 4.2.
À propos du code d'erreur pour le téléchargement de fichiers :
UPLOAD_ERR_OK
La valeur est 0, aucune erreur ne se produit et le téléchargement du fichier est réussi.
UPLOAD_ERR_INI_SIZE
La valeur est 1 et le fichier téléchargé dépasse la valeur limitée par l'option upload_max_filesize dans php.ini.
UPLOAD_ERR_FORM_SIZE
Avec une valeur de 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.
UPLOAD_ERR_PARTIAL
La valeur est 3, le fichier n'est que partiellement téléchargé.
UPLOAD_ERR_NO_FILE
La valeur est 4 et aucun fichier n'a été téléchargé.
UPLOAD_ERR_NO_TMP_DIR
La valeur est 6 et le dossier temporaire est introuvable. Introduit dans PHP 4.3.10 et PHP 5.0.3.
UPLOAD_ERR_CANT_WRITE
La valeur est 7, l'écriture du fichier a échoué. Introduit dans PHP 5.1.0.
Remarque : Les valeurs ci-dessus sont devenues des constantes PHP après PHP 4.3.0.
Format de données commun (MIME)
3) Fonction de traitement de téléchargement de fichiers PHP
Le fichier téléchargé avec succès sera placé dans le répertoire temporaire côté serveur et le nom du fichier est un nom de fichier temporaire généré aléatoirement.
Remarque : ce fichier sera automatiquement supprimé une fois le programme exécuté. Peut être utilisé comme un fichier local avant d'être supprimé.
Fonction de traitement de téléchargement de fichier :
is_uploaded_file - Détermine si le fichier est téléchargé via HTTP POST.
Format : bool is_uploaded_file (string $filename)
move_uploaded_file — Déplacez le fichier téléchargé vers un nouvel emplacement.
Format : bool move_uploaded_file (string $filename, string $destination)
Remarque : si le fichier de destination existe déjà, il sera écrasé.
Description du paramètre : répertoire temporaire des fichiers, le répertoire d'emplacement à déplacer vers
Cas :
1) Définir l'interface de téléchargement frontale
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <form action="doup.php" method="post" enctype="multipart/form-data"> <input type="file" name="pic"> <input type="submit" value="上传"> </form> </body> </html>
2) doup.php traite les fichiers téléchargés dans le répertoire temporaire
//专业搬运工具 //move_uploaded_file() //参数1: 文件临时目录 参数2: 要移动到的位置 //is_uploaded_file() 判断文件是否是http post提交过来的 //参数1: 文件临时目录 //1.我们保存的路径按照时间来创建 //var_dump($_GET); //1.1保存的路径 $dir='./biran/'.date('Y/m/d/'); //echo $dir;exit; //1.2 判断文件上传的路径是否存在 如果不存在就创建 if(!file_exists($dir)){ mkdir($dir,777,true); } //2.要有个好的文件名 唯一的文件名 //2.1获取文件的后缀名 //2.jpg jpg $suffix = pathinfo($_FILES['pic']['name'],PATHINFO_EXTENSION); //echo $suffix; //2.2重新起名 $filename = date('Ymd').uniqid().mt_rand(0,9999).'.'.$suffix; //echo $filename; //开始搬运 //判断是否是http post 传递的文件 if(!is_uploaded_file($_FILES['pic']['tmp_name'])){ //不是http post上传文件 echo '别整没用的!!';exit; } //开始真正的搬运 if(move_uploaded_file($_FILES['pic']['tmp_name'],$dir.$filename)){ echo '11111111111'; }else{ echo '22222222222'; }
et les encapsule dans des fonctions :
Idée :
function upload(){ //1.判断文件上传错误 //2.判断你文件上传的类型是否是你想要的类型 //3.起名字 //4.判断保存路径是否存在 //5.判断是否是http post方式上传 //6.移动图片 //7.返回移动成功的图片名 }
Commencez à encapsuler la fonction : créez une nouvelle function.php
<?php /* 文件上传函数 @param string $name 文件上传文件域的name值 @param string $dir 文件保存路径 @param array $allow 文件允许上传的类型 return string $filename 文件名 如果失败 返回false */ function upload($name,$dir='./upload/',$allow=array('jpg','gif','jpeg','png')){ //echo $name;exit; //var_dump($_FILES);exit; //1.判断文件上传错误 if($_FILES[$name]['error']>0){ //echo '上传错误'; switch($_FILES[$name]['error']){ case 1: echo '上传的文件超过了 php.ini 中upload_max_filesize 选项限制的值.'; break; case 2: echo '上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值'; break; case 3: echo '文件只有部分被上传.'; break; case 4: echo '没有文件被上传.'; break; case 6: echo '找不到临时文件夹.'; break; case 7: echo '文件写入失败.'; break; } return false; } //2.判断你文件上传的类型是否是你想要的类型 //2.1允许上传的类型 //2.2 获取后缀名 $suffix = pathinfo($_FILES[$name]['name'],PATHINFO_EXTENSION); //echo $suffix;exit; //2.3 判断是否是我们允许上传的类型 //var_dump(in_array($suffix,$allow));exit; if(!in_array($suffix,$allow)){ //不允许上传的类型 echo '大哥你的上传类型不符合'; return false; } //3.起名字 $filename = date('Ymd').uniqid().mt_rand(0,9999).'.'.$suffix; //echo $filename;exit; //4.判断保存路径是否存在 //4.1 得到保存路径 //4.2 处理保存路径和后面的斜杠 $save_path = rtrim($dir,'/'); $save_path .='/'; //4.3 保存路径中的时间文件夹处理 $save_path .=date('Y/m/d/'); //4.4 判断保存的路径是否存在 if(!file_exists($save_path)){ mkdir($save_path,777,true); } //4.5 拼接一个完整的保存路径 $path = $save_path.$filename; //echo $path;exit; //5.判断是否是httppost方式上传 if(!is_uploaded_file($_FILES[$name]['tmp_name'])){ echo '滚蛋!'; return false; } //6.移动图片 if(!move_uploaded_file($_FILES[$name]['tmp_name'],$path)){ echo '移动失败'; return false; } //7.返回移动成功的图片名 return $filename; }
appel La fonction commence le téléchargement :
<?php include './function.php'; //var_dump($_FILES);exit; echo upload('file','./leiding',array('jpg','png'));
Chapitre 2 Téléchargement de fichiers multiples
2.1 Téléchargement de fichiers multiples avec des noms différents
Lorsque plusieurs fichiers doivent être téléchargés, il existe deux solutions d'implémentation :
1) Utiliser différents éléments de formulaire.
<input type="file" name="file_a"> <input type="file" name="file_b"> <input type="file" name="file_c">
2) Utilisez des éléments de formulaire au format tableau.
<input type="file" name="file[]"> <input type="file" name="file[]"> <input type="file" name="file[]">
Chapitre 3 Téléchargement de fichiers
1) Pour les fichiers qui ne sont pas reconnus par le navigateur, vous pouvez directement utiliser une connexion pour les télécharger.
<!-- 因为他们三个浏览器不认识这样的类型 --> <a href="./downlist/1.rar">1.rar</a> <a href="./downlist/1.exe">1.exe</a> <a href="./downlist/1.avi">1.avi</a>
2) 对于浏览器不识别的,可以利用 readfile 函数。
<!-- 浏览器认识这样的类型,就会被解析 --> <a href="./action.php?name=1.html">1.html</a> <a href="./action.php?name=1.php">1.php</a> <a href="./action.php?name=1.txt">1.txt</a> <a href="./action.php?name=1.jpg">1.jpg</a> //接收一下name值. $name = $_GET['name']; //实现下载功能 //强制浏览器弹出另存为对话框 header('content-Disposition:attachment;filename="'.$name.'"'); //此时只是下载了一个空文件,需要利用readfile读一遍所有的内容.便可下载. $path = './downlist/'.$name; readfile($path);
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!