使用“MEDIA_HANDLE_SIDELOAD”以编程方式上传图像不会将图像上载到媒体库

时间:2014-01-31 作者:dlopezgonzalez

我正在使用此代码尝试将服务器中的图像上载到wordpress安装的媒体库。

<?php 
    include("../../../wp-blog-header.php");
    include("../../../wp-admin/includes/file.php");
    include("../../../wp-admin/includes/media.php");

    $id = 0;
    $image = $_SERVER[\'DOCUMENT_ROOT\'] . "/image01.jpg";
    $array = array( //array to mimic $_FILES
            \'name\' => basename($image), //isolates and outputs the file name from its absolute path
            \'type\' => \'image/jpeg\', //yes, thats sloppy, see my text further down on this topic
            \'tmp_name\' => $image, //this field passes the actual path to the image
            \'error\' => 0, //normally, this is used to store an error, should the upload fail. but since this isnt actually an instance of $_FILES we can default it to zero here
            \'size\' => filesize($image) //returns image filesize in bytes
        );

    media_handle_sideload($array, $id); //the actual image processing, that is, move to upload directory, generate thumbnails and image sizes and writing into the database happens here
?>
我可以看到,这段代码获取位于该路径中名为“image01.jpg”的图像,然后将图像放入/wp contents/uploads/。但是,当我转到wordpress中的管理面板查看媒体库中的图像时,我看不到图像。此外,此图像的wp\\u帖子中没有任何行。

UPDATE:

这次我使用了以下代码:

$result = media_handle_sideload($array, $id);
echo "Finish media handle sideload<br>";

if ( ! is_wp_error( $result ) ) {
    echo "Result<br>";
    print_r($result);
} else {
    echo "Error<br>";
    print_r($results);
}
echo "Finish script<br>";
没有显示执行情况。我看不到消息“Finish media handle sideload”。但是,文件将从“$image”中指定的路径移动到“wp content/uploads”。请注意,文件是移动的,而不是复制的,因此如果我执行脚本而不将图像再次复制到源(路径为$image),我会看到一些关于filesize函数的警告,如下所示:

警告:filesize():C:/Users/dlopez/Documents/Development/web folders/image01的stat失败。C中的jpg:\\Users\\dlopez\\Documents\\Development\\web folders\\wp\\U test\\wp content\\plugins\\pods csv importer\\upload。php在线16

4 个回复
SO网友:Chris_O

在函数运行WP\\u insert\\u attachment()之前,返回了失败和获取WP\\u错误对象。

您应该始终包括以下内容的检查is_wp_error( $thing ) 调用返回的函数时WP_Errors.

$result = media_handle_sideload($array, $id);

if ( ! is_wp_error( $result ) ) {
   return $result;
} else {
   var_dump( $result->get_error_messages );
 }
您的问题将列在错误消息的输出中

SO网友:NPatel

<?php 
    // Need to require these files
    if ( !function_exists(\'media_handle_upload\') ) {
        require_once(ABSPATH . "wp-admin" . \'/includes/image.php\');
        require_once(ABSPATH . "wp-admin" . \'/includes/file.php\');
        require_once(ABSPATH . "wp-admin" . \'/includes/media.php\');
    }

    $url = "https://www.w3schools.com/css/img_fjords.jpg";
    $tmp = download_url( $url );
    if( is_wp_error( $tmp ) ){
        // download failed, handle error
    }
    $post_id = 0; // set 0 for no parent post id or simple attachment otherwise pass post id for include in post 
    $desc = "The WordPress Logo";
    $file_array = array();

    // Set variables for storage
    // fix file filename for query strings
    preg_match(\'/[^\\?]+\\.(jpg|jpe|jpeg|gif|png)/i\', $url, $matches);
    $file_array[\'name\'] = basename($matches[0]);
    $file_array[\'tmp_name\'] = $tmp;

    // If error storing temporarily, unlink
    if ( is_wp_error( $tmp ) ) {
        @unlink($file_array[\'tmp_name\']);
        $file_array[\'tmp_name\'] = \'\';
    }

    // do the validation and storage stuff
    $id = media_handle_sideload( $file_array, $post_id, $desc );

    // If error storing permanently, unlink
    if ( is_wp_error($id) ) {
        @unlink($file_array[\'tmp_name\']);
        return $id;
    }

    $src = wp_get_attachment_url( $id );
?>
应用此代码并传递文件URL。这对我来说很有用。

有关更多详细信息,请查看WordPress函数参考media_handle_sideload.

SO网友:Chief Alchemist

文件使用的表单是否:

enctype="multipart/form-data"
例如。,

<form method="post" enctype="multipart/form-data">

SO网友:MortezaE

不应将字符串值分配给image. 根据中的示例this page, 首先,必须使用将文件下载到临时目录download_url() 并将此函数返回的对象分配给$image:

$image = download_url("http://yoursite.com/image01.jpg");
别忘了unlink() 这个$image 在函数末尾。

结束

相关推荐

Protect Uploads in Multisite

我正在使用WordPress multisite(3.3.1),并试图保护从某些博客上传的内容不被热链接和直接访问。这与How to Protect Uploads, if User is not Logged In?, 但我只想通过服务器上运行的脚本访问上传内容(即,只有服务器可以显示/提供上传服务),因此内容可以受到WordPress用户权限的保护。例如,我有一个名为40c的字段。jpg位于localhost/files/2011/07/40c。jpg;我想让文件显示出来only 在本地域上由HTML