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.
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;
}
}
?>
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.
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.
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()