dedecms 後臺不能上傳圖片的緣由不少了,可是這兩個是很難發現,並且在本地測試還很正常,當初我想不來爲何上傳不了圖片,只好暫時使用ftp直接上傳到空間,而後再使用在線瀏覽,選擇圖片加入,即便加入有時還會生成不了縮略圖,,如下只說明兩個緣由:php
1:主機空間商使用了反向代理服務器,致使上生成不了縮略圖,這個只是針對使用的是遠程圖片那種,相似下面這種html
dedecms後臺提交時就會看成遠程的圖片來處理,下面咱們來看看dedecms怎麼處理一個遠程圖片的根據當前的頁面地址咱們能夠知道使用的php文件是哪個,數組
再找analysehtmlBody函數,瀏覽器
找到如下行
服務器
爲何要改寫url變量,就是由於代理服務器把地址映射到其它的服務器上,致使不能直接使用原來那個圖片的地址,天然獲取不到圖片,那麼如何獲取這個代理服務器節點,打開火狐瀏覽器的firebug中的網絡欄就能夠看到網絡
注意:添加代理服務器節點時要根據本身的狀況而定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
測試