Home > Article > Backend Development > Grab and download the php code of all image files in CSS
The highlight of this article is that the regular expression is more complicated, ?(-_-)?, and then there is a very powerful use of the Copy function.
> By the way, I just heard NsYta say that Xiao Xie’s theme is too white, which is ridiculous. I'm too busy recently and don't have time, otherwise I would create a new theme myself.
1. Capture images in CSS:
> 1. First make preparations:
> The first step is to save the original path of the CSS into the $url variable, and then save the content of the CSS in abc .css.
> Considering that multiple CSS files are often encountered, Xiaoxie did not directly fill in a CSS path.
> Instead, merge the contents of several CSS files together and stuff them all into the abc.css file. Quack.
$data = file_get_contents('abc.css');
> Then read the contents of the CSS file into the $data variable, and then use regular expressions to extract the domain name.
> Because it is considered that many image files use relative root paths, such as /img/1.gif and img/1.gif.
> Then the original address of CSS is http://www.bitsCN.com/css/, so the locations of the two files above are different.
> The first file is at /upload/201109/20110926143903807.gif, because its path uses a relative root path.
> And the second one is at /upload/201109/20110926143903169.gif, and its path is just a normal relative path.
Copy the code The code is as follows:
$url = 'http://www.bitsCN.com/css/'; preg_match('/(.*//.*?)//',$url,$host);
//Use regular expressions to extract http://www.bitsCN.com/ here. Don’t forget to add a slash in the backend.
//.*? is lazy matching, that is, the less content it can match, the less content it can match, so that it will not be overdone.
$host = $host[1];
2. Create the image storage folder:
> Xiaoxie used is_dir here to determine whether the folder exists. If it exists, there is no need to create it a second time.
> Haha, by the way, the is_file function can determine whether this file is a normal file and whether it exists.
> But file_exists() is superior, because I saw someone discussing it on Webmasterworld.com once.
if (!is_dir('img')) { mkdir('img'); }
> 3. Use regular expressions to get the relative address of the image:
$regex = '/url('{0, 1}"{0,1}(.*?)'{0,1}"{0,1})/';
//Here we use regular expressions to match the image address. Three situations need to be considered, namely url( 1.gif) url('1.gif') url("1.gif").
//These three writing methods can all be used, so let’s use the above regular rules to take out the 1.gif inside.
//'{0,1} means that single quotes may appear 1 or 0 times, " means that double quotes may appear 1 or 0 times.
//Lazy matching must be used in the middle, otherwise the result will be 1.gif " Instead of 1.gif bird, O(∩_∩)P.
preg_match_all($regex,$data,$result);
> 4. Process these images:
> First use a loop to process the first branch content array extracted using regular expressions.
> Well, the first branch here represents the first bracket in the regular expression, haha, and so on.
foreach ($result[1] as $val) { }
> Then use regular expressions to determine, because you also need to consider this /upload/201109/20110926143903807.gif.
> This uses the complete path instead of /img/1.gif or img/1.gif like others.
> So judge it separately, and then judge these two to see if it is /img/1.gif or img/1.gif.
Copy the code The code is as follows:
if (preg_match('/^http.*/',$val)) { $target = $val; }
else if (preg_match('/^/.*/',$val) ) { $target=$host.$val; }
else { $target=$url.$val; }
echo $target."
rn";
> Finally, take out the file name, That is, 1.gif in /img/1.gif is used to save files.
Copy code The code is as follows:
preg_match('/.*/(.*.D+)$/',$val,$name);
> Then we can start downloading, here we will introduce a powerful Copy Function usage.
Copy the code The code is as follows:
if (!is_file('./img/'.$name[1])) {
$imgc = file_get_contents($target);
$handle = fopen('./img/'. $name[1],'w+');
fwrite($handle,$imgc);
fclose($handle);
}
> The above is our old method, quack, it is very troublesome. One time, Xiao Xie suddenly discovered the power of Copy.
> Copy can actually be downloaded, so you can easily use the following code to process it, and the above one can be retired.
Copy code The code is as follows:
if (!is_file('./img/'.$name[1])) {
copy($target,'./img/'.$name[1]);
}
> 5. Complete source code:
> Just fill in $url when using it, and then save all CSS content to abc.css.
Copy the code The code is as follows:
$url = 'http://www.bitsCN.com/css/';
$data = file_get_contents('abc.css');
preg_match('/(. *//.*?)//',$url,$host);
$host = $host[1];
if (!is_dir('img')) { mkdir('img'); }
$ regex = '/url('{0,1}"{0,1}(.*?)'{0,1}"{0,1})/';
preg_match_all($regex,$data,$result );
foreach ($result[1] as $val) {
if (preg_match('/^http.*/',$val)) { $target = $val; }
else if (preg_match('/^ /.*/',$val)) { $target=$host.$val; }
else { $target=$url.$val; }
echo $target."
rn";
preg_match('/.*/(.*.D+)$/',$val,$name);
if (!is_file('./img/'.$name[1])) {
copy($target ,'./img/'.$name[1]);
}
}?>