これは私が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);
?>
これは、「アップロードしたファイルを/ home/xxxx/public_html/wp-content/uploads/2012/09に移動できなかった」というエラーです。
私がやろうとしているのは、WordPressの外部にある小さなPHPスクリプトでメディアライブラリに画像をアップロードしてから投稿することです。
私はWordPress管理者エリアを通してうまくアップロードすることができるのですべての許可は正しいです。
任意の助けは大歓迎です。
move_uploaded_file
関数はPHP関数です。
http://php.net/manual/en/function.move-uploaded-file.php
そのページからそれについて注意すべき1つの重要なこと:
この関数は、filenameで指定されたファイルが有効なアップロードファイルであることを確認します(つまり、PHPのHTTP POSTアップロードメカニズムを介してアップロードされたことを意味します)。ファイルが有効な場合は、destinationで指定されたファイル名に移動されます。
ここにファイルをアップロードするのではなく、URLからダウンロードし、ローカルに保存してから、それを処理するためにwp_handle_upload
(move_uploaded_file
を使用)を使用しようとしています。これは実際にはアップロードされたファイルではないので失敗します。
あなたが実際にやろうとしているのは "sideload"と呼ばれるもので、URLからファイルを取得してそれを直接ロードします。 WordPressはwp_handle_sideload
と呼ばれるこの特定の場合のための機能を持っています。画像の特定の場合のために、WordPressはmedia_sideload_image
と呼ばれるもう一つの関数を持っています。それはほとんど同じことをしますが、すべての画像処理も処理します。
あなたが本当にファイルをアップロードしてURLからそれらをサイドロードしたくないのなら(これはあなたがやろうとしているテストコードかもしれません)、あなたはファイルアップロードフォームをコードアップし、$_FILES[0]
パラメータの内容を得てそれはwp_handle_upload
です。メディアライブラリ用にアップロードされた画像やその他のアイテムを特に処理しようとしている場合は、代わりにmedia_handle_upload
を使用してください。これらの機能によるアップロードは、偽造されたものではなく、実際のものでなければなりません。