Verwenden von PHP zum Hochladen von Dateien in WordPress

Lesezeit: 4 Minuten

Ich versuche, Dateien vom Front-End einer WordPress-Seite hochzuladen, um sie an das Back-End-Wordpress-Verzeichnis innerhalb von wp-content zu senden. Ich kann nicht herausfinden, warum Dateien nicht im Back-End-Ordner „uploads“ angezeigt werden, auf den $target_dir eingestellt ist. Hier ist mein HTML Formular auf einer Seite.

<form action="http://www.aeroex.co.uk/php-upload/" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>

Die Formularaktionsseite für das obige Formular, www.aeroex.co.uk/php-upload/ , enthält den folgenden PHP-Code:

<?php
$target_dir = "http://www.aeroex.co.uk/home3/dy/public_html/wp-content/uploads";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
} else {
    echo "File is not an image.";
    $uploadOk = 0;
}
}
?>

Benutzer-Avatar
Kalimah

Ein empfohlener Ansatz ist die Verwendung wp_handle_upload() Funktion. Sie können es mit verwenden wp_insert_attachment() wenn Sie Dateien zur Medienbibliothek hinzufügen möchten.

Die erste Funktion wp_handle_upload() macht:

Behandeln Sie PHP-Uploads in WordPress, bereinigen Sie Dateinamen, Überprüfung von Erweiterungen auf MIME-Typund Verschieben der Datei in das entsprechende Verzeichnis innerhalb des Uploads-Verzeichnisses.

Ein Beispiel von der WordPress-Site mit einigen Änderungen

if ( ! function_exists( 'wp_handle_upload' ) ) {
    require_once( ABSPATH . 'wp-admin/includes/file.php' );
}

$uploadedfile = $_FILES['file'];

/* You can use wp_check_filetype() function to check the
 file type and go on wit the upload or stop it.*/

$movefile = wp_handle_upload( $uploadedfile);

if ( $movefile && !isset( $movefile['error'] ) ) {
    echo "File is valid, and was successfully uploaded.\n";
    var_dump( $movefile);
} else {
    /**
     * Error generated by _wp_handle_upload()
     * @see _wp_handle_upload() in wp-admin/includes/file.php
     */
    echo $movefile['error'];
}

Alternativ könntest du einfach verwenden wp_upload_dir() um nur das Upload-Verzeichnis zu erhalten.

Weitere Informationen zur Verwendung der nativen WordPress-Funktion zum Hochladen finden Sie in diesem Artikel:
So laden Sie eine Datei mit den geheimen nativen Funktionen von WordPress hoch

  • Funktioniert bei mir nur, wenn ich die Leitung umstelle $movefile = wp_handle_upload( $uploadedfile, array( 'test_form' => false )); wie hier empfohlen

    – Fanky

    29. Oktober 2019 um 18:41 Uhr

  • Ich denke auch nicht, wie ich wp_check_filetype() auf $_FILES ausführen würde. Eine Alternative, die ich gefunden habe, ist if (in_array(finfo_file(finfo_open(FILEINFO_MIME_TYPE), $uploadedfile['tmp_name']), array('image/jpeg', 'image/png','image/gif'))){ /*do the rest*/ }

    – Fanky

    29. Oktober 2019 um 20:41 Uhr

pathinfo() erwartet einen Pfad, keine URL.

$target_dir sollte ein Pfad sein, zB: /home3/dy/public_html/wp-content/uploads. Überprüfen Sie $_SERVER[‘DOCUMENT_ROOT’] wenn Sie sich nicht sicher sind.

$target_file = $target_dir . "https://stackoverflow.com/" . basename($_FILES["fileToUpload"]["name"]);

Dann haben Sie einen Pfad, in den die Dateien hochgeladen werden sollen. Jetzt müssen Sie ausführen:

move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file);

  • Wo führe ich diese Codezeile aus? Setze ich es nach $target_file ?

    – viel Glück

    21. Februar 2016 um 22:14 Uhr

  • move_uploaded_file() ist etwas, das Sie ausführen, wenn $uploadOk == 1. Aber vorher stellen Sie bitte sicher, dass Sie wissen, was $target_dir tatsächlich ist. Wenn ich das richtig verstehe, sollte dies der Pfad sein: $target_dir = $_SERVER[‘DOCUMENT_ROOT’] . ‘/wp-content/uploads’;

    – Tim Hysniu

    21. Februar 2016 um 22:30 Uhr


  • Obwohl dies gut funktioniert und meine Datei in das Verzeichnis hochlädt, erhalte ich weiterhin die folgende Meldung: Warning: getimagesize(/tmp/phpD8fHDn): failed to open stream: No such file or directory in /home3/ddy/public_html/wp- content/themes/vantage/templates/template-upload.php in Zeile 26 Datei ist kein Bild.

    – viel Glück

    22. Februar 2016 um 12:03 Uhr


  • Wenn Sie bereits move_uploaded_file() verwendet haben, befindet sich die Datei nicht mehr an diesem Ort: $_FILES[“fileToUpload”][“tmp_name”]. Sie möchten getimagesize() verwenden, bevor Sie es verschieben. Schließlich empfehle ich, auch Kalimahs Antwort zu berücksichtigen. Es ist möglicherweise nicht immer anwendbar, aber es ist die von WordPress empfohlene Methode zum Umgang mit Uploads.

    – Tim Hysniu

    22. Februar 2016 um 16:27 Uhr

  • Es wurde sortiert, indem $check = getimagesize($target_file); . Die Meldung kommt nicht mehr, also funktioniert alles einwandfrei.

    – viel Glück

    22. Februar 2016 um 21:35 Uhr

Wenn Sie eine Datei in die Bibliothek hochladen und an einen Beitrag anhängen möchten, können Sie die WordPress-Funktion verwenden media_handle_upload()

$attachment_id = media_handle_upload( 'your_file_field_name', $post_id);

Siehe Beispiel

1175340cookie-checkVerwenden von PHP zum Hochladen von Dateien in WordPress

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy