25
Mar.2012
ecshop商城系统后台的编辑器是fckeditor,想实现ecshop商品远程图片本地化,下面这种方法对于文章中外链图片不多的情况下适用!
远程图片本地方的好处:
1、避免远程图片失效时,自已网站的图片也无法查看
2、全自动,无需人工参与
此方法的缺点:
对于文章中图片过多或网络不好的话,可能导致下载超时,本地化图片失败。
下面介绍修改方法:
----------------------------------- 2012年3月31日 15:51:46 更新 ----------------------------------------------------
刚刚发现如果文章中有本站图片的话,下次编辑依会再采集处理一次,这是不对的,所以改了一下代码,增加了如下处理!
$value = ereg_replace("http://".$_SERVER['SERVER_NAME']."/","/",$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
最后编辑: 我就是个世界 编辑于March 31, 2012 15:54
远程图片本地方的好处:
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
相关日志
如何开启ECShop的调试模式
ECSHOP商品详细页显示/获取属性库存
ECSHOP完美解决jquery的冲突问题
ecshop自定义模板标签
在ECSHOP首页今日特价(促销商品)增加倒计时限时抢购效果
如何开启ECShop的调试模式
ECSHOP商品详细页显示/获取属性库存
ECSHOP完美解决jquery的冲突问题
ecshop自定义模板标签
在ECSHOP首页今日特价(促销商品)增加倒计时限时抢购效果

最后编辑: 我就是个世界 编辑于March 31, 2012 15:54
试试
November 26, 2012 22:26
不行.替换 ".GetCurContent($_POST[goods_desc])."会报错的
我就是个世界 回复于 December 11, 2012 15:28
查看报错代码,检查代码是否有丢失或配对错误! 是否是引号引起的语法误,需要你自己检查!
分页: 1/1
1

