Téléchargement de fichiers PHP

Pour réussir à implémenter la fonction de téléchargement, vous devez d'abord activer le téléchargement de fichiers dans php.ini et définir des paramètres raisonnables pour certains paramètres. Recherchez l'élément de téléchargement de fichiers et vous pouvez voir qu'il y a trois attributs ci-dessous, avec les significations suivantes.

file_upload : Si la valeur est activée, cela signifie que le serveur prend en charge le téléchargement de fichiers. Sinon

upload_tmp_dir : répertoire temporaire pour télécharger les fichiers. Avant que le fichier ne soit téléchargé avec succès, le fichier est d'abord stocké dans le répertoire temporaire du serveur. Si vous souhaitez connaître l'emplacement, vous pouvez définir le chemin de stockage ultérieurement. Sinon, utilisez le répertoire par défaut du système

upload_max_filesize : La valeur maximale des fichiers autorisés à être téléchargés par le serveur, en Mo. La valeur par défaut du système est de 2 Mo, les utilisateurs peuvent la définir eux-mêmes

★ Si vous utilisez le package d'installation intégré pour configurer l'environnement de développement PHP, les informations de configuration décrites ci-dessus ont été configurées par défaut.


Étapes de téléchargement de fichiers

Pour un meilleur apprentissage de PHP, nous avons résumé le téléchargement complexe de fichiers PHP en 6 étapes.

En utilisation réelle, vous pouvez terminer avec succès le téléchargement de fichiers PHP en suivant ces 6 étapes :

1. Déterminez s'il y a un code d'erreur

Explication détaillée du code d'erreur renvoyé par le système :


Code d'erreur Description
0 Correct, vous pouvez continuer les opérations ultérieures de téléchargement de fichiers.


1

Dépasse la limite maximale de fichiers téléchargés, upload_max_filesize = 2M est défini en php. ini, généralement la valeur par défaut est 2M. Peut être modifié en fonction des besoins réels du projet

                                                                          

La taille du fichier spécifiée a été dépassée, spécifiez la limite de taille pour les fichiers téléchargés en fonction des besoins commerciaux du projet
3Seuls certains fichiers ont été téléchargé
     4文件没有被上传
     6找不到临时文件夹,可能目录不存在或没权限
     7文件写入失败,可能磁盘满了或没有权限
4<🎜><🎜>Le fichier n'a pas été téléchargé<🎜 ><🎜> <🎜><🎜> 6<🎜><🎜>Le dossier temporaire est introuvable. Le répertoire n'existe peut-être pas ou n'a aucune autorisation<🎜><🎜><🎜><🎜> 7<🎜>< 🎜>L'écriture du fichier a échoué, peut-être que le disque est plein ou qu'il n'y a pas d'autorisation <🎜><🎜><🎜><🎜>

Remarque★ : Il n'y a pas de 5 dans le code d'erreur


2. Personnaliser s'il faut juger si la plage de taille de fichier a dépassé

lors du développement de la fonction de téléchargement. En tant que développeurs, nous, en plus de la valeur de téléchargement maximale spécifiée dans php.ini.

Nous définissons généralement également une valeur, qui correspond à la taille limite de téléchargement spécifiée par l'entreprise.

Par exemple :

Sina Weibo ou QQ Zone n'autorise qu'une seule photo d'avatar de 2M. Lors du téléchargement d’albums, vous pouvez en télécharger plus de 2 millions.

Ainsi, son système prend en charge le téléchargement de fichiers plus volumineux.

La taille du fichier de jugement ici est utilisée pour limiter la taille du fichier téléchargé que nous souhaitons spécifier dans les affaires réelles.


3. Déterminez si le nom du suffixe et le type MIME correspondent.

MIME (MultiPurpose Internet Mail Extensions) est un type d'extension de messagerie Internet polyvalente. Il s'agit d'un type de méthode qui définit un fichier avec une certaine extension à ouvrir par une application. Lors de l'accès au fichier avec l'extension, le navigateur utilisera automatiquement l'application spécifiée pour l'ouvrir. Il est principalement utilisé pour spécifier certains noms de fichiers définis par le client et certaines méthodes d'ouverture de fichiers multimédias.

Lors de la détermination du suffixe et du type MIME, nous utiliserons une fonction PHP in_array(), qui transmet deux paramètres.

Le premier paramètre est la valeur à juger

Le deuxième paramètre est le tableau de plage.

Nous utilisons cette fonction pour déterminer si l'extension du fichier et le type MIME se situent dans la plage autorisée.


4. Générer le nom du fichier

Notre fichier a été téléchargé avec succès, mais il n'enregistrera pas le nom d'origine.

Parce que certaines personnes qui ont des mots-clés sensibles dans leur nom d'origine enfreindront les lois et réglementations en vigueur dans notre pays.


Nous pouvons utiliser date(), mt_rand() ou unique() pour générer des noms de fichiers aléatoires.


5. Déterminez si le fichier est téléchargé.
Notre fichier a été téléchargé avec succès, mais il n'enregistrera pas le nom d'origine.

Parce que certaines personnes qui ont des mots-clés sensibles dans leur nom d'origine enfreindront les lois et réglementations en vigueur dans notre pays.


Nous pouvons utiliser date(), mt_rand() ou unique() pour générer des noms de fichiers aléatoires. Une fois le téléchargement du fichier réussi, le système télécharge le fichier temporaire téléchargé dans le répertoire temporaire du système. Créez un fichier temporaire.

Un nom de fichier temporaire sera également généré. Ce que nous devons faire est de déplacer les fichiers temporaires vers le répertoire spécifié sur le système.

Il n'est pas scientifique de ne pas bouger aveuglément avant de bouger, ou de mal bouger. Avant de déménager, nous devons utiliser les fonctions pertinentes pour déterminer si le fichier téléchargé est un fichier temporaire.

is_uploaded_file() transmet un paramètre (le nom du fichier cache dans $_FILES) pour déterminer si le nom transmis est un fichier téléchargé.


6. Déplacer les fichiers temporaires vers le répertoire spécifié

Les fichiers temporaires sont de vrais fichiers temporaires, nous devons les déplacer vers notre dans le répertoire du site Web.

Rendre les données de notre répertoire de sites Web accessibles aux autres.

Nous utilisons : move_uploaded_file().
Cette fonction déplace le fichier téléchargé vers l'emplacement spécifié et le nomme.
Transmettez deux paramètres :
Le premier paramètre est le fichier téléchargé à déplacer
Le deuxième paramètre est une chaîne concaténée avec le dossier et le nom spécifiés ;

Pour télécharger des fichiers, un formulaire doit être préparé sur la page Web. Comme les

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>PHP中文网</title>
 </head>
 <body>
 
 <form action="file.php" method="post" enctype="multipart/form-data">
     <input type="file" name="file">
     <input type="submit" value="上传">
 </form>
 
 </body>
 </html>

Notes suivantes :

1. La méthode de paramètre dans le formulaire doit être post. S'il est obtenu, le téléchargement du fichier ne peut pas être effectué

2. L'enctype doit être multipart/form-dat

3 Lorsque type=file est sélectionné, la valeur par défaut est de télécharger le contenu du fichier. .

Le contenu du fichier soumis par le formulaire ci-dessus 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 : .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, nous imprimons $_FILES pour observer la structure de ce tableau :

 <?php
//var_dump()或print_r()
//打印变量的相关信息,将变量的信息详细的展示出来
var_dump($_FILES);
?>

Résultats de l'exécution du programme :

array(1) {
["file"]=>
array(5) {
["name"]=>
string(7) "psu.jpg"
["type"]=> ;
string(10) "image/jpeg"
["tmp_name"]=>
string(22) "C:WindowsphpE2F1.tmp"
["error"]=>
int(0)
["size"]=>
int(488929)
}
}

La structure du tableau du résultat imprimé est la suivante :

array (size=1)
'file' =>
array (size=5)
//Nom du fichier
'name' => string 'psu .jpg' (longueur=7)
//Type de fichier MIME
'type' => chaîne 'image/jpeg' (longueur=10)


// Fichiers cache, les images téléchargées sont enregistrées ici
'tmp_name' => string 'E:wamptmpphpC32A.tmp' (longueur=23)
// Code d'erreur, voir l'introduction du code d'erreur ci-dessus pour plus de détails
' error' => ; int 0                                                                                                                                                                                                                                                                   🎜>


Compris La structure du tableau ci-dessus.

Nous pouvons démarrer le processus de traitement du dossier

.

La première étape consiste à déterminer le code d'erreur

<?php
header("Content-type:text/html;charset=utf-8");
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{
    echo "上传成功";//错误码为0,即上传成功,可以进行后续处理,处理流程见下文
}
?>

Le code ci-dessus est présenté en détail Connaissant le code d'erreur et l'erreur correspondante, nous pouvons générer des invites d'erreur précises basées sur le code d'erreur.


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 restrictions, nous devons donc imposer des restrictions sur utilisateurs Limiter la taille des fichiers téléchargés. Définir une taille limite appropriée peut rendre

notre application plus stable.

<?php
header("Content-type:text/html;charset=utf-8");
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. Il faut donc passer

Utilisez 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 ci-dessous, 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. les exigences, un message d’erreur est renvoyé.

/* Déterminer si le nom du suffixe et le type MIME répondent aux exigences spécifiées

Par exemple :
Le projet en cours spécifie de télécharger des images avec le suffixe .jpg ou .gif , puis $allowSuffix = array ('jpg','gif');
*/


//Définissez le tableau de noms de suffixes autorisé
$myImg = explosive('.', $_FILES['file' ; Stocké dans $myImg, le suffixe du fichier est la dernière valeur du tableau
*/


$myImgSuffix = array_pop($myImg);

/*
Obtenez le nom de suffixe du fichier en fonction du nom du fichier téléchargé
Utilisez la fonction in_array() pour déterminer si le fichier téléchargé répond aux exigences
Lorsque le nom de suffixe du fichier n'est pas dans notre plage autorisée, quittez le téléchargement et renvoyez un message d'erreur
*/

if(!in_array($myImgSuffix, $allowSuffix)){                                                                            et fichiers Nous pouvons interroger la relation correspondante du nom de suffixe à travers de nombreux Afin d'éviter la modification par l'utilisateur du nom du suffixe du fichier, le fichier ne peut pas être utilisé.
Le type MIME doit également être restreint. Vérifier le type MIME permet d'empêcher le téléchargeur de modifier directement le suffixe du fichier
, ce qui rend le fichier indisponible ou le fichier téléchargé ne répond pas aux exigences.
*/

//Le contenu du tableau est le type MIME qui peut être téléchargé
$allowMime = array(
"image/jpg",
"image /jpeg",
"image/pjpeg",
"image/gif"
);


if(!in_array($_FILES['file']['type '], $allowMime)) {                                // Déterminer si le type MIME du fichier téléchargé se situe dans la plage autorisée
                                                                                                                                                        >}


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.

Générez le chemin de stockage des fichiers en fonction de la disposition des fichiers du projet. Afin d'éviter les erreurs causées par des noms de fichiers en double, générez un nom de fichier aléatoire selon un certain format.

//Spécifiez le dossier de téléchargement
$path = "upload/images/";

/*
Générez un nom de fichier aléatoire en fonction de l'heure actuelle, cette ligne de code Il utilise l'heure actuelle + un nombre aléatoire de 0 à 9 pour former un nom de fichier, et le suffixe est le nom de suffixe de fichier obtenu plus tôt
*/

$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

//Utilisez is_uploaded_file() pour déterminer s'il s'agit d'un fichier téléchargé Pour l'introduction de la fonction, voir ci-dessus
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.

/*
Utilisez move_uploaded_file() pour déplacer le fichier téléchargé vers l'emplacement spécifié. Le premier paramètre est le fichier téléchargé, et le deuxième paramètre est le chemin de téléchargement et le nom que nous avons spécifiés précédemment. " Téléchargement réussi ;                                                                                                                                                                                                                                           <                                      using echo 'Pas un fichier téléchargé' ; Un programme simple pour télécharger des images


Pour plus de détails, voir l'exemple 1





Téléchargement de plusieurs fichiers



Présente le processus de téléchargement d'un seul fichier en PHP. Mais parfois, pour des raisons de commodité, nous devons répondre au besoin de télécharger plusieurs fichiers en même temps. Le principe du téléchargement multi-fichiers est le même, mais lors du traitement des données, les données téléchargées doivent être spécialement traitées.

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>PHP中文网</title>
 </head>
 <body>
 <html>
 <body>
 <form action="morefile.php" method="post" enctype="multipart/form-data">
     <input type="file" name="file[]">
     <input type="file" name="file[]">
     <input type="submit" value="上传">
 </form>
 </body>
 </html>
 </body>
 </html>

Voici une simple page de téléchargement, et le formulaire soumet deux fichiers en même temps. Nous pouvons soumettre du contenu via cette page.

Remarque :

1. input type="file" name="file[]" Par rapport à avant, il y a un crochet supplémentaire après le fichier

2. Écrivez 2 ou plus input type="file" name="file[]"

La structure du tableau est la suivante

tableau (taille=1)
'fichier' =>
tableau (taille=5)
'nom' => >                                                                                                                                                                          🎜> 'type' = > tableau (taille =2)
0 => chaîne 'image/jpeg' (longueur=10)
1 => chaîne 'image/jpeg' (longueur=10)
//Fichier cache
'tmp_name ' => = > chaîne 'E:wamptmpphpF6F5.tmp' (longueur=23)
//Message d'erreur de fichier
'erreur' => > int 0
1 => int 0
//Taille du fichier
'size' =>
tableau (taille=2)
0 => 1 => int 151651



Nous pouvons voir que les deux fichiers sont stockés dans un tableau et que le nom de la clé est le même que celui du fichier téléchargé. Par conséquent, nous devons utiliser une boucle for() pour récupérer respectivement les données requises des deux fichiers.

Les données de deux fichiers sont enregistrées dans $_FILES en même temps. Nous devons utiliser une simple boucle pour lire les informations d'un seul fichier et déplacer le fichier vers l'emplacement souhaité.

for ($i=0; $i < count($_FILE['file']['name']); $i++) {

/*
Utiliser is_uploaded_file () La fonction détermine que le fichier est téléchargé
et qu'il n'y a pas d'erreur
*/

if(is_uploaded_file($_FILEs['file']['tmp_name'][$i]) && $_FILEs[ 'file']['error'][$i] == 0){  
  if(move_uploaded_file($_FILEs['file']['tmp_name'][$i],'upload/' .$_FILE[ 'file']['name'][$i])){
//Utilisez la fonction move_uploaded_file() pour déplacer le fichier vers l'emplacement spécifié et utilisez le nom d'origine du fichier
echo "Téléchargement réussi";

                                                                                                    🎜> }

}



Pour le processus de jugement détaillé, veuillez vous référer au téléchargement d'un fichier unique uniquement pour le jugement de base. est effectué ici, et il n'y a aucun rappel sur la taille et le format du fichier.




Exemple 1

Programme de téléchargement d'images


Page html du programme 1

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>PHP中文网</title>
 </head>
 <body>
 
 
 <form action="file-upload.php" enctype="multipart/form-data" method="post" name="uploadfile">
     上传文件:<input type="file" name="upfile" /><br>
     <input type="submit" value="上传" /></form>
 </form>
 
 </body>
 </html>
Programme 2

Envoyer à la page php

<?php
 header("Content-type:text/html;charset=utf-8");
 //print_r($_FILES["upfile"]); 
 if(is_uploaded_file($_FILES['upfile']['tmp_name'])){
     $upfile=$_FILES["upfile"];
 //获取数组里面的值 
     $name=$upfile["name"];//上传文件的文件名
     $type=$upfile["type"];//上传文件的类型
     $size=$upfile["size"];//上传文件的大小
     $tmp_name=$upfile["tmp_name"];//上传文件的临时存放路径
 //判断是否为图片 
     switch ($type){
         case 'image/pjpeg':$okType=true;
             break;
         case 'image/jpeg':$okType=true;
             break;
         case 'image/gif':$okType=true;
             break;
         case 'image/png':$okType=true;
             break;
     }
 
     if($okType){
         /**
          * 0:文件上传成功<br/>
          * 1:超过了文件大小,在php.ini文件中设置<br/>
          * 2:超过了文件的大小MAX_FILE_SIZE选项指定的值<br/>
          * 3:文件只有部分被上传<br/>
          * 4:没有文件被上传<br/>
          * 5:上传文件大小为0
          */
         $error=$upfile["error"];//上传后系统返回的值
         echo "上传文件名称是:".$name."<br/>";
         echo "上传文件类型是:".$type."<br/>";
         echo "上传文件大小是:".$size."<br/>";
         echo "上传后系统返回的值是:".$error."<br/>";
         echo "上传文件的临时存放路径是:".$tmp_name."<br/>";
 
         echo "开始移动上传文件<br/>";
 //把上传的临时文件移动到指定目录下面
         move_uploaded_file($tmp_name,'D:\upload/images/'.$name);
         $destination="D:\upload/images/".$name;
 
         echo "上传信息:<br/>";
         if($error==0){
             echo "文件上传成功啦!";
 
         }elseif ($error==1){
             echo "超过了文件大小,在php.ini文件中设置";
         }elseif ($error==2){
             echo "超过了文件的大小MAX_FILE_SIZE选项指定的值";
         }elseif ($error==3){
             echo "文件只有部分被上传";
         }elseif ($error==4){
             echo "没有文件被上传";
         }else{
             echo "上传文件大小为0";
         }
     }else{
         echo "请上传jpg,gif,png等格式的图片!";
     }
 }
 ?>
Trouver un Téléchargez des images et voyez les résultats d'exécution du programme

Exemple 2

Cet exemple comporte 4 domaines de téléchargement de fichiers, le fichier The le nom du domaine est u_file[] et les informations du fichier téléchargées après la soumission sont enregistrées dans $_FILES[u_file] pour générer un tableau multidimensionnel. Lisez les informations sur le tableau et téléchargez le fichier.


Page html du programme 1

<!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>PHP中文网</title>
 </head>
 <body>
 <html>
 <body>
 <p>请选择要上传的文件</p>
 <form action="morefile.php" method="post" enctype="multipart/form-data">
   <table border="1" bgcolor="f0f0f0">
       <tr>
           <td>上传文件</td>
           <td><input type="file" name="u_file[]"></td>
       </tr>
       <tr>
           <td>上传文件</td>
           <td><input type="file" name="u_file[]"></td>
       </tr>
       <tr>
           <td>上传文件</td>
           <td><input type="file" name="u_file[]"></td>
       </tr>
       <tr>
           <td>上传文件</td>
           <td><input type="file" name="u_file[]"></td>
       </tr>
       <tr>
           <td colspan="2"><input type="submit" value="上传"></td>
       </tr>
 
   </table>
 </form>
 </body>
 </html>
 </body>
 </html>
Programme 2 Soumettre à la page php
<?php
header("Content-type:text/html;charset=utf-8");
if(!empty($_FILES[u_file][name])){           //判断遍历$_FILES是否为空
    $file_name=$_FILES[u_file][name];         //将上传文件名另存为数组
    $file_tmp_name=$_FILES[u_file][tmp_name];      //将上传的临时文件名另存为数组
    for($i=0;$i<count($file_name);$i++){         //循环上传文件
        if($file_name[$i]!=""){                 //判断上传文件名是否为空
            move_uploaded_file($file_tmp_name[$i],$i.$file_name[$i]);
            echo "文件" .$file_name[$i] ."上传成功。更名为"."$file_name[$i]"."<br>";
        }
    }
}
?>
Exécutez votre programme et jetez un œil

Exemple 3


Cet exemple télécharge un formulaire, permettant le téléchargement de fichiers inférieurs à 1 Mo

<from action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</from>
<?php
if(!empty($_FILES[file][name])){      //判断是否有文件上传
    $fileinfo=$_FILES[file];         //将文件信息赋给变量$fileinfo
    if($fileinfo['size']<1000000 && $fileinfo['size']>0){         //判断文件大小
        echo "上传成功";
    }else{
        echo "上传文件太大或未知";
    }
}
?>
Exécutez votre programme.

Formation continue
||
<from action="" method="POST" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上传"> </from> <?php if(!empty($_FILES[file][name])){ //判断是否有文件上传 $fileinfo=$_FILES[file]; //将文件信息赋给变量$fileinfo if($fileinfo['size']<1000000 && $fileinfo['size']>0){ //判断文件大小 echo "上传成功"; }else{ echo "上传文件太大或未知"; } } ?>
soumettreRéinitialiser le code
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!