web-dev-qa-db-ja.com

wp_handle_upload - アップロードされたファイルはwp-content/uploads/2012/09に移動できませんでした

これは私が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管理者エリアを通してうまくアップロードすることができるのですべての許可は正しいです。

任意の助けは大歓迎です。

1
Rambomst

move_uploaded_file関数はPHP関数です。

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

そのページからそれについて注意すべき1つの重要なこと:

この関数は、filenameで指定されたファイルが有効なアップロードファイルであることを確認します(つまり、PHPのHTTP POSTアップロードメカニズムを介してアップロードされたことを意味します)。ファイルが有効な場合は、destinationで指定されたファイル名に移動されます。

ここにファイルをアップロードするのではなく、URLからダウンロードし、ローカルに保存してから、それを処理するためにwp_handle_uploadmove_uploaded_fileを使用)を使用しようとしています。これは実際にはアップロードされたファイルではないので失敗します。

あなたが実際にやろうとしているのは "sideload"と呼ばれるもので、URLからファイルを取得してそれを直接ロードします。 WordPressはwp_handle_sideloadと呼ばれるこの特定の場合のための機能を持っています。画像の特定の場合のために、WordPressはmedia_sideload_imageと呼ばれるもう一つの関数を持っています。それはほとんど同じことをしますが、すべての画像処理も処理します。

あなたが本当にファイルをアップロードしてURLからそれらをサイドロードしたくないのなら(これはあなたがやろうとしているテストコードかもしれません)、あなたはファイルアップロードフォームをコードアップし、$_FILES[0]パラメータの内容を得てそれはwp_handle_uploadです。メディアライブラリ用にアップロードされた画像やその他のアイテムを特に処理しようとしている場合は、代わりにmedia_handle_uploadを使用してください。これらの機能によるアップロードは、偽造されたものではなく、実際のものでなければなりません。

5
Otto