Heim >Backend-Entwicklung >PHP-Tutorial >So laden Sie Dateien in PHP hoch und laden sie herunter
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.
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)
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='./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'; }
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='./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; }
Aufruffunktion startet den Upload:
<?php include './function.php'; //var_dump($_FILES);exit; echo upload('file','./leiding',array('jpg','png'));
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['name']; //实现下载功能 //强制浏览器弹出另存为对话框 header('content-Disposition:attachment;filename="'.$name.'"'); //此时只是下载了一个空文件,需要利用readfile读一遍所有的内容.便可下载. $path = './downlist/'.$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!