web-dev-qa-db-fra.com

wp_handle_upload - Le fichier n'a pas pu être déplacé vers wp-content/uploads/2012/09

C'est le code que j'utilise pour télécharger le fichier sur WordPress

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);
?>

C'est l'erreur que j'obtiens "Le fichier téléchargé n'a pas pu être déplacé vers/home/xxxx/public_html/wp-content/uploads/2012/09."

Ce que j’essaie de faire, c’est de créer un petit script PHP en dehors de WordPress, de télécharger des images dans sa médiathèque, puis de le poster. Toutefois, à ce stade, je suis bloqué au stade du téléchargement.

Toutes les autorisations sont correctes car je peux télécharger très bien via la zone d'administration de WordPress.

Toute aide est très appréciée.

1
Rambomst

La fonction move_uploaded_file est une fonction PHP:

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

Une chose importante à noter à ce sujet sur cette page:

Cette fonction vérifie que le fichier désigné par nom de fichier est un fichier de téléchargement valide (ce qui signifie qu'il a été téléchargé via le mécanisme de téléchargement HTTP POST de PHP). Si le fichier est valide, il sera déplacé vers le nom de fichier indiqué par la destination.

Vous ne chargez pas de fichier ici, vous le téléchargez depuis une URL, vous l'enregistrez localement, puis vous essayez d'utiliser wp_handle_upload (qui utilise move_uploaded_file) pour le gérer. Cela échoue car ce n'est pas réellement un fichier téléchargé.

Ce que vous essayez réellement de faire s'appelle un "sideload", où vous obtenez un fichier à partir d'une URL et le chargez directement. WordPress a une fonction pour ce cas spécifique, appelée wp_handle_sideload. Dans le cas spécifique des images, WordPress a une autre fonction appelée media_sideload_image qui fait à peu près la même chose mais qui gère également tout le traitement des images.

Si vous souhaitez vraiment télécharger des fichiers et non les charger latéralement depuis une URL (il peut s'agir du code de test que vous essayez de faire), vous devez coder un formulaire de téléchargement de fichier, obtenir le contenu du paramètre $_FILES[0] et transmettre que pour wp_handle_upload. Si vous essayez spécifiquement de gérer les images téléchargées ou d'autres éléments pour la médiathèque, utilisez plutôt media_handle_upload. Les téléchargements via ces fonctions doivent être réels et non falsifiés.

5
Otto