<?php /** *@阿唐 2013-4-6 22:19 *@呵呵 */ set_time_limit(0); error_reporting(E_ERROR); if($argc<4){ print_r(' +-------------------------------------------------+ Usage: php '.$argv[0].' css路径类型(0为远程、1为本地) css文件路径 图片保存目录 Example: php.exe '.$argv[0].' 0 http://www.xxx.com/index.css \images\ +-------------------------------------------------+ '); exit(); } //远程css if($argv[1]==0){ $host = getParse($argv[2],'host'); $savePath = getSavePath($argv[3]); $images = getCssImagesArray($argv[2]); //print_r($images); $imagesurls = getImagesLinks($images,$argv[2]); imagesDowner($imagesurls); } //本地css开始 if($argv[1]==1){ //懒得写了,呵呵,这个没多大意义 } /* * css图片分析函数 * $csspath css文件路径 */ function getCssImagesArray($csspath){ $cssFile = file_get_contents($csspath); $images = array(); preg_match_all("|url\((.+)\)|i",$cssFile,$images); $images = $images[1]; return $images; } /* * css文件相对目录处理函数 * $path 路径 */ function getNocssPath($path){ global $host; $tempLinkmages=''; //相当路径获取 $tempPath = explode('/',$path); for($i=1;$i<(count($tempPath)-2);$i++){ $tempLinkmages .= $tempPath[$i].'/'; } $xdImage = $host.$tempLinkmages; return $xdImage; //相当路径获取 } /* * 图片连接获取函数 * $images array 所有需要获取的images数组 * cssLink css文件链接 */ function getImagesLinks($imagesArray,$cssLink){ global $host; $urlImages = array(); foreach($imagesArray as $key=>$value){ if(pathCheck($value)){ if((!in_array(($host.$value),$urlImages))){ $urlImages[$key] = $host.$value; } }else{ if((!in_array((getNocssPath(getParse($cssLink,'path')).$value),$urlImages))){ $urlImages[$key] = getNocssPath(getParse($cssLink,'path')).$value; } } } return $urlImages; } /* * 图片获取 * $urlImages需要下载的图片数组 */ function imagesDowner($urlImages){ //print_r($urlImages); foreach($urlImages as $key=>$value){ $urlImagesOk[$key] = str_replace('//','/',$value); $urlImagesOk[$key] = str_replace('"','',$urlImagesOk[$key]); $urlImagesOk[$key] = str_replace("'",'',$urlImagesOk[$key]); $urlImagesOk[$key] = 'http://'.$urlImagesOk[$key]; if(grabImage($urlImagesOk[$key],basename($urlImagesOk[$key]))){ print_r( basename($urlImagesOk[$key]).' 文件下载成功 '); }else{ print_r( basename($urlImagesOk[$key]).' 下载失败 '); } } //print_r($urlImagesOk); } /* * 相对路径绝对路径判定函数 * $imageUrl 图片链接数组 * true 为绝对路径 * false 为相当路径 */ function pathCheck($imageUrl){ if(preg_match('|^(\/)|',$imageUrl)){ return true; }else{ return false; } } /* * 图片下载函数 * $url 图片链接 * $filename图片名字 */ function grabImage($url, $filename){ global $savePath; if($url == '') { return false; //如果 $url 为空则返回 false; } $ext_name = strrchr($url, '.'); //获取图片的扩展名 if($ext_name != '.gif' && $ext_name != '.jpg' && $ext_name != '.bmp' && $ext_name != '.png') { return false; //格式不在允许的范围 } if($filename == '') { return false; //名称无效 } //开始捕获 ob_start(); if(readfile($url)){ $img_data = ob_get_contents(); ob_end_clean(); $size = strlen($img_data); }else{ ob_end_clean(); return false; } if(($local_file = fopen($savePath.$filename , 'a'))&&(fwrite($local_file, $img_data))) { fclose($local_file); return true; } } /* * 保存目录 */ function getSavePath($savepath){ $savePath = $savepath; $savePath = dirname(__FILE__).$savePath; return $savePath; } /* * 解析url */ function getParse($host,$type){ $baseurl = parse_url($host); return $baseurl[$type].'/'; //echo $baseurl; } ?>
希望本文所述对大家的PHP程序设计有所帮助。