Maison  >  Article  >  développement back-end  >  Explication détaillée de la façon d'utiliser php pour capturer le code d'image CSS

Explication détaillée de la façon d'utiliser php pour capturer le code d'image CSS

伊谢尔伦
伊谢尔伦original
2017-07-17 15:22:081502parcourir

1. Capturez des images en CSS :
> 1. Effectuez d'abord les préparations :
> puis enregistrez le contenu CSS dans abc.css.
> Considérant que plusieurs fichiers CSS sont souvent rencontrés, Xiaoxie n'a pas directement renseigné de chemin CSS.
> Au lieu de cela, fusionnez le contenu de plusieurs fichiers CSS et placez-les tous dans le fichier abc.css.

$data = file_get_contents('abc.css');

> Ensuite, lisez le contenu du fichier CSS dans la variable $data, puis utilisez Regular expressions pour retirer le nom de domaine.
> Parce qu'on considère que de nombreux fichiers image utilisent des chemins racine relatifs, tels que /img/1.gif et img/1.gif.
> Ensuite, l'adresse d'origine de CSS est http://www.jb51.net/css/, donc les emplacements des deux fichiers ci-dessus sont différents.

> Le premier fichier se trouve dans /upload/201109/20110926143903807.gif, car son chemin utilise un chemin racine relatif.
> Et le deuxième se trouve dans /upload/201109/20110926143903169.gif, et son chemin est juste un chemin relatif ordinaire.

2. Créez le dossier de stockage d'images :
> Xiaoxie a utilisé is_dir ici pour déterminer si le dossier existe, il n'est pas nécessaire de le créer une seconde fois.
> Haha, au fait, la fonction is_file peut déterminer si ce fichier est un fichier normal et s'il existe.
> Mais file_exists() est un peu supérieur, car j'ai vu quelqu'un en discuter une fois sur Webmasterworld.com.

if (!is_dir('img')) { mkdir('img'); }

> 3. Utilisez des expressions régulières pour obtenir l'adresse relative de l'image :

$regex = '/url('{0,1}"{0,1}(.*?)'{0,1}"{0,1})/'
//Utiliser régulier expressions ici Pour faire correspondre l'adresse de l'image, trois situations doivent être considérées, à savoir url(1.gif) url('1.gif') url("1.gif").
//Ces trois méthodes d'écriture peuvent être utilisées, nous utiliserons donc les règles régulières ci-dessus pour supprimer le 1.gif à l'intérieur.
//'{0,1} signifie que les guillemets simples peuvent apparaître 1 ou 0 fois, " signifie que les guillemets doubles peuvent apparaître 1 ou 0 fois.
//La correspondance paresseuse doit être utilisée au milieu, sinon elle sera retiré C'est 1.gif" au lieu de 1.gif oiseau, O(∩_∩)P.
preg_match_all($regex,$data,$result);

> 4. Traitez ces images :

> avec le tableau de contenu de la première branche.
> Eh bien, la première branche ici représente la première parenthèse dans l'expression régulière, haha, et ainsi de suite.

foreach ($result[1] as $val) { }

> Ensuite, utilisez des expressions régulières pour déterminer, car vous devez également prendre en compte ceci /upload/201109/20110926143903807.gif.
> Ceci utilise le chemin complet au lieu de /img/1.gif ou img/1.gif comme les autres.
> Alors jugez-le séparément, puis jugez ces deux-là pour voir s'il s'agit de /img/1.gif ou 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 : Activer la mise en mémoire tampon de sortie
Cette fonction activera la mise en mémoire tampon de sortie Lorsque la mise en mémoire tampon de sortie est active, aucune sortie n'est envoyée du script (autre que les en-têtes), à la place la sortie est stockée dans. un tampon interne. (La sortie est stockée dans un tampon interne)
//
readfile : lit un fichier et l'écrit dans le tampon de sortie
Renvoie le nombre d'octets lus dans le fichier. Renvoie FALSE en cas d'erreur et affiche un message d'erreur à moins qu'il ne soit appelé comme @readfile().
//

ob_get_contents : Renvoie le contenu du tampon de sortie (renvoie le contenu du tampon de sortie)
Cela renverra le contenu du tampon de sortie sans l'effacer ou FALSE, si mise en tampon de sortie n'est pas actif. (Renvoie FALSE si le tampon de sortie n'est pas actif (ouvert))
//
ob_end_clean() : Nettoyer (effacer) le tampon de sortie et désactiver la mise en tampon de sortie.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn