内容正在载入中,请稍后……
公告
搜索
统计
其他
25 Mar.2012

ECShop二次开发:对商品内容中的远程图片自动本地化 不指定

作者: 我就是个世界   分类:技术&学习 » PHP 学习   出处:本站原创            | |
  ecshop商城系统后台的编辑器是fckeditor,想实现ecshop商品远程图片本地化,下面这种方法对于文章中外链图片不多的情况下适用!

远程图片本地方的好处:

   1、避免远程图片失效时,自已网站的图片也无法查看
   2、全自动,无需人工参与  

此方法的缺点:

   对于文章中图片过多或网络不好的话,可能导致下载超时,本地化图片失败。

下面介绍修改方法:

----------------------------------- 2012年3月31日 15:51:46 更新 ----------------------------------------------------
刚刚发现如果文章中有本站图片的话,下次编辑依会再采集处理一次,这是不对的,所以改了一下代码,增加了如下处理!


             $value = ereg_replace("http://".$_SERVER['SERVER_NAME']."/","/",$value);//将源文件进行替换, 如果远程图片为本站域名下的,则不做采集处理

以上代码加在
$value = trim($value);
下面!





function GetCurContent($goods_desc)
{
    $ext = 'gif|jpg|jpeg|bmp|png';//罗列图片后缀从而实现多扩展名匹配
    $body = stripslashes($goods_desc);
    $img_array = array();
    //$body = ereg_replace("HTTP://".$_SERVER['SERVER_NAME']."/","",$body);//将源文件进行替换
    preg_match_all("/(src|SRC)=[\"|'| ]{0,}(http:\/\/(.*)\.($ext))/isU",$body,$img_array); //正则匹配图片
    $img_array = array_unique($img_array[2]);
    set_time_limit(0);
    $imgurl = IMAGE_DIR."/".date('Ym')."/goods_desc_img";
    $imgpath = ROOT_PATH.$imgurl;
    $millisecond = date("YmdHms");
    if (!file_exists($imgpath))
    {
        if (!make_dir($imgpath))
        {
            return false;
        }
    }
    else
    {
        foreach($img_array as $key =>$value)
        {
            $value = trim($value);
            $get_file = @file_get_contents($value);
            $rndfilename = $imgpath."/".$millisecond.$key.".".substr($value,-3,3);
            //$fileurl = "HTTP://".$_SERVER['SERVER_NAME']."/".$imgurl."/".$millisecond.$key.".".substr($value,-3,3);
            $fileurl = "/".$imgurl."/".$millisecond.$key.".".substr($value,-3,3);
            if($get_file)
                {
                    $fp = @fopen($rndfilename,"w");
                    @fwrite($fp,$get_file);
                    @fclose($fp);
                }
            //echo $rndfilename."<br/>".$fileurl."<br/>".$value."<br/>";
            $body = ereg_replace($value,$fileurl,$body); //正则表达式替换
        }
    }
    $body = addslashes($body); //使用反斜线引用字符串,即使对插入的数据进行转义,防注入
    //print_r($body);
    //exit();
    return $body;
}

这是一个函数,可以直接放在后台/include/lib_goods.php中就可以了。或者直接放面/include/lib_common.php 或者直接放在admin/goods.php,均可执行。

调用方式:
在admin/goods.php中,把所有$_POST[goods_desc]改成" . GetCurContent($_POST[goods_desc]) ."
下载的图片路径在images/年月/goods_desc_img

此代码在ecshop2.7.3下测试通过! 其它的版本应该也没有问题!
_______________________________________________
参考文档:
ecshop远程图片本地化的另一种方法
http://ecshop.topit.cn/ecshop-tutorial/ecshop_tupian_bendihua_fangfa-120.html

php的ereg_replace()函数使用总结
http://hi.baidu.com/duanpengtao8/blog/item/91f82238a2ca68f215cecb9b.html

php中addslashes()函数的用途
http://zhidao.baidu.com/question/29857861.html
分享到QQ空间
最后编辑: 我就是个世界 编辑于March 31, 2012 15:54
试试
November 26, 2012 22:26
不行.替换 ".GetCurContent($_POST[goods_desc])."会报错的
我就是个世界 回复于 December 11, 2012 15:28
查看报错代码,检查代码是否有丢失或配对错误! 是否是引号引起的语法误,需要你自己检查!
分页: 1/1 第一页 1 最后页
发表评论
  昵称 [注册]
  密码 (游客无需密码)
  网址
  电邮
OpenID登入 权限选项 表情