Css图片批量下载小工具--saveimg1.5

博主分享了自己对CSS图片批量下载工具saveimg1.5的代码优化过程,通过减少代码行数和简化逻辑,探讨了代码效率与优化。在实践中,博主意识到代码优化的重要性,并在日常生活中不断思考改进方案。文章列举了mkdir_for_img.php、get_img_url.php和saveimg.php三个文件的原代码和新代码片段,展示了优化的具体实施。

备用下载地址:http://download.youkuaiyun.com/detail/zhoumengkang/4949519

1.5只是将代码进行有一些自以为是的优化,实际说应该是表面上的代码量减少了,但不知道效率是不是真的提高了,当然所有我的困惑我都会做好笔记,一一消化的!

通过不断的实际测试,我也明白了为什么别人开发软件的时候总要修复BUG,为什么要升级了。

这段时间,收获真的不少,不仅是以前学的一些知识的整合、巩固,也发现了以前觉得非常不起眼的小知识点的重要性。

经常会有“哦,原来这个东西还有作用啊!(窃喜)真是太好了,这不正是我需要的吗?”;

这段时间,心里想的只有一件事,那就是怎么样做才能使得代码更加高效更加简洁。

刷牙、做梦、走路总会在无意识间就会对某个小细节想到了一种新的处理方式,或许是代码少了1行,或许是换了一种新方法,或许是提交给下个函数的时候少了一个参数。

我都会迫不及待的打开电脑来测试,即使这然一切在别人看来是纯农民工纯低级的工作!

2012.12.13

1.也不知道算不算代码优化,不知道速度上有没有提升

-----------------------------------

mkdir_for_img.php 原代码:

-----------------------------------

function mkdirforimg($img){
    $protocol='/http:\/\//';
    $replace='web/';
    $img['url']=preg_replace($protocol,$replace,$img['url']);
    for($i=1;$i<$img['num'];$i++){
        $url[$i]=$img['url'][$i];//拿出每张图片的地址  
        $y[$i]=explode('/',$url[$i]);//把保存的目录的保存到数组中去
        foreach($y[$i] as $key =>$value2);//获取目录的深度
        for($n=0;$n<$key;$n++){//循环的时候除去数组的最后一位(最后一位为图片,不是文件夹)
            $path.=$y[$i][$n].'/';
            if(!file_exists($path)){
                if(mkdir($path,0777,true)){
                    echo $path.'<font color="green">路径创建成功</font><br/>';
                };
            }
        }
        $path=null;//清空$path
    }
}

-----------------------------------
mkdir_for_img.php 新代码:

-----------------------------------

代码简化地方,使用foreach直接遍历整个数组,省略了上一个版本中对数组元素个数的依赖性

也许foreach的内部代码先对foreach进行了出栈做while判断,然后确定其元素个数,再使用for循环;

倘若是那样,那么我的代码优化,速度上反而使得脚本速度更加慢了。


function mkdirforimg($img){
    $protocol='/http:\/\//';
    $replace='web/';
    $img=preg_replace($protocol,$replace,$img);
    foreach($img as $k=>$v){
        $a=dirname($v);
        if(!file_exists($a)){
            if(mkdir($a,0777,true)){
                echo $a.'<font color="green">路径创建成功</font><br/>';
            };
        }
    }
}

-----------------------------------

get_img_url.php 原代码:

-----------------------------------

function getimgurl($filename,$baseurl){
    $file=fopen($filename,'r');
    while(!feof($file)){
        $content.=fread($file,1024);
    }
    echo '<pre>';
    //将整个css文件以字符串保存,然后以“url(”作为标记切割成数组
    $arr=explode('url(',$content);
    //获取该数组的个数,即整个css文件使用到url图片的个数(有可能有部分图片重复,后面保存的时候再判断排除)
    foreach($arr as $key =>$value);
    $img['num']=$key+1;
    for($i=1;$i<$img['num'];$i++){
        //取出上面数组中的每个元素
        $x=$arr[$i];
        //截取反括号前面的内容,即为图片地址
        $y=explode(')',$x);
        //测试发现部分网站的css的url标签中使用了""和'',要考虑到所有网站的情况,所以得删除两段的引号
        $z[$i]=trim($y[0],'"');
        $z[$i]=trim($z[$i],"'");
        //再清除图片地址后面跟的参数,图片后面为什么跟参数,不明白,但是例如phpwind的图片就经常有?后面跟一些日期
        $param='/\?/';
        $res=preg_match($param,$z[$i],$match);
        if($res==1){
            $change=explode('?',$z[$i]);
            $z[$i]=$change[0];
        }
        #######下面需要考虑图片地址在url的引用方法#####
        #######  1    images/xxx.jpg    ###############
        #######  2  ./images/xxx.jpg    ###############
        #######  3 ../images/xxx.jpg    ###############
        #######  4   /images/xxx.jpg    ###############
        #######  5   http://.xxx.jpg    ###############
        $check=preg_match('/^http/',$z[$i]);
        if($check==1){
            //直接保存图片地址
            $img['url']=$z[$i];
        }else{
            $check2=preg_match('/^\//',$z[$i]);
            if($check2==1){
                $z[$i]=$baseurl[1].$z[$i];//是第4种情况,直接与域名拼接
            }else{
                $z[$i]=$baseurl[0].'/'.$z[$i];//与css所在文件地址拼接
            }
        }
    }
    $a=array_unique($z);
    $img['url']=$a;
    $n=0;
    $b=array();
    foreach($a as $v){
        $n++;
        array_push($b,$n);
    }
    $img['num']=$n+1;
    $img['url']=array_combine($b,$a);
    print_r($img['url']);
    return $img;
}

-----------------------------------

get_img_url.php 新代码:

-----------------------------------

function getimgurl($filename,$baseurl){
    $file=fopen($filename,'r');
    while(!feof($file)){
        $content.=fread($file,1024);
    }
    echo '<pre>';
    $arr=explode('url(',$content);
    foreach($arr as $k => &$v){
        $a=explode(')',$v);
        $v=trim($a[0],'"');
        $v=trim($v,"'");
        $param='/\?/';
        $res=preg_match($param,$v,$match);
        if($res==1){
            $change=explode('?',$v);
            $v=$change[0];
        }
        $check=preg_match('/^http/',$v);
        if($check==1){
            //直接保存图片地址
            continue;
        }else{
            $check2=preg_match('/^\//',$v);
            if($check2==1){
                $v=$baseurl[1].$v;//是第4种情况,直接与域名拼接
            }else{
                $v=$baseurl[0].'/'.$v;//与css所在文件地址拼接
            }
        }
    }
    array_shift($arr);
    $img=array_unique($arr);
    print_r($img);
    return $img;
}

-----------------------------------

saveimg.php 原代码:

-----------------------------------

function saveimg($img){
    $protocol='/http:\/\//';
    $replace='web/';
    $filename=preg_replace($protocol,$replace,$img['url']); //图片保存路径
    for($i=1;$i<$img['num'];$i++){
        $b=file_get_contents($img['url'][$i]);
        $c=file_put_contents($filename[$i],$b);
        if($c!==0){
            echo $filename[$i].'<font color="green">下载成功</font><br/>';
        }else{
            echo $filename[$i].'<font color="red">下载失败</font><br/>';
        }
    }
}

-----------------------------------

saveimg.php 新代码:

-----------------------------------

function saveimg($img){
    $protocol='/http:\/\//';
    $replace='web/';
    $filename=preg_replace($protocol,$replace,$img);    //图片保存路径
    foreach($img as $i=>$v){
        $b=file_get_contents($v);
        $c=file_put_contents($filename[$i],$b);
        if($c!==0){
            echo $filename[$i].'<font color="green">下载成功</font><br/>';
        }else{
            echo $filename[$i].'<font color="red">下载失败</font><br/>';
        }
    }
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值