Home > Article > Backend Development > Detailed explanation of how to use php to capture css image code
1. Capture images in CSS:
> 1. First make preparations:
> The first step is to save the original path of CSS to $url variable, and then save the CSS content 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 Take out 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.jb51.net/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 an ordinary relative path.
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 be used, so we will 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 What comes out is 1.gif" instead of 1.gif bird, O(∩_∩)P.
preg_match_all($regex,$data,$result);
> 4. Process these images:
> First use a loop to extract the above using regular expressions Let’s deal with the content array of the first branch.
> 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 we 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.
<?php //URL是远程的完整图片地址,不能为空, $filename 是另存为的图片名字 //默认把图片放在以此脚本相同的目录里 function GrabImage($url, $filename=""){ //$url 为空则返回 false; if($url == ""){return false;} $ext = strrchr($url, ".");//得到图片的扩展名 if($ext != ".gif" && $ext != ".jpg" && $ext != ".bmp"){echo "格式不支持!";return false;} if($filename == ""){$filename = time()."$ext";}//以时间戳另起名 //开始捕捉 ob_start(); readfile($url); $img = ob_get_contents(); ob_end_clean(); $size = strlen($img); $fp2 = fopen($filename , "a"); fwrite($fp2, $img); fclose($fp2); return $filename; } //测试 GrabImage("http://www.php.cn/images/logo.gif", "as.gif"); ?>
ob_start : Turn on output buffering
This function will turn output buffering on. While output buffering is active no output is sent from the script (other than headers), instead the output is stored in an internal buffer . (Output is stored in an internal buffer)
//
readfile: Read a file and write it to the output buffer
Returns the number of bytes read from the file. If an error occurs, FALSE is returned and an error message is displayed unless called as @readfile().
//
ob_get_contents : Return the contents of the output buffer (return the contents of the output buffer)
This will return the contents of the output buffer without clearing it or FALSE, if output buffering isn' t active. (Returns FALSE if the output buffer is not active (open))
//
ob_end_clean(): Clean (erase) the output buffer and turn off output buffering (clear the output buffer).
The above is the detailed content of Detailed explanation of how to use php to capture css image code. For more information, please follow other related articles on the PHP Chinese website!