recherche
Maisondéveloppement back-endtutoriel php抓取并下载CSS中所有图片文件的php代码

这篇文章的亮点是,正则式更加复杂鸟,?(-_-)?,再就是 Copy 函数的灰常强大的一个用法。 
> 话说刚才听 NsYta 说小邪的主题太白了,杯具。最近太忙,没有空,不然就自己搞一个新主题。 

一. 抓取 CSS 中的图片: 
> 1. 首先做好准备工作: 
> 第一步,先把 CSS 原本的路径存到 $url 变量里,然后把 CSS 的内容保存在 abc.css 中。 
> 因为考虑到经常碰到多个 CSS 文件的状况,所以小邪没有直接填一个 CSS 路径。 
> 而是把几个 CSS 文件的内容合并到一起,全部塞到 abc.css 文件里面即可,嘎嘎嘎。 

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

> 接着读取 CSS 文件的内容到 $data 变量中,然后用正则式把域名给取出来。 
> 因为这里考虑到很多图片文件用到了相对根路径,比方说 /img/1.gif 和 img/1.gif。 
> 然后 CSS 原地址在 http://www.bitsCN.com/css/ 那么上面的两个文件位置是不同的。 

> 第一个文件在 /upload/201109/20110926143903807.gif,因为它的路径用到了相对根路径。 
> 而第二个在 /upload/201109/20110926143903169.gif,它的路径只是普通的相对路径。 
复制代码 代码如下: 
$url = 'http://www.bitsCN.com/css/'; preg_match('/(.*\/\/.*?)\//',$url,$host); 
//这里用正则式把 http://www.bitsCN.com/ 给取出来,后端不要忘记加斜杠喔。 
//.*? 是懒惰匹配,也就是能匹配得越少就匹配越少的内容,这样就不会取过头了。 
$host = $host[1]; 

2. 把图片存储文件夹建好: 
> 小邪这里用了 is_dir 来确定文件夹是否存在,存在的话,就不用再建立第二遍了。 
> 呵呵,顺便说下,is_file 函数可以确定此文件是否为正常文件,也可以确定是否存在。 
> 但 file_exists() 优越一点,因为某次看到有人在 Webmasterworld.com 上面讨论过。 

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

> 3. 用正则式把图片相对地址取出来: 

$regex = '/url\(\'{0,1}\"{0,1}(.*?)\'{0,1}\"{0,1}\)/'; 
//这里用正则式匹配出图片地址,要考虑三种情况,即 url(1.gif) url('1.gif') url("1.gif")。 
//这三种写法都是可以使用的,所以咱们就用上面的正则把里面的 1.gif 取出来。 
//\'{0,1} 表示单引号可能出现1次或0次,\" 则表示双引号可能出现1次或0次。 
//中间必须使用懒惰匹配,不然取出来的就是 1.gif" 而不是 1.gif 鸟,O(∩_∩)P。 
preg_match_all($regex,$data,$result); 

> 4. 处理这些图片: 

> 首先使用一个循环,把上面是用正则提取出来的第一分支内容数组给处理一下。 
> 额,这里的第一分支表示正则式里面的第一个括号来着,呵呵,以此类推。 

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

> 然后是用正则式判定,因为还要考虑到这样 /upload/201109/20110926143903807.gif。 
> 这样是使用了完整的路径了,而不是想其他的一样是 /img/1.gif 或者 img/1.gif。 
> 所以单独判断一下,然后接着判断这两个,看看是 /img/1.gif 还是 img/1.gif。 
复制代码 代码如下: 
if (preg_match('/^http.*/',$val)) { $target = $val; } 
else if (preg_match('/^\/.*/',$val)) { $target=$host.$val; } 
else { $target=$url.$val; } 
echo $target."
\r\n"; 

> 最后把文件名取出来,即 /img/1.gif 中的 1.gif,用于保存文件。 
复制代码 代码如下: 
preg_match('/.*\/(.*\.\D+)$/',$val,$name); 

> 然后咱们就可以开始下载了,这里要介绍一个强大的 Copy 函数用法。 
复制代码 代码如下: 
if (!is_file('./img/'.$name[1])) { 
$imgc = file_get_contents($target); 
$handle = fopen('./img/'.$name[1],'w+'); 
fwrite($handle,$imgc); 
fclose($handle); 


> 上面那个是咱们的老方法了,嘎嘎,很麻烦。某次,小邪突然发现 Copy 的强大。 
> Copy 居然也可以下载,所以可以轻松使用下面的代码来处理,上面的可以退休鸟。 
复制代码 代码如下: 
if (!is_file('./img/'.$name[1])) { 
copy($target,'./img/'.$name[1]); 


> 5. 完整源代码: 

> 使用的时候把 $url 填好即可,然后把所有 CSS 内容存到 abc.css 中即可。 
复制代码 代码如下: 
$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."
\r\n"; 
preg_match('/.*\/(.*\.\D+)$/',$val,$name); 
if (!is_file('./img/'.$name[1])) { 
copy($target,'./img/'.$name[1]); 

}?> 

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
Quelle est la différence entre les délais de session absolus et inactifs?Quelle est la différence entre les délais de session absolus et inactifs?May 03, 2025 am 12:21 AM

Le délai d'expiration de session absolue commence au moment de la création de session, tandis qu'un délai d'expiration inactif de session démarre au moment de la non-opération de l'utilisateur. Le délai d'expiration de session absolue convient aux scénarios où un contrôle strict du cycle de vie de la session est nécessaire, tels que les applications financières; Le délai d'attente de session inactif convient aux applications qui souhaitent que les utilisateurs maintiennent leur session active pendant longtemps, comme les médias sociaux.

Quelles étapes prenez-vous si les sessions ne fonctionnent pas sur votre serveur?Quelles étapes prenez-vous si les sessions ne fonctionnent pas sur votre serveur?May 03, 2025 am 12:19 AM

La défaillance de la session du serveur peut être résolue en suivant les étapes: 1. Vérifiez la configuration du serveur pour vous assurer que la session est correctement définie. 2. Vérifiez les cookies des clients, confirmez que le navigateur le prend en charge et l'envoyez-le correctement. 3. Vérifiez les services de stockage de session, tels que Redis, pour vous assurer qu'ils fonctionnent normalement. 4. Examiner le code de demande pour assurer la logique de session correcte. Grâce à ces étapes, les problèmes de conversation peuvent être diagnostiqués et réparés efficacement et l'expérience utilisateur peut être améliorée.

Quelle est la signification de la fonction session_start ()?Quelle est la signification de la fonction session_start ()?May 03, 2025 am 12:18 AM

Session_Start () IsCrucialInPhpFormanAgingUsersessions.1) ItinitiateSanEwSessionIfNoneExists, 2) ConsomaSanExistingSession, and3) SetSasessionCooKieforContinuityAcrossrequests, permettant aux applications liées à la réaction et à la personne.

Quelle est l'importance de définir l'indicateur httponly pour les cookies de session?Quelle est l'importance de définir l'indicateur httponly pour les cookies de session?May 03, 2025 am 12:10 AM

La définition de l'indicateur httponly est cruciale pour les cookies de session car il peut effectivement empêcher les attaques XSS et protéger les informations de session utilisateur. Plus précisément, 1) l'indicateur httponly empêche JavaScript d'accéder aux cookies, 2) l'indicateur peut être réglé via Setcookies et Make_Response dans PHP et FLASK, 3) Bien qu'il ne puisse pas être empêché de toutes les attaques, elle devrait faire partie de la politique de sécurité globale.

Quel problème les sessions PHP résolvent-elles dans le développement Web?Quel problème les sessions PHP résolvent-elles dans le développement Web?May 03, 2025 am 12:02 AM

PhpSessionsSsolvetheproblemOf-MainainingStateCrossMultiplehttprequestsByStoringDataontheserverAndassociatingitwithauniquesessionId.1) ils storentaserver, généralement infilesordatabases, et de lasse de lastoredinacookietatevevedata.2)

Quelles données peuvent être stockées dans une session PHP?Quelles données peuvent être stockées dans une session PHP?May 02, 2025 am 12:17 AM

PhpSessionsCanstorestrings, Numbers, Arrays, Andobject.1.Strings: TextDatalikeUserames.2.Numbers: IntegersorFloatsForCounters.3.arrays: listslikeshoppingcarts.4.Objects: complexestructuresthataReSerialized.

Comment démarrez-vous une session PHP?Comment démarrez-vous une session PHP?May 02, 2025 am 12:16 AM

TostartaphpSession, usessession_start () aTTheScript'sbeginning.1) PlaceItBeForeanyOutputToSetTheSessionCooKie.2) USESSIONSFORUSERDATALIKELOGINSTATUSORSHOPPINGSCARS.3) RegegeraSesessionIdStopreventfixationAtTACKS.4)

Qu'est-ce que la régénération des sessions et comment améliore-t-elle la sécurité?Qu'est-ce que la régénération des sessions et comment améliore-t-elle la sécurité?May 02, 2025 am 12:15 AM

La régénération de session fait référence à la génération d'un nouvel ID de session et à l'invalidation de l'ancien ID lorsque l'utilisateur effectue des opérations sensibles en cas d'attaques fixes de session. Les étapes de mise en œuvre incluent: 1. Détectez les opérations sensibles, 2. Générer un nouvel ID de session, 3. Détruiser l'ancien ID de session, 4. Mettre à jour les informations de session côté utilisateur.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

MantisBT

MantisBT

Mantis est un outil Web de suivi des défauts facile à déployer, conçu pour faciliter le suivi des défauts des produits. Cela nécessite PHP, MySQL et un serveur Web. Découvrez nos services de démonstration et d'hébergement.

MinGW - GNU minimaliste pour Windows

MinGW - GNU minimaliste pour Windows

Ce projet est en cours de migration vers osdn.net/projects/mingw, vous pouvez continuer à nous suivre là-bas. MinGW : un port Windows natif de GNU Compiler Collection (GCC), des bibliothèques d'importation et des fichiers d'en-tête librement distribuables pour la création d'applications Windows natives ; inclut des extensions du runtime MSVC pour prendre en charge la fonctionnalité C99. Tous les logiciels MinGW peuvent fonctionner sur les plates-formes Windows 64 bits.

mPDF

mPDF

mPDF est une bibliothèque PHP qui peut générer des fichiers PDF à partir de HTML encodé en UTF-8. L'auteur original, Ian Back, a écrit mPDF pour générer des fichiers PDF « à la volée » depuis son site Web et gérer différentes langues. Il est plus lent et produit des fichiers plus volumineux lors de l'utilisation de polices Unicode que les scripts originaux comme HTML2FPDF, mais prend en charge les styles CSS, etc. et présente de nombreuses améliorations. Prend en charge presque toutes les langues, y compris RTL (arabe et hébreu) ​​et CJK (chinois, japonais et coréen). Prend en charge les éléments imbriqués au niveau du bloc (tels que P, DIV),

Télécharger la version Mac de l'éditeur Atom

Télécharger la version Mac de l'éditeur Atom

L'éditeur open source le plus populaire