Home  >  Article  >  Backend Development  >  Grab and download the php code of all image files in CSS

Grab and download the php code of all image files in CSS

高洛峰
高洛峰Original
2016-11-30 13:39:261142browse

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]);
}
}?>

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn