ホームページ php教程 php手册 抓取并下载CSS中所有图片文件的php代码

抓取并下载CSS中所有图片文件的php代码

Jun 06, 2016 pm 08:38 PM
css 画像ファイル

今天就让 PHP 用正则式把 CSS 文件中的所有图片文件,都从 CSS 原来的位置下载来吧。

这篇文章的亮点是,正则式更加复杂鸟,╮(-_-)╭,再就是 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.jb51.net/css/ 那么上面的两个文件位置是不同的。

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

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ブートストラップリストでデフォルトスタイルを削除する方法は? ブートストラップリストでデフォルトスタイルを削除する方法は? Apr 07, 2025 am 10:18 AM

ブートストラップリストのデフォルトスタイルは、CSSオーバーライドで削除できます。より具体的なCSSルールとセレクターを使用し、「近接原理」と「重量原理」に従って、ブートストラップのデフォルトスタイルをオーバーライドします。スタイルの競合を避けるために、よりターゲットを絞ったセレクターを使用できます。オーバーライドが失敗した場合は、カスタムCSSの重量を調整します。同時に、パフォーマンスの最適化に注意を払い、重要な!の過剰使用を避け、簡潔で効率的なCSSコードを書いてください。

ブートストラップボタンの使用方法 ブートストラップボタンの使用方法 Apr 07, 2025 pm 03:09 PM

ブートストラップボタンの使用方法は?ブートストラップCSSを導入してボタン要素を作成し、ブートストラップボタンクラスを追加してボタンテキストを追加します

ブートストラップリストのサイズを変更する方法は? ブートストラップリストのサイズを変更する方法は? Apr 07, 2025 am 10:45 AM

ブートストラップリストのサイズは、リスト自体ではなく、リストを含むコンテナのサイズに依存します。 BootstrapのグリッドシステムまたはFlexBoxを使用すると、コンテナのサイズを制御することで、リスト項目を間接的に変更します。

ブートストラップのサイズを変更する方法 ブートストラップのサイズを変更する方法 Apr 07, 2025 pm 03:18 PM

Bootstrapの要素のサイズを調整するには、次のものを含むDimensionクラスを使用できます。

ブートストラップにファイルをアップロードする方法 ブートストラップにファイルをアップロードする方法 Apr 07, 2025 pm 01:09 PM

ファイルアップロード機能は、Bootstrapを介して実装できます。手順は次のとおりです。BootstrapCSSおよびJavaScriptファイルを紹介します。ファイル入力フィールドを作成します。ファイルアップロードボタンを作成します。ファイルのアップロードを処理します(FormDataを使用してデータを収集し、サーバーに送信します)。カスタムスタイル(オプション)。

ブートストラップのレイアウト方法 ブートストラップのレイアウト方法 Apr 07, 2025 pm 02:24 PM

Bootstrapを使用してWebサイトをレイアウトするには、グリッドシステムを使用してページをコンテナ、行、列に分割する必要があります。最初にコンテナを追加し、その中の行を追加し、行内の列を追加し、最後に列にコンテンツを追加します。ブートストラップのレスポンシブレイアウト関数は、ブレークポイント(XS、SM、MD、LG、XL)に従ってレイアウトを自動的に調整します。レスポンシブクラスを使用することで、異なる画面サイズの下の異なるレイアウトを実現できます。

ブートストラップに写真を挿入する方法 ブートストラップに写真を挿入する方法 Apr 07, 2025 pm 03:30 PM

ブートストラップに画像を挿入する方法はいくつかあります。HTMLIMGタグを使用して、画像を直接挿入します。ブートストラップ画像コンポーネントを使用すると、レスポンシブ画像とより多くのスタイルを提供できます。画像サイズを設定し、IMG-Fluidクラスを使用して画像を適応可能にします。 IMGボーダークラスを使用して、境界線を設定します。丸い角を設定し、IMGラウンドクラスを使用します。影を設定し、影のクラスを使用します。 CSSスタイルを使用して、画像をサイズ変更して配置します。背景画像を使用して、背景イメージCSSプロパティを使用します。

ブートストラップフレームワークを構築する方法 ブートストラップフレームワークを構築する方法 Apr 07, 2025 pm 12:57 PM

ブートストラップフレームワークを作成するには、次の手順に従ってください。CDN経由でブートストラップをインストールするか、ローカルコピーをインストールします。 HTMLドキュメントを作成し、ブートストラップCSSを< head>にリンクしますセクション。 bootstrap javascriptファイルを< body>に追加するセクション。ブートストラップコンポーネントを使用して、ニーズに合わせてスタイルシートをカスタマイズします。

See all articles