织梦虽然已经提供远程图片本地化功能,网上也有很多教程,但有一个问题,哪就是我们已经发布的文章如何把这些远程图片本地化呢?
比如我们的网站有已经有了一千篇文章,这些文章中有的图片是远程图片,有的是本地图片,哪这些织梦网站以发布文章的远程图片如何本地化呢?
话不多说,具体方法如下。把下面代码保存一个php文件,放你的网站根目录。然后访问这个文件即可实现把这些远程图片一键本地化。
<?php
echo '成功:<span id="message"></span>----失败:<span id="message1"></span><br>';
require_once (dirname(__FILE__) . "/include/common.inc.php");
$i=1;
$u=1;
for ($x=239; $x<=243; $x++) {
$id=$x;
$proinfo=$dsql->GetOne("select body from `#@__archives` as a inner join `#@__addonarticle` as b on a.id=b.aid where a.id={$id} limit 1");
//输出文body字段内容
$weigeti=$proinfo[body];
//echo $weigeti;
//修改文章中的内容
$reg = "/<img[^>]*src=\"(http(|s):\/\/(.*)\.(jpg|gif|png|jpeg|bmp|bnp))\"/isU";
$reg1 = "/(http(|s):\/\/(.*)\.(jpg|gif|png|jpeg|bmp|bnp))/isU";
preg_match_all($reg, $weigeti, $img_array, PREG_PATTERN_ORDER);
$img_array = array_unique($img_array[1]);
//print_r($img_array);
foreach ($img_array as $img){
$url=parse_url($img);
$imgurl=$url[host];
if('xxxxx.com'!= $imgurl){
//图片重新命名随机数加日期
$rand=rand(1, 1000);
$filename=date('Ymdhis', time()).$rand;
$file = file_get_contents($img);
$filend = "jpg";
file_put_contents('uploads/temp/'.$filename.".".$filend,$file);
//获取新图片地址,用来替换文章中的图片
$images_url='/uploads/temp/'. $filename.".".$filend;
$body = preg_replace($reg1,$images_url,$weigeti);
}
}
$body = addslashes($body);
//echo $body;
//如果$bod不为空
if($body!=''){
//更新原数据库文章,把远程图片地址更换为下载后的远程图片地址
$rs = $dsql->ExecuteNoneQuery("UPDATE `#@__addonarticle` SET body='{$body}' where aid={$id}");
if($rs){
echo '<script>document.getElementById("message").innerHTML="'.$i.'";</script>';
$i++;
}else{
echo '<script>document.getElementById("message1").innerHTML="'.$u.'";</script>';
$u++;
}
}
}
注意几点:$x=239; $x<=243; 是你需要本地化的文章开始 id 和结束 id
: uploads/temp/ 是你要存放本地图片的地址 如果没有需要你先建个
/nclude/dedesql.class.php 文件中50行 设置为 $this->safeCheck =FALSE;
xxxxx.com 为你自己的域名