Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehe ich mit dem Datei-Upload in PHP um?

Wie gehe ich mit dem Datei-Upload in PHP um?

WBOY
WBOYOriginal
2023-05-11 22:31:341939Durchsuche

Mit der kontinuierlichen Weiterentwicklung der Internettechnologie ist die Funktion zum Hochladen von Dateien zu einem wesentlichen Bestandteil vieler Websites geworden. In der PHP-Sprache können wir Datei-Uploads über einige Klassenbibliotheken und Funktionen verarbeiten. Dieser Artikel konzentriert sich auf die Datei-Upload-Verarbeitungsmethode in PHP.

1. Formulareinstellungen

Im HTML-Formular müssen wir das enctype-Attribut auf „multipart/form-data“ setzen, um das Hochladen von Dateien zu unterstützen. Der Code lautet wie folgt:

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" value="上传"/>
</form>

Unter diesen ist das Typattribut des Eingabe-Tags „Datei“ und das Namensattribut „Datei“, mit dem der Name der hochgeladenen Datei angegeben wird.

2. PHP-Datei-Upload-Verarbeitung

In PHP können wir die globale Variable $_FILES verwenden, um Datei-Uploads zu verarbeiten. Angenommen, die in unserem Formular hochgeladene Datei heißt „Datei“, dann können Sie in PHP die hochgeladenen Dateiinformationen über $_FILES['file'] abrufen. Das Array

$_FILES enthält fünf Elemente:

  1. Name: der Name der hochgeladenen Datei.
  2. Typ: Typ der hochgeladenen Datei.
  3. tmp_name: Temporärer Speicherpfad der hochgeladenen Dateien.
  4. Fehler: Fehlercode beim Hochladen von Dateien.
  5. Größe: Die Größe der hochgeladenen Datei (in Bytes).

Als nächstes können wir die Funktion move_uploaded_file() verwenden, um die hochgeladene Datei in den angegebenen Ordner zu verschieben. Der Code lautet wie folgt:

$target_dir = "uploads/";   //上传文件的目标文件夹
$target_file = $target_dir . basename($_FILES["file"]["name"]);   //上传文件的完整路径
if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
    echo "文件上传成功!";
} else {
    echo "文件上传失败!";
}

Im obigen Code gibt die Variable $target_dir den Zielordner der hochgeladenen Datei an und die Variable $target_file enthält den vollständigen Pfad der hochgeladenen Datei. Wir können die Funktion move_uploaded_file() verwenden, um temporäre Dateien in das angegebene Verzeichnis zu verschieben. Gibt true zurück, wenn die Verschiebung erfolgreich ist, andernfalls false.

Um die Sicherheit der Dateien zu gewährleisten, müssen wir beim Hochladen von Dateien bestimmte Prüfungen und Filter an den hochgeladenen Dateien durchführen. Beispielsweise können wir mit der Funktion is_uploaded_file() prüfen, ob die hochgeladene Datei wirklich vom Client stammt. Der Code lautet wie folgt:

if(is_uploaded_file($_FILES['file']['tmp_name'])){
    //处理上传文件
}else{
    echo "非法的文件上传!";
}

Wir können auch die Funktion getimagesize() verwenden, um die Breite und Höhe des hochgeladenen Bildes abzurufen. Der Code lautet wie folgt:

if (is_uploaded_file($_FILES['file']['tmp_name'])) {
    $image_info = getimagesize($_FILES['file']['tmp_name']);
    echo "图片宽度:".$image_info[0]."<br/>";
    echo "图片高度:".$image_info[1]."<br/>";
    echo "图片类型:".$image_info[2]."<br/>";
} else {
    echo "非法的文件上传!";
}

3. Begrenzen Sie die Größe der hochgeladenen Dateien

Die Standardbeschränkung für die Dateigröße, die in PHP hochgeladen werden kann, beträgt 2 MB. Wir können diese Beschränkung jedoch auch ändern, indem wir die Konfigurationsdatei ändern oder festlegen in PHP. In der Datei php.ini können wir beispielsweise upload_max_filesize und post_max_size festlegen, um die Größe der hochgeladenen Dateien zu begrenzen.

Wenn wir den Maximalwert hochgeladener Dateien in PHP festlegen möchten, können wir die Funktion ini_set() verwenden, um die Einstellungen in php.ini zu ändern. Der Code lautet wie folgt:

//设置上传文件的最大值为10M
ini_set("upload_max_filesize","10M");
ini_set("post_max_size","10M");

Wir können auch $_SERVER['CONTENT_LENGTH'] verwenden, um die Inhaltslänge in den Header-Informationen der Client-Anfrage abzurufen und festzustellen, ob die hochgeladene Datei die angegebene Größe überschreitet. Der Code lautet wie folgt:

if($_SERVER['CONTENT_LENGTH'] > MAX_SIZE){
    echo "上传文件超过了指定大小!";
}

Im Frontend-Teil können Sie auch das Plug-In jQuery.uploadFile.js verwenden, um die Größe der hochgeladenen Dateien zu begrenzen. Der Code lautet wie folgt:

<input type="file" name="file" id="file"/>
<script src="js/jquery-1.12.4.min.js"></script>
<script src="js/jquery.uploadfile.js"></script>
<script>
    $("#file").uploadFile({
        url: "upload.php",   //处理文件上传的PHP脚本
        maxFileSize: 1024*1024*5,   //最大上传文件的大小,此处为5M
    });
</script>

4. Umgang mit Datei-Upload-Fehlern

Beim Hochladen von Dateien können einige Fehler auftreten. Beispielsweise ist die hochgeladene Datei zu groß, der hochgeladene Dateityp ist nicht zulässig, der Zielordner existiert nicht usw. Wir müssen diese Fehler beheben, um die Benutzererfahrung und die Effektivität des Datei-Uploads zu verbessern.

Einige Fehlercodes sind in PHP definiert, um uns die Fehlerbeurteilung und -verarbeitung zu erleichtern. Zum Beispiel:

  1. UPLOAD_ERR_OK (0): Hochladen erfolgreich.
  2. UPLOAD_ERR_INI_SIZE(1): Die hochgeladene Datei überschreitet die Konfiguration in php.ini.
  3. UPLOAD_ERR_FORM_SIZE(2): Die hochgeladene Datei überschreitet den durch MAX_FILE_SIZE im Formular angegebenen Wert.
  4. UPLOAD_ERR_PARTIAL(3): Nur ein Teil der hochgeladenen Datei wurde hochgeladen.
  5. UPLOAD_ERR_NO_FILE(4): Es wurde keine Datei hochgeladen.
  6. UPLOAD_ERR_NO_TMP_DIR(6): Temporärer Ordner nicht gefunden.
  7. UPLOAD_ERR_CANT_WRITE(7): Das Schreiben der Datei ist fehlgeschlagen.

Wir können Switch-Anweisungen verwenden, um diese Fehler zu behandeln. Der Code lautet wie folgt:

switch ($_FILES['file']['error']) {
    case UPLOAD_ERR_OK:
        //上传成功
        break;
    case UPLOAD_ERR_INI_SIZE:
        echo "上传的文件超过了php.ini中的配置。";
        break;
    case UPLOAD_ERR_FORM_SIZE:
        echo "上传的文件超过了表单中的MAX_FILE_SIZE指定的值。";
        break;
    case UPLOAD_ERR_PARTIAL:
        echo "上传的文件只有部分被上传。";
        break;
    case UPLOAD_ERR_NO_FILE:
        echo "没有文件被上传。";
        break;
    case UPLOAD_ERR_NO_TMP_DIR:
        echo "找不到临时文件夹。";
        break;
    case UPLOAD_ERR_CANT_WRITE:
        echo "文件写入失败。";
        break;
    default:
        echo "未知错误。";
        break;
}

Wenn Sie die hochgeladenen Dateitypen auf bestimmte Typen beschränken möchten, können Sie die Funktion in_array() verwenden, um ein Urteil zu fällen. Der Code lautet wie folgt:

$allowed_types = array('jpg', 'jpeg', 'gif', 'png');   //允许上传的文件类型
$filename = $_FILES['file']['name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);   //获取文件类型后缀
if (!in_array($ext, $allowed_types)) {
    echo "不允许上传此类型的文件。";
}

5. Zusammenfassung

Das Hochladen von Dateien ist ein häufiges Problem in der Webentwicklung. PHP bietet eine Vielzahl von Methoden und Funktionen zum Hochladen von Dateien. Zusätzlich zu den oben vorgestellten Methoden können wir auch PHP-Klassenbibliotheken für die Datei-Upload-Verarbeitung verwenden, wie z. B. PHP File Uploader (https://www.github.com/verot/class.upload.php) und FineUploader (https:/ /fineuploader.com/). Unabhängig davon, welche Methode verwendet wird, müssen wir die Sicherheit und Gültigkeit der hochgeladenen Dateien gewährleisten.

Das obige ist der detaillierte Inhalt vonWie gehe ich mit dem Datei-Upload in PHP um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn