Heim  >  Artikel  >  Backend-Entwicklung  >  So laden Sie Dateien in PHP hoch und laden sie herunter

So laden Sie Dateien in PHP hoch und laden sie herunter

藏色散人
藏色散人nach vorne
2019-11-19 13:48:483868Durchsuche

Kapitel 1 Datei-Upload

1.1 Client-Upload-Einstellungen

Das Hochladen von Dateien ist zu einer gängigen Funktion in B/S-Programmen geworden. Der Zweck besteht darin, dass Kunden Dateien über den Browser (Browser) in das angegebene Verzeichnis auf dem Server (Server) hochladen können.

Gemeinsame Websites im Internet, die das Hochladen von Dateien unterstützen:

Verschiedene Netzwerkfestplatten

Avatar

Web-Fotoalbum

Authentifizierung mit echtem Namen

E-Mail-Anhänge

Einfach ausgedrückt erfordert die Webentwicklung, dass Benutzer Dateien an den Server übergeben, die alle in die Kategorie des PHP-Uploads fallen. Der Server kann nur Kopien akzeptieren, es sei denn, er führt diese Funktion nicht aus. Genau wie der 10086-Kundendienst akzeptiert er Ihren Anruf, wenn er ihn nicht akzeptiert, kann das nur bedeuten, dass der Server beschäftigt ist.

Grundkenntnisse zum Datei-Upload in PHP:

1) Client-Formulareinstellungen

2) Der Server betreibt und verarbeitet hochgeladene Dateien

Müssen Formularelemente festgelegt werden:

<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>

Beachten Sie mehrere charakteristische Attribute:

1. Dateien müssen im Post-Modus hochgeladen werden und der Get-Modus ist nicht verfügbar.

2. Enctype="multipart/form-data" muss in das Formular geschrieben werden.

3. Der Name muss in das Eingabeformular eingetragen werden.

1.2 Verarbeitung von Uploads über PHP auf der Serverseite

Der Empfang und die Verarbeitung hochgeladener Dateien werden über PHP-Skripte abgewickelt, die die folgenden drei Informationsaspekte erfordern:

1 ) Legen Sie die Anweisungen in der PH-Konfigurationsdatei fest: Wird zur Feinanpassung der Datei-Upload-Funktion von PHP verwendet.

2) Mehrdimensionales Array $FILES: Wird zum Speichern verschiedener Informationen zu hochgeladenen Dateien verwendet. Andere Daten werden weiterhin mit $_POST abgerufen.

3) PHP-Datei-Upload-Verarbeitungsfunktion: Wird für die anschließende Verarbeitung hochgeladener Dateien verwendet.

1) Optionen im Zusammenhang mit dem Datei-Upload in der PHP-Konfigurationsdatei.

So laden Sie Dateien in PHP hoch und laden sie herunter

2) $_FILES mehrdimensionales Array.

Super globales Array $_FILES

1. Der Wert in $_FILES["myfile"]["name"] ist: der Name der Datei im Client-Dateisystem.

2. Der Wert in $FILES["myfile"]["type"] ist: der vom Client übergebene Dateityp.

3. Der Wert in $_FILES["myfile"]["size"] ist: die Größe der Datei in Bytes.

4. Der Wert in $_FILES["myfile"]["tmp_name"] ist: der temporäre vollständige Pfad, der auf dem Server gespeichert wird, nachdem die Datei hochgeladen wurde.

5. Der Wert in $_FILES["myfile"]["error"] ist: der Fehlercode beim Datei-Upload – eine Funktion, die nach PHP 4.2 hinzugefügt wurde.

Über den Fehlercode beim Datei-Upload:

UPLOAD_ERR_OK

Der Wert ist 0, es tritt kein Fehler auf und der Datei-Upload ist erfolgreich.

UPLOAD_ERR_INI_SIZE

Der Wert ist 1 und die hochgeladene Datei überschreitet den durch die Option upload_max_filesize in php.ini begrenzten Wert.

UPLOAD_ERR_FORM_SIZE

Bei einem Wert von 2 überschreitet die Größe der hochgeladenen Datei den durch die Option MAX_FILE_SIZE im HTML-Formular angegebenen Wert.

UPLOAD_ERR_PARTIAL

Der Wert ist 3, die Datei wird nur teilweise hochgeladen.

UPLOAD_ERR_NO_FILE

Der Wert ist 4 und es wurde keine Datei hochgeladen.

UPLOAD_ERR_NO_TMP_DIR

Der Wert ist 6 und der temporäre Ordner kann nicht gefunden werden. Eingeführt in PHP 4.3.10 und PHP 5.0.3.

UPLOAD_ERR_CANT_WRITE

Der Wert ist 7, das Schreiben der Datei ist fehlgeschlagen. Eingeführt in PHP 5.1.0.

Hinweis: Die oben genannten Werte wurden nach PHP 4.3.0 zu PHP-Konstanten.

Gemeinsames Datenformat (MIME)

So laden Sie Dateien in PHP hoch und laden sie herunter

3) PHP-Datei-Upload-Verarbeitungsfunktion

Die erfolgreich hochgeladene Datei wird im temporären Verzeichnis auf der Serverseite abgelegt und der Dateiname ist ein zufällig generierter temporärer Dateiname.

Hinweis: Diese Datei wird nach der Ausführung des Programms automatisch gelöscht. Kann vor dem Löschen wie eine lokale Datei bearbeitet werden.

Datei-Upload-Verarbeitungsfunktion:

is_uploaded_file – Bestimmen Sie, ob die Datei über HTTP POST hochgeladen wird.

Format: bool is_uploaded_file (string $filename)

move_uploaded_file – Verschieben Sie die hochgeladene Datei an einen neuen Speicherort.

Format: bool move_uploaded_file (string $filename, string $destination)

Hinweis: Wenn die Zieldatei bereits vorhanden ist, wird sie überschrieben.

Parameterbeschreibung: temporäres Verzeichnis der Dateien, das Speicherortverzeichnis, in das verschoben werden soll

Fall:

1) Stellen Sie die Front-End-Upload-Schnittstelle ein

<!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 verarbeitet die in das temporäre Verzeichnis

  //专业搬运工具
    //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;;
    }

hochgeladenen Dateien und kapselt sie in Funktionen:

Idee:

  function upload(){
        //1.判断文件上传错误
        //2.判断你文件上传的类型是否是你想要的类型
        //3.起名字
        //4.判断保存路径是否存在
        //5.判断是否是http post方式上传
        //6.移动图片
        //7.返回移动成功的图片名
    }

Beginnen Sie mit der Kapselung der Funktion: Erstellen Sie eine neue 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;
    }

Aufruffunktion startet den Upload:

<?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;));

Kapitel 2 Hochladen mehrerer Dateien

2.1 Hochladen mehrerer Dateien mit unterschiedlichen Namen

Wenn mehrere Dateien hochgeladen werden müssen, gibt es zwei Implementierungslösungen:

1) Verwenden Sie unterschiedliche Formularelemente.

<input type="file" name="file_a">
<input type="file" name="file_b">
<input type="file" name="file_c">

2) Verwenden Sie Formularelemente im Array-Format.

<input type="file" name="file[]">
<input type="file" name="file[]">
<input type="file" name="file[]">

Kapitel 3 Datei-Download

1) Für Dateien, die vom Browser nicht erkannt werden, können Sie sie direkt über eine Verbindung herunterladen.

  <!-- 因为他们三个浏览器不认识这样的类型 -->
    <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);

Das obige ist der detaillierte Inhalt vonSo laden Sie Dateien in PHP hoch und laden sie herunter. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:learnku.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen