前言
内容经常会出现拷贝人家的,这个时候图片也是人家的,对要求较高的网站是非常不利网站后期发展的,所以这个时候一般会对图片进行过滤或者保存为自己的图片
方法一、上传至oss平台
/**
* php 提取html中图片并替换
*/
//要替换的内容
//提取图片路径的src的正则表达式
$match_str = '/(<img([^>]*)\s*src=(\'|\")([^\'\"]+)(\'|\")|url.*\(https:.*=png\))/';
preg_match_all($match_str,$content,$matches);
if (!empty($matches)){
$http_str= '/http.*(png|jpeg|jpg|gif|bmp)/';
foreach ($matches[0] as $k=>$v){
preg_match($http_str,$v,$http);
if (!empty($http[0])){
//去上传 获得上传后的链接
$upload_url = "";
$content= str_replace($http[0],$upload_url,$content);
}
//获得链接后替换
}
}
echo $content;
方法二、使用类库
<?php
class Img
{
//图片保存地址
public static $path;
public function __construct($path)
{
if (empty($path)) {
return "图片保存路径地址不得为空";
}
self::$path = $path;
}
/**
* 图片地址转换
*
* @param [type] $str (目前使用的是长文本形式,如果是url模式请把前三行注释打开)
* @return void
*/
public function imgTransform($str)
{
//以下注释的三行是针对url采集是处理的
// $result = $this->read_url($str);
// $result = str_replace("\"", "", $result);
// $str = str_replace("\'", "", $result);
preg_match_all('/<img\s+[^>]*src\s?=\s?[\'|"]([^\'|"]*)[\'|"]/i', $str, $matches);
if (!empty($matches)) {
$http_str = '/(http|https).*(png|jpeg|jpg|gif|wbmp)/';
foreach ($matches[1] as $v) {
preg_match($http_str, $v, $http);
if (!empty($http[0])) {
//去上传 获得上传后的链接
$upload_url = '/' . $this->GrabImage($v);
$str = str_replace($http[0], $upload_url, $str);
}
}
}
return $str;
}
/**
* 根据url下载图片至本地指定的路径
*
* @param [type] $url 是远程图片的完整URL地址,不能为空。
* @param string $filename 是可选变量: 如果为空,本地文件名将基于时间和日期
* @return void
*/
public function GrabImage($url, $filename = '')
{
if ($url == "") : return false;
endif;
//若文件不存在,则创建;
if (!file_exists(self::$path)) {
$this->mkDirs(self::$path);
}
if ($filename == "") {
$ext = strrchr($url, ".");
if ($ext != ".gif" && $ext != ".jpg" && $ext != ".jpeg" && $ext != ".png" && $ext != ".wbmp") : return false;
endif;
$filename = self::$path . date("dHis") . mt_rand(0, 9) . $ext;
}
ob_start();
readfile($url);
$img = ob_get_contents();
ob_end_clean();
$size = strlen($img);
$fp2 = @fopen($filename, "a");
fwrite($fp2, $img);
fclose($fp2);
return $filename;
}
private function read_url($str)
{
$result = '';
$file = fopen($str, "r");
while (!feof($file)) {
$result .= fgets($file, 9999);
}
fclose($file);
return $result;
}
private function mkDirs($dir)
{
if (!is_dir($dir)) {
if (!$this->mkDirs(dirname($dir))) {
return false;
}
if (!mkdir($dir, 0777)) {
return false;
}
}
return true;
}
}
网友评论