dedecms 后台使用远程图片生成不了缩略图缘由和解决方法

dedecms 后台不能上传图片的缘由不少了,可是这两个是很难发现,并且在本地测试还很正常,当初我想不来为何上传不了图片,只好暂时使用ftp直接上传到空间,而后再使用在线浏览,选择图片加入,即便加入有时还会生成不了缩略图,,如下只说明两个缘由:php

1:主机空间商使用了反向代理服务器,致使上生成不了缩略图,这个只是针对使用的是远程图片那种,相似下面这种html

101439557.png

dedecms后台提交时就会看成远程的图片来处理,下面咱们来看看dedecms怎么处理一个远程图片的根据当前的页面地址咱们能够知道使用的php文件是哪个,数组

102227907.png

102511723.png

再找analysehtmlBody函数,浏览器

102716984.png


找到如下行
服务器

103809190.png

为何要改写url变量,就是由于代理服务器把地址映射到其它的服务器上,致使不能直接使用原来那个图片的地址,天然获取不到图片,那么如何获取这个代理服务器节点,打开火狐浏览器的firebug中的网络栏就能够看到网络

112304122.png

注意添加代理服务器节点时要根据本身的状况而定curl


2:服务器端禁用了fsockopen函数,这个可使用curl来替代fsockopen函数下面给出一个dedecms的解决方案ide


/**
 * curl获取一个远程图片
 *  使用curl
 * @access    public
 * @param     string  $url  地址
 * @param     int  $uid  用户id
 * @return    array
 */
function GetRemoteImage($url, $uid=0)
{
                                                                                               
    $url=substr_replace($url,'http://www.hteay.cn.img.800cdn.com/',0,20);//添加代理服务器节点的链接
    global $cfg_basedir, $cfg_p_w_picpath_dir, $cfg_addon_savetype; //声明全局变量
    $cfg_uploaddir = $cfg_p_w_picpath_dir;   //上传目录
    $revalues = Array();  //定义一个数组
    $strpos=strrpos($url, '.');
    $itype=substr($url,$strpos);
    $imgUrl = $cfg_uploaddir.'/'.MyDate($cfg_addon_savetype, time());//设置上传的文件的绝对位置
    $imgPath = $cfg_basedir.$imgUrl;  //设置图片的文件的相对路径
    CreateDir($imgUrl);//建立目录
    $rndname = dd2char($uid.'_'.MyDate('mdHis',time()).mt_rand(1000,9999));//产生一个随机数
    $rndtrueName = $imgPath.'/'.$rndname.$itype;//设置名称
    $fileurl = $imgUrl.'/'.$rndname.$itype;//文件路径
    $ch=curl_init(); //初始化curl
    $fp = fopen($rndtrueName,'wb');  //打开文件:为移植性考虑,强烈建议在用 fopen() 打开文件时老是使用 'b' 标记
    curl_setopt($ch, CURLOPT_URL, $url);  //设置curl的url
    curl_setopt($ch,CURLOPT_FILE,$fp);  //设置输出文件的位置,值是一个资源类型,默认为STDOUT (浏览器)。
    curl_setopt($ch,CURLOPT_HEADER,0);  //将http头部看成数据流输出
    curl_setopt($ch,CURLOPT_TIMEOUT,60); //设置url容许运行的秒数
    curl_exec($ch);//执行给定的cURL会话。 //这个函数应该在初始化一个cURL会话而且所有的选项都被设置后被调用。
    curl_close($ch);//关闭curl会话
    fclose($fp);//关闭文件指针
    @WaterImg($rndtrueName, 'down');  //添加水印函数
    $data = GetImageSize($rndtrueName);  //获取文件的大小
    $revalues[0] = $fileurl;//文件的路径
    $revalues[1] = $data;//图片的宽
    return $revalues;  //返回文件的位置和大小的数组
}

由于个人主机使用了代理服务器因此有添加代理服务器节点,若是没有的直接删掉函数


转载自:www.myfreax.com
测试

相关文章
相关标签/搜索