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

我就是个世界13年前PHP 学习13645
  ecshop商城系统后台的编辑器是fckeditor,想实现ecshop商品远程图片本地化,下面这种方法对于文章中外链图片不多的情况下适用!

远程图片本地方的好处:

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

此方法的缺点:

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

下面介绍修改方法:[separator]
[color=#4169E1]
----------------------------------- 2012年3月31日 15:51:46 更新 ----------------------------------------------------
刚刚发现如果文章中有本站图片的话,下次编辑依会再采集处理一次,这是不对的,所以改了一下代码,增加了如下处理![/color]
[code]
             $value = ereg_replace("http://".$_SERVER['SERVER_NAME']."/","/",$value);//将源文件进行替换, 如果远程图片为本站域名下的,则不做采集处理
[/code]
以上代码加在[code]$value = trim($value);[/code]下面!




[code]
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;
}
[/code]
这是一个函数,可以直接放在后台/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

相关文章

ECSHOP商品详细页显示/获取属性库存

先看效果图:[img][attach]447[/attach][/img][img][attach]448[/attach][/img]这个是我修改的,可以动态改变商品单价及总价方法如下(感谢[url...

XAMPP(cmsware集成化运行环境)1.6.3a思维汉化版

XAMPP(cmsware集成化运行环境)1.6.3a思维汉化版官方网站:'[url=http://www.apachefriends.org/en/xampp.html][color=#90a936...

Joomal安装中文语言包错误(gbsn00lp.php does not exist)的解决方法

如果你下载的是joomla.cn的中文语言包language_1511_zhCN.zip,那么在使用安装插件自动安装的时候会提示错误:JInstaller::install:文件 D:xampphtd...

wordpress数据库结构分析

Wordpress共有10个表,按照功能大致分为四大类:1 user: 用户信息,包括wp_users表和wp_usermeta表。2 post: 文章及评论信息,包括wp_posts、wp_post...

GK模版中关于菜单动画的类型详解-中文翻译

gk的icki_sports模版中,关于菜单动画的类型详解:属性linear线性转换Quad二次方程转换Cubic三次方程转换Quart四次方程转换Quint五次方程转换Pow用于生成二次,三次,四次...

JTBC(php版):给评论添加验证码功能。

修改文件\support\review\common\template\api.jtbc中的input_form节点,在最开始的位置添加如下代码:[code]&...

评论列表

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。