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
測試

相關文章
相關標籤/搜索