WP_HANDLE_UPLOAD-无法将上载的文件移动到wp-Content/Uploads/2012/09

时间:2012-09-07 作者:Rambomst

这是我用来将文件上传到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\\u html/wp-content/uploads/2012/09。”

我想做的是在WordPress之外有一个小的PHP脚本将图像上传到它的媒体库,然后将其发布,但此时我正处于上传阶段。

所有的权限都是正确的,因为我可以通过WordPress管理区上传。

非常感谢您的帮助。

1 个回复
最合适的回答,由SO网友:Otto 整理而成

这个move_uploaded_file 函数是一个PHP函数:

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

从这一页中需要注意的一点是:

此函数检查以确保由filename指定的文件是有效的上载文件(意味着它是通过PHP的HTTP POST上载机制上载的)。如果文件有效,它将被移动到目标指定的文件名。

您不是在此处上载文件,而是从URL下载文件,将其保存在本地,然后尝试使用wp_handle_upload (其中使用move_uploaded_file) 来处理它。此操作失败,因为它实际上不是上载的文件。

实际上,您要做的是所谓的“侧加载”,即从URL获取一个文件并直接加载。WordPress有一个用于此特定情况的函数,称为wp_handle_sideload. 对于图像的特定情况,WordPress有另一个函数media_sideload_image 这做了几乎相同的事情,但也处理了所有的图像处理。

如果你真的想上传文件,而不是从URL旁加载它们(这可能是你正在尝试的测试代码),那么你需要编写一个文件上传表单,获取$_FILES[0] 参数,并将其传递给wp_handle_upload. 如果您要专门为媒体库处理上载的图像或其他项目,请使用media_handle_upload 相反通过这些功能上传的内容必须是真实的,而不是伪造的。

结束