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

实现的效果特点:

 

 

 

 

第一步 :当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;    
    } 
}
?>

 

posted @ 2017-07-01 17:58  王传明  阅读(161)  评论(0)    收藏  举报