media_handle_sideload() fails

时间:2016-03-12 作者:WPler

我使用了下面的脚本,该脚本将通过URL将图像上载到wp,但它失败了(调试导致“上载的文件无法移动到wp content/uploads/2016/03”)。但我想知道。。。上载的图像为778kb,upload\\u max\\u filesize in PHP-7 PHP。ini为100万。在本周开始时,此功能工作正常,但由于最近两天(没有任何更改),此功能将无法工作。

我使用了PHP版本7.0.4-5,函数按照CLI脚本加载(cronjob)。etc/php/7.0/cli/php。ini upload\\u max\\u filesize从2M更改为100M(post\\u max\\u size也从默认更改为100M)。目录/tmp和/var/www/domain上的权限。tld/htdocs/wp内容/上传无问题(chmod 0775)。2016和03号目录均由www data提供,并拥有0775的权利。

download\\u url()的临时文件也存在,并且是正确的jpg文件。我不知道在哪里可以找到错误。我已经在一个实时服务器上测试了它。。。同样的错误。

功能如下:

function setThumbnail($postid,$img,$isPreview=false) {
    include_once(ABSPATH."/wp-admin/includes/media.php");
    include_once(ABSPATH."/wp-admin/includes/file.php");
    include_once(ABSPATH."/wp-admin/includes/image.php");
    global $wpdb;
    $tmp=download_url($img);
    $filename=basename($img);
    $file_arr[\'name\']=$filename;
    $file_arr[\'tmp_name\']=$tmp;
    if (is_wp_error($tmp)){
        @unlink($file_arr[\'tmp_name\']);
        $wpdb->insert($wpdb->prefix.\'ctcronlog\',array(\'created\'=>current_time(\'timestamp\'),\'doing\'=>\'download_thumb\',\'msg\'=>$tmp->get_error_message()),array(\'%d\',\'%s\',\'%s\'));
        return false;
    }
    $id=media_handle_sideload($file_arr,$postid);
    if(is_wp_error($id)){
        @unlink($file_arr[\'tmp_name\']);
        $errors=array();
        foreach($id->get_error_messages() as $err){
            $errors[]=$err;
        }
        $wpdb->insert($wpdb->prefix.\'ctcronlog\',array(\'created\'=>current_time(\'timestamp\'),\'doing\'=>\'upload_thumb\',\'msg\'=>var_export($errors,true)),array(\'%d\',\'%s\',\'%s\'));
        return false;
    }
    $src=wp_get_attachment_url($id);
    if($isPreview) {
        set_post_thumbnail($postid,$id);
    }
    return $src;
}

1 个回复
SO网友:WPler

问题是wp includes/file中的@copy()。wordpress的php类。这将掩盖文件无法复制的真正问题(htdocs上的权限不正常)。所以问题已经解决了。