php preg_match_all 和 str_replace 替换图片链接

需求:在 a 网站的后台添加一片文章,需要同步到 b 网站(两个网站数据库在同一台服务器)。

思路是添加文章时,除了往 b 网站的数据库中添加数据外,再往 a 网站的数据库中添加数据。

a 添加文章的控制器,加上往 b 网站数据库中插入数据的程序:

//把文章同时更新到crm项目:数据库-crm,表-article_info
$aObj_c = M('article_info', 'crm_', 'DB_CRM');
$data['title'] = $_POST['etitle'];
$data['keywords'] = $_POST['ekeywords'];
$data['description'] = $_POST['edescription'];
$data['content'] = $_POST['content'];
$data['order'] = $_POST['sort_order'];
$data['is_show'] = $_POST['estatus'] == 0?1:0;
$data['type_id'] = 3;
$data['create_time'] = time();
$result_c = $aObj_c->data($data)->add();

 

添加完之后,因为 a 网站在添加文章的时候很可能会添加图片,而此时发现 a 网站在保存图片的时候图片是相对目录存储的,例如: /Public/keditor/attached/image/20150902/20150902131620_93317.jpg

那么此时 b 网站就不会显示出文章的图片的。

可以在 b 网站的文章控制器中取出文章的内容,通过正则匹配和字符串替换来显示图片:

① 取出 b 数据库中文章内容部分,这里是  $result1['content']

② 在文章内容的 html 中使用 preg_match_all 匹配出所有的 img 标签

③ 当不含有 http:// 时,说明是相对路径的图片地址,则拼接上 a 网站的域名,替换原来的 html 内容

$type_id = M("article_type")->where("name = '站内公告'")->getField("id");
$id = $_GET['id'];
$result1= M("Article_info")->where("id = $id")->find();

preg_match_all("/<[img|IMG].*?src=[\'|\"](.*?(?:[\.gif|\.jpg]))[\'|\"].*?[\/]?>/", $result1['content'], $tmp);
foreach($tmp as $key=>$val){
     if($key > 0){
        foreach($val as $k=>$v){
             if(strpos($v, 'http://') === false){
                   $result1['content'] = str_replace($v, 'http://www.ofim.com.cn/'.$v, $result1['content']);
             }
        }
     }
}
$this->assign("result1",$result1);

 

参考:《ThinkPHP3.2完全开发手册》 模型 -- 连接数据库 -- 三 实例化定义

除了在模型定义的时候指定数据库连接信息外,我们还可以在实例化的时候指定数据库连接信息,例如: 如果采用的是M方法实例化模型的话,也可以支持传入不同的数据库连接信息,例如:

$User = M('User','other_','mysql://root:1234@localhost/demo#utf8');

表示实例化User模型,连接的是demo数据库的other_user表,采用的连接信息是第三个参数配置的。如果我们在项目配置文件中已经配置了DB_CONFIG2的话,也可以采用:

$User = M('User','other_','DB_CONFIG2');

需要注意的是,ThinkPHP的数据库连接是惰性的,所以并不是在实例化的时候就连接数据库,而是在有实际的数据操作的时候才会去连接数据库(额外的情况是,在系统第一次实例化模型的时候,会自动连接数据库获取相关模型类对应的数据表的字段信息)。

转载于:https://www.cnblogs.com/dee0912/p/4786880.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值