商城图片资源清洗,有用的才生成目录文件,调用不来的可以查看日志进行手工转移图片
实现的效果特点:

第一步 :当www.e1617.com 下面没有图片就会触发ajax远程调用 www.technew.net 相同目录下的文件复制到 www.e1617.com 对应的目录下
$(document).ready(function(){ $('img').error(function(){ var srcs = $(this).attr('src'); $.ajax({ type:"post", url:"/checkimg.php?act=imgs&srcs="+srcs, success:function(data){ $(this).attr("src",data); } }); }); });
第二步 :php实际复制转移图片以及没有图片生成日志文件用于手工转移图片 checkimg.php
<?php error_reporting(0); ini_set('display_errors', false); //远程调用图片进行文件资源排除不用的图片占用服务器空间, /* 第一步:把 www.e1617.com 下的images 文件全部拷贝在www.technew.net 下 第二步:对数据库的图片url进行分析 整理去除非正常文件夹的文件程序处理 第三步:执行程序进行程序调用一段时间,把图片资源调到正确的文件中 */ //图片加载404处理 if($_REQUEST['act'] == 'imgs'){ $srcs = trim($_REQUEST['srcs']); // http://www.e1617.com/data/brandlogo/1437438164239971914.jpg $srcs = str_replace('e1617.com', 'technew.net', $srcs); // echo $srcs; http://www.technew.net/data/brandlogo/1437438164239971914.jpg if(!strstr($srcs,'http://')){ $srcs = 'http://www.technew.net/'.$srcs; } //目的要组成一个 http://www.technew.net/data/brandlogo/1437438164239971914.jpg $healthy = array('net//', 'net/./', 'net/image/','net/includes/kindeditor/php/../../../image/'); $yummy = array('net/', 'net/', 'net/images/','net/images/'); $srcs = str_replace($healthy, $yummy, $srcs); //处理非正常的链接 // echo $srcs; http://www.technew.net/data/brandlogo/1437438164239971914.jpg /* is_file($srcs) : http://www.technew.net/data/brandlogo/1437438164239971914.jpg 这个不是文件 只有 1437438164239971914.jpg 才是文件 file_exists、is_file、is_dir的区别为,file_exists = is_dir + is_file。 这三个函数都是判断此文件有没有这个文件,及文件夹的,而不是判断这个url 也就是说file_exists既可以用来判断文件夹也可以判断文件,而is_file通常用于判断文件是否存在,is_dir也常用于判断目录存在。 */ /* 这个是判断没有这个文件 进行书写日志文件中,而不是进行远程调用 */ if(!is_file($srcs)){ //echo $srcs; http://www.technew.net/data/brandlogo/1437438164239971914.jpg //去掉网址后剩下的文件名 if(substr($srcs,0,23) == 'http://www.technew.net/'){ $file_name = substr($srcs,23); //echo $file_name; //data/brandlogo/1437438164239971914.jpg }else{ $file_name = $srcs; } //用'/'将图片字符串分割成数组 $arr = explode('/', $file_name); // print_r($arr); // Array ( [0] => images [1] => 3189 [2] => image [3] => 201706 [4] => 20170612161122_91354.jpg ) //图片名 $filename =end($arr); // echo $filename; 20170612161122_91354.jpg //保存图片的目录名 $pathname = str_replace('/'.$filename, '', $file_name); // echo $pathname; /data/brandlogo $src_url = getFile($srcs,$pathname,$filename); echo $src_url; } if(is_file($srcs)){ //echo $srcs; http://www.technew.net/data/brandlogo/1437438164239971914.jpg //去掉网址后剩下的文件名 if(substr($srcs,0,23) == 'http://www.technew.net/'){ $file_name = substr($srcs,23); //echo $file_name; //data/brandlogo/1437438164239971914.jpg }else{ $file_name = $srcs; } //用'/'将图片字符串分割成数组 $arr = explode('/', $file_name); // print_r($arr); // Array ( [0] => images [1] => 3189 [2] => image [3] => 201706 [4] => 20170612161122_91354.jpg ) //图片名 $filename =end($arr); // echo $filename; 20170612161122_91354.jpg //保存图片的目录名 $pathname = str_replace('/'.$filename, '', $file_name); // echo $pathname; /data/brandlogo $src_url = get_have_File($srcs,$pathname,$filename); echo $src_url; } } /* * 远程获取文件并保存到指定目录中 * $url@远程文件URL地址 * $save_dir@本地保存远程文件的目录 * $filename@文件名 * $type@类型*/ function getFile($url, $save_dir = '', $filename = '') { $save_dir = iconv('utf-8', 'gbk', $save_dir); $url = iconv('utf-8', 'gbk', $url); $filename = iconv('utf-8', 'gbk', $filename); if (trim($url) == '') { return false; } if (trim($save_dir) == '') { $save_dir = './'; } if (0 !== strrpos($save_dir, '/')) { $save_dir.= '/'; } //创建保存目录 if (!file_exists($save_dir) && !@mkdir($save_dir, 0777, true) && !is_file($url)) { $kk = $url.'-----'.$save_dir.'-----'.$filename."1111111111"; file_put_contents($save_dir . $filename, ''); //file_put_contents 如果没有此文件就创建此文件 ,如果有文件就在文件中追加文件中的信息 file_put_contents('404img0.txt', $kk.PHP_EOL, FILE_APPEND|LOCK_EX); return '/themes/default/images/404_bg1.png'; } //获取远程文件所采用的方法 if(@fopen($url, 'r')) { $data = file_get_contents($url); file_put_contents($save_dir . $filename, $data); //这个就是转移图片的功能 先用file_get_contents 得到资源图片信息 然后把资源信息赋值给新文件,就可以创建一样的文件了 return $save_dir . $filename; } else { if(!is_file($url)&&in_array(pathinfo($url, PATHINFO_EXTENSION),array('jpg','gif','png','jpeg','bmp'))) { file_put_contents('404img2.txt', $url.PHP_EOL, FILE_APPEND|LOCK_EX); return '/themes/default/images/404_bg.png'; } //$data = file_get_contents($url); file_put_contents($save_dir . $filename, ''); file_put_contents('404img1.txt', $url.PHP_EOL, FILE_APPEND|LOCK_EX); return '/themes/default/images/404_bg.png'; } } /* * 远程获取文件并保存到指定目录中 * $url@远程文件URL地址 * $save_dir@本地保存远程文件的目录 * $filename@文件名 * $type@类型*/ function get_have_File($url, $save_dir = '', $filename = '') { $save_dir = iconv('utf-8', 'gbk', $save_dir); $url = iconv('utf-8', 'gbk', $url); $filename = iconv('utf-8', 'gbk', $filename); if (trim($url) == '') { return false; } if (trim($save_dir) == '') { $save_dir = './'; } if (0 !== strrpos($save_dir, '/')) { $save_dir.= '/'; } //获取远程文件所采用的方法 if(@fopen($url, 'r')) { $data = file_get_contents($url); file_put_contents($save_dir . $filename, $data); //这个就是转移图片的功能 先用file_get_contents 得到资源图片信息 然后把资源信息赋值给新文件,就可以创建一样的文件了 return $save_dir . $filename; } } ?>

浙公网安备 33010602011771号