Heim >Backend-Entwicklung >PHP-Tutorial >PHP implementiert das Hochladen und Herunterladen von Bildern
Der folgende Inhalt dieses Artikels befasst sich mit dem Hoch- und Herunterladen von Bildern über PHP
Erstellen einer Front-End-Seite zum Hochladen von Dateien
Hier verwende ich das Bootstrap-Front-End-Framework und Fontawesome-Symbolbibliothek, der Inhalt ist sehr einfach. Es handelt sich lediglich um ein Feld zum Hochladen von Bildern und eine Schaltfläche zum Senden. Der Code lautet wie folgt:
<!--form.php--> <div class="container"> <form action="upload_del.php" method="post" enctype="multipart/form-data" class="form-horizontal"> <input type="hidden" name="MAX_FILE_SIZE" value="2097152"> <div class="btn btn-success fileBox"> <span> <i class="fa fa-file-image-o"></i> 上传图片 </span> <input type="file" accept="image/*" name="file[]" multiple> </div> <input type="submit" value="上传" class="btn btn-primary"> </form> </div>
Darunter:
fefb76bc4cecc8a30778b88a3e178a2aversteckte Domäne Wird hauptsächlich für die aktuelle Datei-Upload-Größe verwendet, eingestellt auf 2M=>2*1024*1024=>2097152
276304f6ed3177e3b6962e7e64e0e5b2Stellen Sie den empfangenen Dateityp auf das Bildformat ein. Es können mehrere Bilder hochgeladen werden. Beachten Sie, dass der Server mehrere Bilder empfangen kann, wenn der Namensattributwert file[]
<?php /** * 获取上传文件信息,处理单文件和多文件上传 * @return array 上传文件信息 */ function getFiles() { $i = 0; $files=[]; foreach ($_FILES as $file) { if (is_string($file["name"])) { $files[$i] = $file; $i++; } elseif (is_array($file["name"])) { foreach ($file["name"] as $key => $val) { $files[$i]["name"] = $file["name"][$key]; $files[$i]["type"] = $file["type"][$key]; $files[$i]["tmp_name"] = $file["tmp_name"][$key]; $files[$i]["error"] = $file["error"][$key]; $files[$i]["size"] = $file["size"][$key]; $i++; } } } return $files; } /** * 获取文件的扩展名 * @param $filename:文件名 * @return string 扩展名 */ function getExt($filename) { return strtolower(pathinfo($filename, PATHINFO_EXTENSION)); } /** * 生成唯一字符串作为文件名 * @return string 唯一文件名 */ function getUniName() { return md5(uniqid(microtime(true), true)); } /** * 上传文件主处理模块 * @param $fileInfo:文件信息 * @param string $path:上传文件路径 * @param bool $flag:是否开启验证是否为真实图片 * @param int $maxSize:文件最大上传大小 * @param array $allowExt:允许的文件扩展名 * @return array 信息 */ function upload_file($fileInfo, $path = "./uploads", $flag = true, $maxSize = 2*1024 * 1024, $allowExt = ["jpeg", 'jpg', 'png', 'gif']) { $res = []; if ($fileInfo['error'] == UPLOAD_ERR_OK) { $ext = getExt($fileInfo["name"]); $uniName = getUniName(); $dest = $path . "/" . $uniName . "." . $ext; //检测上传文件大小 if ($fileInfo["size"] > $maxSize) { $res["msg"] = $fileInfo["name"] . "上传文件过大"; } //上传文件类型 if (!in_array($ext, $allowExt)) { $res["msg"] = $fileInfo["name"] . "非法文件类型"; } //检测是否为真实图片 if ($flag) { if (!getimagesize($fileInfo["tmp_name"])) { $res["mes"] = $fileInfo["name"] . "不是真实图片"; } } if ($res) return $res; if (!file_exists($path)) { mkdir($path, 0777, true); } if (!@move_uploaded_file($fileInfo["tmp_name"], $dest)) { $res['msg'] = $fileInfo["name"] . "文件上传失败"; } else { $res["msg"] = $fileInfo["name"] . "文件上传成功"; $res["dest"] = $dest; } return $res; } else { //判断错误信息 switch ($fileInfo["error"]) { case 1: $res["mes"] = "上传文件超过php配置文件中upload_max_filesize选项的值"; break; case 2: $res["mes"] = "超过了表单MMAX_FILE_SIZE限制的大小"; break; case 3: $res["mes"] = "文件部分被上传"; break; case 4: $res["mes"] = "没有选择上传文件"; break; case 6: $res["mes"] = "没有找到临时目录"; break; case 7: $res['msg'] = "文件写入失败"; break; case 8: $res["mes"] = "系统错误"; break; } return $res; } }Server Empfangen Sie die hochgeladene Datei und rufen Sie die Datei-Upload-Funktion upload_fun.php zur Verarbeitung auf:
<?php //upload_del.php require_once "upload_fun.php"; $files = getFiles(); foreach ($files as $fileInfo){ $res = upload_file($fileInfo); echo $res["msg"].'<br>'; $uploadFiles[] = $res["dest"]; } $uploadFiles = array_values(array_filter($uploadFiles)); print_r($uploadFiles);$uploadFiles = array_values(array_filter($uploadFiles)); Dieser Satz lautet Hauptsächlich, weil es beim Hochladen mehrerer Dateien zu Fehlern in einzelnen Dateien kommen kann. Der Upload-Fehler hat dazu geführt, dass ein Wert in $uploadFiles[] null war, also müssen wir ihn filtern und einem neuen Array
zuweisen