web-dev-qa-db-de.com

wp_handle_upload - Die hochgeladene Datei konnte nicht nach wp-content/uploads/2012/09 verschoben werden

Dies ist der Code, mit dem ich die Datei auf WordPress hochlade

define(‘WP_DEBUG’, true);

$filename = "test.png";
$tmpFile = download_url("http://url.com/testing/crop/".$filename);

chmod($tmpFile, 0755);

$mimeType = wp_check_filetype($_SERVER['DOCUMENT_ROOT'] . '/testing/crop/'.$filename);
$file_array = array(
    'file'      => $_SERVER['DOCUMENT_ROOT'] . '/testing/crop/'.$filename,
    'url'       => $_SERVER['DOCUMENT_ROOT'] . '/testing/crop/'.$filename,
    'type'      => $mimeType['type'],
    'size'      => filesize($_SERVER['DOCUMENT_ROOT'] . '/testing/crop/'.$filename),
    'name'      => $filename,
    'tmp_name'  => $tmpFile
);

$image = wp_handle_upload($file_array, array('test_form' => FALSE, 'test_upload' => FALSE, 'test_type' => FALSE));

print_r($file_array);
print_r($image);

unlink($tmpFile);
?>

Dies ist der Fehler, den ich erhalte "Die hochgeladene Datei konnte nicht nach/home/xxxx/public_html/wp-content/uploads/2012/09 verschoben werden."

Ich versuche, ein kleines PHP -Skript außerhalb von WordPress zu haben, um Bilder in die Medienbibliothek hochzuladen, und es dann zu veröffentlichen. An diesem Punkt stecke ich jedoch beim Hochladen fest.

Alle Berechtigungen sind korrekt, da ich sie problemlos über den WordPress-Administrationsbereich hochladen kann.

Jede Hilfe wird sehr geschätzt.

1
Rambomst

Die move_uploaded_file Funktion ist eine PHP Funktion:

http://php.net/manual/en/function.move-uploaded-file.php

Eine wichtige Anmerkung dazu auf dieser Seite:

Diese Funktion prüft, ob es sich bei der mit filename bezeichneten Datei um eine gültige Upload-Datei handelt (dh, sie wurde über den HTTP-Upload-Mechanismus POST von PHP hochgeladen). Wenn die Datei gültig ist, wird sie in den vom Ziel angegebenen Dateinamen verschoben.

Sie laden hier keine Datei hoch, laden sie von einer URL herunter, speichern sie lokal und versuchen dann, wp_handle_upload (der move_uploaded_file verwendet) zu verwenden, um damit umzugehen. Dies schlägt fehl, da es sich eigentlich nicht um eine hochgeladene Datei handelt.

Was Sie tatsächlich versuchen, heißt "Sideload", bei dem Sie eine Datei von der URL abrufen und direkt laden. WordPress hat eine Funktion für diesen speziellen Fall, genannt wp_handle_sideload. Für den speziellen Fall von Bildern hat WordPress eine weitere Funktion namens media_sideload_image, die das Gleiche tut, aber auch die gesamte Bildverarbeitung übernimmt.

Wenn Sie wirklich Dateien hochladen und sie nicht von einer URL herunterladen möchten (dies könnte Testcode sein, den Sie versuchen), müssen Sie ein Datei-Upload-Formular codieren, den Inhalt des Parameters $_FILES[0] abrufen und übergeben das zu wp_handle_upload. Wenn Sie speziell versuchen, hochgeladene Bilder oder andere Elemente für die Medienbibliothek zu verarbeiten, verwenden Sie stattdessen media_handle_upload. Uploads über diese Funktion müssen echt sein, nicht gefälscht.

5
Otto