备用下载地址: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
}
}
-----------------------------------
代码简化地方,使用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/>';
}
}
}