Maison >développement back-end >tutoriel php >Comment télécharger des fichiers et télécharger en PHP

Comment télécharger des fichiers et télécharger en PHP

藏色散人
藏色散人avant
2019-11-19 13:48:483923parcourir

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.

Comment télécharger des fichiers et télécharger en 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)

Comment télécharger des fichiers et télécharger en PHP

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=&#39;./biran/&#39;.date(&#39;Y/m/d/&#39;);
    //echo $dir;exit;
    //1.2 判断文件上传的路径是否存在 如果不存在就创建
    if(!file_exists($dir)){
        mkdir($dir,777,true);
    }
    //2.要有个好的文件名 唯一的文件名
    //2.1获取文件的后缀名
    //2.jpg  jpg 
    $suffix = pathinfo($_FILES[&#39;pic&#39;][&#39;name&#39;],PATHINFO_EXTENSION);
    //echo $suffix;
    //2.2重新起名
    $filename = date(&#39;Ymd&#39;).uniqid().mt_rand(0,9999).&#39;.&#39;.$suffix;
    //echo $filename;
    //开始搬运
    //判断是否是http post 传递的文件
    if(!is_uploaded_file($_FILES[&#39;pic&#39;][&#39;tmp_name&#39;])){
        //不是http post上传文件
        echo &#39;别整没用的!!&#39;;exit;
    }
    //开始真正的搬运
    if(move_uploaded_file($_FILES[&#39;pic&#39;][&#39;tmp_name&#39;],$dir.$filename)){
        echo &#39;11111111111&#39;;
    }else{
        echo &#39;22222222222&#39;;
    }

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=&#39;./upload/&#39;,$allow=array(&#39;jpg&#39;,&#39;gif&#39;,&#39;jpeg&#39;,&#39;png&#39;)){
        //echo $name;exit;
        //var_dump($_FILES);exit;
        //1.判断文件上传错误
        if($_FILES[$name][&#39;error&#39;]>0){
            //echo &#39;上传错误&#39;;
            switch($_FILES[$name][&#39;error&#39;]){
                case 1:
                    echo &#39;上传的文件超过了 php.ini 中upload_max_filesize 选项限制的值.&#39;;
                    break;
                case 2:
                    echo &#39;上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值&#39;;
                    break;
                case 3:
                    echo &#39;文件只有部分被上传.&#39;;
                    break;
                case 4:
                    echo &#39;没有文件被上传.&#39;;
                    break;
                case 6:
                    echo &#39;找不到临时文件夹.&#39;;
                    break;
                case 7:
                    echo &#39;文件写入失败.&#39;;
                    break;
            }
            return false;
        }
        //2.判断你文件上传的类型是否是你想要的类型
        //2.1允许上传的类型
        //2.2 获取后缀名
        $suffix = pathinfo($_FILES[$name][&#39;name&#39;],PATHINFO_EXTENSION);
        //echo $suffix;exit;
        //2.3 判断是否是我们允许上传的类型
        //var_dump(in_array($suffix,$allow));exit;
        if(!in_array($suffix,$allow)){
            //不允许上传的类型
            echo  &#39;大哥你的上传类型不符合&#39;;
            return false;
        }
        //3.起名字
        $filename = date(&#39;Ymd&#39;).uniqid().mt_rand(0,9999).&#39;.&#39;.$suffix;
        //echo $filename;exit;
        //4.判断保存路径是否存在
        //4.1 得到保存路径
        //4.2 处理保存路径和后面的斜杠
        $save_path = rtrim($dir,&#39;/&#39;);
        $save_path .=&#39;/&#39;;
        //4.3 保存路径中的时间文件夹处理
        $save_path .=date(&#39;Y/m/d/&#39;);
        //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][&#39;tmp_name&#39;])){
            echo &#39;滚蛋!&#39;;
            return false;
        }
        //6.移动图片
        if(!move_uploaded_file($_FILES[$name][&#39;tmp_name&#39;],$path)){
            echo &#39;移动失败&#39;;
            return false;
        }
        //7.返回移动成功的图片名
        return $filename;
    }

appel La fonction commence le téléchargement :

<?php
    include &#39;./function.php&#39;;
    //var_dump($_FILES);exit;
    echo upload(&#39;file&#39;,&#39;./leiding&#39;,array(&#39;jpg&#39;,&#39;png&#39;));

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[&#39;name&#39;];
//实现下载功能
//强制浏览器弹出另存为对话框
header(&#39;content-Disposition:attachment;filename="&#39;.$name.&#39;"&#39;);
//此时只是下载了一个空文件,需要利用readfile读一遍所有的内容.便可下载.
$path = &#39;./downlist/&#39;.$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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer