chaihongjun.me

dedecms远程发布图片

  我们经常看到一些网站的图片存放在其他域名下,最为典型的是淘宝和京东这样的电商网站。出于这样的做法显然有多种考虑:

  1. 减少主服务器的存储压力(少了很多图片的存储)

  2. 将图片存储在高速存储设备提高访问速度

  3. 减少对主域名的请求数量,利用现代浏览器的并行请求能力

  4. 减少了不必要的COOKIE传输

...... 等等不一而足,不难发现最终的出发点是访问速度,优化体验。dedecms默认是将图片上传到网站根目录下的uploads目录里面,同样dedecms系统也可以发布图片到远程服务器上达到优化的目的,具体方法如下:

dedecms远程发布图片

一.在dedecms系统后台如上图所示,做好远程发布的准备工作

  1. 开启远程服务器,域名填写远程服务器域名以及登录远程服务器的FTP配置信息

  2. 在dedecms后台【系统】-【系统基本参数】-【核心设置】那里确保

“是否启用远程站点:”选择为,“是否发布和编辑文档时远程发布(启用远程站点的前提下):”选择也为

二.后台代码添加修改:

  1. 修改系统后台article_add.php文件,在

 //生成HTML
    InsertTags($tags,$arcID);

之前添加:

 /*  dedecms远程发布图片到服务器  */
	$row1 = $dsql->GetOne("SELECT * FROM `chj_multiserv_config`");
    $isftp = $row1['remoteuploads'];
    $ftpurl = $row1['remoteupUrl'];
    $ftpconfig = $row1['servinfo'];
    $ftpconfig_arr = array();
    $ftpconfig_txt = explode('|', $ftpconfig);
    foreach($ftpconfig_txt as $str){
        $ftpconfig_arr[] = trim($str);
    }
    
    if($isftp == 1){        
        $config = array(
          'hostname' => $ftpconfig_arr[1],
          'username' => $ftpconfig_arr[3],
          'password' => $ftpconfig_arr[4],
          'port' => $ftpconfig_arr[2],
          'debug' => 'TRUE'
        );
        $ftps = new FTP(); 
        $ftps->connect($config);
        $row2 = $dsql->GetOne("SELECT litpic FROM `chj_archives` WHERE id=$arcID");
        $imglist = $row2['litpic'];
        $row3 = $dsql->GetOne("SELECT body FROM `chj_addonarticle` WHERE aid=$arcID");
        preg_match_all("/
<img([^>
]*)\s*src=('|\")([^'\"]+)('|\")/", $row3['body'], $matches);
        $arr=array_unique($matches[3]);
        foreach($arr as $key){ 
            $imglist .= ','.$key; 
        }
        $imglistarr = array();
        $imglist_txt = explode(',', $imglist);
        foreach($imglist_txt as $str){
            $remotefile = str_replace(DEDEROOT, '', $str);
            $localfile = '..'.$remotefile;
            $remotefile2 = str_replace('uploads/', 'uploadfile/', $remotefile);
            $remotedir = preg_replace('/[^\/]*\.(jpg|gif|bmp|png)/', '', $remotefile2);
            $ftps->rmkdir($remotedir);
            $ftps->upload($localfile, $remotefile2);
        }
        $dsql->ExecuteNoneQuery("UPDATE `chj_archives` SET `litpic`=REPLACE(`litpic`,'/uploads','$ftpurl/uploadfile') WHERE `litpic` LIKE '%/uploads%'");
        $dsql->ExecuteNoneQuery("UPDATE `chj_addonarticle` SET `body`=REPLACE(`body`,'/uploads','$ftpurl/uploadfile') WHERE `body` LIKE '%/uploads%'");
        $ftps->close();
    }
    
 /*  dedecms远程发布图片到服务器  */

2.修改系统后台article_edit.php文件,在

 //生成HTML
    UpIndexKey($id, $arcrank, $typeid, $sortrank, $tags);

之前添加:

 /*  dedecms远程发布图片到服务器  */
$row1 = $dsql->GetOne("SELECT * FROM `chj_multiserv_config`");
    $isftp = $row1['remoteuploads'];
    $ftpurl = $row1['remoteupUrl'];
    $ftpconfig = $row1['servinfo'];
    $ftpconfig_arr = array();
    $ftpconfig_txt = explode('|', $ftpconfig);
    foreach($ftpconfig_txt as $str){
        $ftpconfig_arr[] = trim($str);
    }
    
    if($isftp == 1){        
        $config = array(
          'hostname' => $ftpconfig_arr[1],
          'username' => $ftpconfig_arr[3],
          'password' => $ftpconfig_arr[4],
          'port' => $ftpconfig_arr[2],
          'debug' => 'TRUE'
        );
        $ftps = new FTP(); 
        $ftps->connect($config);
        
        $row2 = $dsql->GetOne("SELECT litpic FROM `chj_archives` WHERE id=$id");
        $imglist = $row2['litpic'];
        $row3 = $dsql->GetOne("SELECT body FROM `chj_addonarticle` WHERE aid=$id");
        preg_match_all("/
<img([^>
]*)\s*src=('|\")([^'\"]+)('|\")/", $row3['body'], $matches);
        $arr=array_unique($matches[3]);
        foreach($arr as $key){ 
            $imglist .= ','.$key; 
        }
        $imglistarr = array();
        $imglist_txt = explode(',', $imglist);
        foreach($imglist_txt as $str){
            if(preg_match('/uploads/', $str)){
                $remotefile = str_replace(DEDEROOT, '', $str);
                $localfile = '..'.$remotefile;
                $remotefile2 = str_replace('uploads/', 'uploadfile/', $remotefile);
                $remotedir = preg_replace('/[^\/]*\.(jpg|gif|bmp|png)/', '', $remotefile2);
                $ftps->rmkdir($remotedir);
                $ftps->upload($localfile, $remotefile2);
            }
        }
        $dsql->ExecuteNoneQuery("UPDATE `chj_archives` SET `litpic`=REPLACE(`litpic`,'/uploads','$ftpurl/uploadfile') WHERE `litpic` LIKE '%/uploads%'");
        $dsql->ExecuteNoneQuery("UPDATE `chj_addonarticle` SET `body`=REPLACE(`body`,'/uploads','$ftpurl/uploadfile') WHERE `body` LIKE '%/uploads%'");
        $ftps->close();
    }
    /*  dedecms远程发布图片到服务器  */

至此,完事手工,再发布文章的时候,在正文上传图片会发现图片会传输到远程服务器上,本地网站调用远程图片成功。

知识共享许可协议本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。作者:柴宏俊»