批量替换图片url链接/批量替换图片的Url地址
yii2 2018-10-11 22:35:29

 1、批量替换链接:

PHP Code复制内容到剪贴板
  1. // 以下这段为批量替换图片的url链接  
  2. $query = new \yii\db\Query();  
  3. $query->from('yoyocmf_article_data');  
  4. foreach($query->batch() as $articles){  
  5.     foreach($articles as $article){  
  6.         if(!$article){  
  7.             echo "没有了";  
  8.             continue;  
  9.         }  
  10.         $_module = Base::findOne($article['id']);  
  11.         $_module->id = $article['id'];  
  12.         $content = $article['content'];  
  13.   
  14.         // 替换图片链接  
  15.         $content = str_replace("http://soft.ccc:8001/""http://demo20.liqinwl.com/"$content);  
  16.   
  17.         $_module->content = $content;  
  18.         $_module->save();  
  19.         echo $article['id'] . " => 更新完成";  
  20.         echo "<br/>";  
  21.     }  
  22. }  

 

2、批量替换内容中的图片,并抓取远程图片地址 入库:

PHP Code复制内容到剪贴板
  1. $query = new \yii\db\Query();  
  2. $query->from('yoyocmf_article_data');//->limit(10)->offset(472);  
  3. foreach($query->batch() as $articles){  
  4.     if(!$articles){  
  5.         echo "没有了";  
  6.         continue;  
  7.     }  
  8.     foreach($articles as $article){  
  9.         if(!$article){  
  10.             echo "没有了";  
  11.             continue;  
  12.         }  
  13.   
  14.         $_module = Base::findOne($article['id']);  
  15.         $_module->id = $article['id'];  
  16.         $content = $article['content'];  
  17.         $content = preg_replace_callback('/<img[\s\S]*?src="([\s\S]*?)"[\s\S]*?>/'function ($matches) {  
  18.             if (!emptyempty($matches[1])) {  
  19.                 $imgDir = date('Ymd');  
  20.                 $res = Attachment::saveImgFromUrl($matches[1],$imgDir);  
  21.                 $img = Yii::$app->storage->getUrl($res[0]->path);  
  22.                 return Html::img($img);  
  23.             }  
  24.         }, $content);  
  25.   
  26.         $_module->content = $content;  
  27.         $_module->save();  
  28.         echo $article['id'] . " => 更新完成";  
  29.         echo "<br/>";  
  30.     }  
  31. }  

 

 

PHP Code复制内容到剪贴板
  1. /** 
  2.  * PHP将网页上的图片攫取到本地存储 
  3.  * @param $imgUrl  *图片url地址 
  4.  * @param string $saveDir 本地存储路径 默认存储在当前路径 
  5.  * @param null $fileName 图片存储到本地的文件名 
  6.  * @return mix 
  7.  */  
  8. public static function saveImgFromUrl($imgUrl$saveDir = './'$fileName = null)  
  9. {  
  10.     if (emptyempty($imgUrl)) {  
  11.         return false;  
  12.     }  
  13.   
  14.     $hash = md5($imgUrl);  
  15.     $attachment = static::findByHash($hash);  
  16.     if ($attachment) {  
  17.         return [$attachment, null];  
  18.     }  
  19.   
  20.     $path = $saveDir;  
  21.     $saveDir = Yii::getAlias('@storagePath/upload/') . $saveDir . "/";  
  22.   
  23.     //获取图片信息大小  
  24.     $imgSize = getImageSize($imgUrl);  
  25.     //p($imgSize);  
  26.     if (!in_array($imgSize['mime'], array('image/jpg''image/gif''image/png''image/jpeg'), true)) {  
  27.         return false;  
  28.     }  
  29.   
  30.     //获取后缀名  
  31.     $_mime = explode('/'$imgSize['mime']);  
  32.     $_ext = '.' . end($_mime);  
  33.   
  34.     if (emptyempty($fileName)) {  //生成唯一的文件名  
  35.         $fileName = uniqid(time(), true) . $_ext;  
  36.     }  
  37.   
  38.     //开始攫取  
  39.     ob_start();  
  40.     readfile($imgUrl);  
  41.     $imgInfo = ob_get_contents();  
  42.     ob_end_clean();  
  43.   
  44.     if (!file_exists($saveDir)) {  
  45.         mkdir($saveDir, 0777, true);  
  46.     }  
  47.     $fp = fopen($saveDir . $fileName'a');  
  48.     $imgLen = strlen($imgInfo);    //计算图片源码大小  
  49.   
  50.     $_inx = 1024;   //每次写入1k  
  51.     $_time = ceil($imgLen / $_inx);  
  52.     for ($i = 0; $i < $_time$i++) {  
  53.         fwrite($fpsubstr($imgInfo$i * $_inx$_inx));  
  54.     }  
  55.     fclose($fp);  
  56.   
  57.     $filePath = ($path ? ($path . '/') : '') . $fileName;  
  58.     $attachment = new static();  
  59.     $attachment->path = $filePath;  
  60.     $attachment->name = $fileName;  
  61.     $attachment->extension = $_ext;  
  62.     $attachment->type = $imgSize['mime'];  
  63.     $attachment->size = $imgLen;  
  64.     $attachment->hash = $hash;  
  65.     $attachment->save();  
  66.   
  67.     return [$attachment, null];;  
  68. }  

 

 

 

本文来自于:http://www.yoyo88.cn/study/yii2/375.html

Powered by yoyo苏ICP备15045725号