Maison  >  Article  >  développement back-end  >  Comment implémenter plusieurs téléchargements de fichiers en PHP

Comment implémenter plusieurs téléchargements de fichiers en PHP

小云云
小云云original
2018-03-30 13:12:475167parcourir

Cet article explique principalement comment implémenter plusieurs téléchargements de fichiers en PHP. J'espère qu'il pourra vous aider.

Processus de téléchargement de fichier PHP
1. Cliquez sur le bouton Soumettre et l'utilisateur du navigateur soumet les données du formulaire contenant le fichier téléchargé au gestionnaire PHP
2. Le serveur Web et le préprocesseur PHP déterminent d'abord le. form Si la taille des données dépasse la limite supérieure définie par l'option post_max_size dans le fichier de configuration php.ini.
S'il dépasse, le gestionnaire PHP ne pourra obtenir aucune donnée du formulaire. À ce moment-là, non seulement le téléchargement du fichier échouera, mais les données renseignées dans le contrôle du formulaire ne pourront pas non plus être soumises, c'est-à-dire : le Les variables prédéfinies du gestionnaire PHP $_GET, $_POST, $_FILES seront un tableau vide.
S'il ne dépasse pas la limite, le fichier sera téléchargé à l'étape 3 pour vérification.
3. Vérifiez si la taille du fichier dans le formulaire dépasse la limite supérieure définie par le champ caché du formulaire MAX_FILE_SIZE.
S'il dépasse, le préprocesseur PHP renvoie le code d'état 2 et le téléchargement du fichier échoue.
S'il ne dépasse pas la limite, le fichier sera téléchargé à l'étape 4 pour vérification.
(Lorsqu'il y a plusieurs fichiers à télécharger, l'échec du téléchargement de fichiers provoqué par une certaine boîte de téléchargement de fichiers n'affectera pas les résultats de téléchargement des autres boîtes de téléchargement de fichiers)
4. Vérifiez si les fichiers du formulaire dépassent la configuration php.ini. file La limite supérieure définie par l'option upload_max_filesize.
En cas de dépassement, le préprocesseur PHP renvoie le code d'état 1 et le téléchargement du fichier échoue.
S'il ne dépasse pas la limite, le fichier sera téléchargé à l'étape 5 pour vérification.
5. Pour implémenter le téléchargement de fichiers en PHP, vous devez créer un fichier temporaire correspondant au fichier téléchargé un à un (l'extension par défaut est tmp) dans le répertoire défini par l'option upload_tmp_dir dans la configuration php.ini. Une fois le téléchargement réussi, le fichier temporaire disparaît immédiatement. À ce moment, le préprocesseur PHP renvoie le code d'état 0.
Mais parfois, pour des raisons d'écriture tacites (telles que le paramètre de l'option max_execution_time est trop petit ou la vitesse du réseau est lente, etc.), après le téléchargement de certains fichiers, les fichiers restants ne sont plus téléchargés, ce qui entraîne l'échec du téléchargement du fichier. fois, le préprocesseur PHP renvoie le code d'état 3
S’il est réussi, le fichier sera téléchargé à l’étape 6 pour inspection.
6. L'étape clé pour réaliser le téléchargement de fichiers consiste à enregistrer le fichier temporaire sur le serveur Web ou le serveur de fichiers avant que le fichier temporaire ne disparaisse. Deux fonctions fournies par PHP : la fonction is_uploaded_file() et la fonction move_uploaded_file() peuvent aider à terminer cette étape de travail.


Plusieurs demandes de téléchargement de fichiers Notez que le le contenu des fichiers enregistrés sous le même nom est placé dans le tableau sous la forme suivante. Il s'agit de cinq tableaux, stockés séparément selon les cinq paramètres du fichier, et non de trois tableaux. Donc, si vous utilisez count($_FILES['$myPicture']) directement, la réponse est 5.

array (size=5)  'name' => 
    array (size=3)      0 => string '1.txt' (length=5)      1 => string '2.txt' (length=5)      2 => string '3.txt' (length=5)  'type' => 
    array (size=3)      0 => string 'text/plain' (length=10)      1 => string 'text/plain' (length=10)      2 => string 'text/plain' (length=10)  'tmp_name' => 
    array (size=3)      0 => string 'D:\wamp64\tmp\phpC5E8.tmp' (length=25)      1 => string 'D:\wamp64\tmp\phpC5E9.tmp' (length=25)      2 => string 'D:\wamp64\tmp\phpC5EA.tmp' (length=25)  'error' => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0
  'size' => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0

fichier index.php

<form action="fileSystem.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="submit" value="提交">
</form>

fichier fileSystem

<?php
    if (empty($_POST)) {        exit("提交的表单数据超过post_max_size的配置");
    }    $arr = $_FILES[&#39;myPicture&#39;];    $file =array();    for ($i=0; $i < count($arr[&#39;name&#39;]); $i++) { 
        $file[$i][&#39;name&#39;] = $arr[&#39;name&#39;][$i];        $file[$i][&#39;type&#39;] = $arr[&#39;type&#39;][$i];        $file[$i][&#39;tmp_name&#39;] = $arr[&#39;tmp_name&#39;][$i];        $file[$i][&#39;error&#39;] = $arr[&#39;error&#39;][$i];        $file[$i][&#39;size&#39;] = $arr[&#39;size&#39;][$i];
    }    for ($i=0; $i < count($file); $i++) { 
        switch ($file[$i][&#39;error&#39;]) {            case 0:          
                $fileName = $file[$i][&#39;name&#39;];                $fileTemp = $file[$i][&#39;tmp_name&#39;];                $destination = "uploads/" . $file[$i][&#39;name&#39;];
                move_uploaded_file($fileTemp, $destination);                echo "上传成功";                break;            case 1:                echo "上传附件超过php.ini中的upload_max_filesize选项的限制";                break;            case 2:                echo "上传附件的大小超过了form表单MAX_FILE_SIZE选项指定的值";                break;            case 3:                echo "附件只有部分被上传";                break;            case 4:                echo "没有选择上传附件";                break;
        } 
    }   
?>

🎜>Cliquez sur le bouton Soumettre, puis sur le bouton Soumettre. L'utilisateur du navigateur soumet les données du formulaire contenant le fichier téléchargé au gestionnaire PHP

2. Le serveur Web et le préprocesseur PHP déterminent d'abord si la taille des données du formulaire dépasse la taille du fichier de configuration php.ini. Le

post_max_size
L'option définit la valeur limite supérieure.
S'il dépasse, le gestionnaire PHP ne pourra obtenir aucune donnée du formulaire. À ce moment-là, non seulement le téléchargement du fichier échouera, mais les données renseignées dans le contrôle du formulaire ne pourront pas non plus être soumises, c'est-à-dire : le Les variables prédéfinies du gestionnaire PHP $_GET, $_POST, $_FILES seront un tableau vide. S'il ne dépasse pas la limite, le fichier sera téléchargé à l'étape 3 pour vérification. 3. Vérifiez si la taille du fichier dans le formulaire dépasse la limite supérieure définie par le champ caché du formulaire
MAX_FILE_SIZE
.
S'il dépasse, le préprocesseur PHP renvoie le code d'état 2 et le téléchargement du fichier échoue. S'il ne dépasse pas la limite, le fichier sera téléchargé à l'étape 4 pour vérification. (Lorsqu'il y a plusieurs fichiers à télécharger, l'échec du téléchargement de fichiers provoqué par une certaine boîte de téléchargement de fichiers n'affectera pas les résultats de téléchargement des autres boîtes de téléchargement de fichiers)
4. Vérifiez si les fichiers du formulaire dépassent la configuration php.ini. file La limite supérieure définie par l'option
upload_max_filesize
.
S'il dépasse, le préprocesseur PHP renvoie le code d'état 1 et le téléchargement du fichier échoue. S'il ne dépasse pas la limite, le fichier sera téléchargé à l'étape 5 pour vérification. 5. Pour implémenter le téléchargement de fichiers en PHP, vous devez créer un fichier temporaire correspondant au fichier téléchargé un à un (l'extension par défaut est tmp) dans le répertoire défini par l'option upload_tmp_dir dans la configuration php.ini. Une fois le téléchargement réussi, le fichier temporaire disparaît immédiatement. À ce moment, le préprocesseur PHP renvoie le code d'état 0.
Cependant, parfois pour des raisons d'écriture tacites (telles que le paramètre de l'option max_execution_time est trop petit ou la vitesse du réseau est lente, etc.), les fichiers restants ne sont plus téléchargés après le téléchargement de certains fichiers, ce qui entraîne l'échec du téléchargement du fichier. fois, le préprocesseur PHP renvoie le code d'état 3
S’il est réussi, le fichier sera téléchargé à l’étape 6 pour inspection.
6. L'étape clé pour réaliser le téléchargement de fichiers consiste à enregistrer le fichier temporaire sur le serveur Web ou le serveur de fichiers avant que le fichier temporaire ne disparaisse. Deux fonctions fournies par PHP : la fonction
is_uploaded_file()
et la fonction
move_uploaded_file() peuvent aider à compléter cette étape


Une chose à noter lors du téléchargement de plusieurs fichiers est que le contenu des fichiers enregistrés sous le même nom est placé dans le tableau sous la forme suivante. Il s'agit de cinq tableaux, stockés séparément selon les cinq paramètres du fichier, et non de trois tableaux. Donc, si vous utilisez count($_FILES['$myPicture']) directement, la réponse est 5.

array (size=5)  &#39;name&#39; => 
    array (size=3)      0 => string &#39;1.txt&#39; (length=5)      1 => string &#39;2.txt&#39; (length=5)      2 => string &#39;3.txt&#39; (length=5)  &#39;type&#39; => 
    array (size=3)      0 => string &#39;text/plain&#39; (length=10)      1 => string &#39;text/plain&#39; (length=10)      2 => string &#39;text/plain&#39; (length=10)  &#39;tmp_name&#39; => 
    array (size=3)      0 => string &#39;D:\wamp64\tmp\phpC5E8.tmp&#39; (length=25)      1 => string &#39;D:\wamp64\tmp\phpC5E9.tmp&#39; (length=25)      2 => string &#39;D:\wamp64\tmp\phpC5EA.tmp&#39; (length=25)  &#39;error&#39; => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0
  &#39;size&#39; => 
    array (size=3)      0 => int 0
      1 => int 0
      2 => int 0

fichier index.php

<form action="fileSystem.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="file" name="myPicture[]" size= "25" maxlength="100"><br>
    <input type="submit" value="提交">
</form>

fichier fileSystem

<?php
    if (empty($_POST)) {        exit("提交的表单数据超过post_max_size的配置");
    }    $arr = $_FILES[&#39;myPicture&#39;];    $file =array();    for ($i=0; $i < count($arr[&#39;name&#39;]); $i++) { 
        $file[$i][&#39;name&#39;] = $arr[&#39;name&#39;][$i];        $file[$i][&#39;type&#39;] = $arr[&#39;type&#39;][$i];        $file[$i][&#39;tmp_name&#39;] = $arr[&#39;tmp_name&#39;][$i];        $file[$i][&#39;error&#39;] = $arr[&#39;error&#39;][$i];        $file[$i][&#39;size&#39;] = $arr[&#39;size&#39;][$i];
    }    for ($i=0; $i < count($file); $i++) { 
        switch ($file[$i][&#39;error&#39;]) {            case 0:          
                $fileName = $file[$i][&#39;name&#39;];                $fileTemp = $file[$i][&#39;tmp_name&#39;];                $destination = "uploads/" . $file[$i][&#39;name&#39;];
                move_uploaded_file($fileTemp, $destination);                echo "上传成功";                break;            case 1:                echo "上传附件超过php.ini中的upload_max_filesize选项的限制";                break;            case 2:                echo "上传附件的大小超过了form表单MAX_FILE_SIZE选项指定的值";                break;            case 3:                echo "附件只有部分被上传";                break;            case 4:                echo "没有选择上传附件";                break;
        } 
    }   
?>

Recommandations associées :

php3.2 implémente plusieurs téléchargements de fichiers

Exemple d'analyse d'une méthode permettant à PHP d'implémenter plusieurs téléchargements de fichiers

Exemple d'analyse d'un seul fichier PHP et plusieurs fichiers Téléchargement de fichiers

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn