CSSのすべての画像ファイルのphpコードをキャプチャしてダウンロードします。


この文章のハイライトは、正則式がより複雑であることである。q,またCopy関数の灰が非常に強い使い方です。ところで、先ほどNsYtaさんから、小邪さんのテーマが白すぎると聞きましたが、杯具さん。最近は忙しくて、暇がないです。でないと、自分で新しいテーマを作ります。一.CSSの中の画像をキャプチャする:>>1.まず準備作業を行います。まず、CSSの元の経路を$url変数に保存して、CSSの内容をabc.cssに保存します。複数のCSSファイルに常に遭遇する状況を考慮して、小邪は直接CSSパスを記入していません。いくつかのCSSファイルの内容を合わせてabc.csファイルに全部詰め込むだけでいいです。data=file_ゲットするcontensts('abc.css')次にCSSファイルの内容を$data変数に読み込み、正規のドメイン名を取り出します。ここでは多くの画像ファイルを考慮して相対ルートルートを使用しています。そしてCSS元アドレスはhttps://www.jb51.net/css/ 上の二つのファイルの位置は違います。>最初のファイルは/uplload/20109/201019243903807 gifで、その経路は相対ルートパスを使用しているからです。第二は/uplload/20109/20101926143903169.gifであり、その経路は普通の相対経路にすぎない。
 
$url = 'https://www.jb51.net/css/'; preg_match('/(.*\/\/.*?)\//',$url,$host);
// https://www.jb51.net/ , 。
//.*? , , 。
$host = $host[1];
2.画像の保存フォルダを作成します。dirはフォルダが存在するかどうかを確認します。存在するなら、もう二回作成しなくてもいいです。ふふ、ちなみに、is_file関数は、このファイルが正常なファイルかどうかを判断してもいいし、存在するかを判断してもいいです。だけどfile_exists()の優れた点は、ある時Webmasterworld.comで議論されている人を見たからです。if(is_dir('img){mkdir]>3.正規式で写真の相対住所を取り出します。$regex='/url\(\'{0,1}\"{0,1}(.*)''{0,1{0,1}/'////ここでは正則式で画像アドレスを合わせます。三つの場合を考慮して、url(1.gif)url('1.gif')url(“1.gif”)。この3つの書き方は全部使えるので、上の正則を使って中の1.gifを取り出します。0,1}はシングルクォーテーションマークが1回または0回の可能性があることを示し、\"はダブルクォーテーションが1回または0回の可能性があることを示します。中間は必ず怠惰なマッチングを使用しなければならなくて、さもなくば取り出したのは1.gif鳥ではありません。∩)Ppreg_matchall($regex、$data、$relt);4.これらの画像を処理する:>>まず一つの循環を使って、上に正則で抽出された第一の分岐内容配列を処理してください。えっと、ここの第一枝は正則式の中の第一括弧を表しています。foreach($result[1]as$val]){}>そして正規判定をするので、このような/uplload/20109/20101926143903807 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."<br/>\r
";
>最後にファイル名を取り出します。つまり/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に保存すればいいです。
 
<?php
$url = 'https://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."<br/>\r
";
preg_match('/.*\/(.*\.\D+)$/',$val,$name);
if (!is_file('./img/'.$name[1])) {
copy($target,'./img/'.$name[1]);
}
}?>