ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルを使用したリモート画像収集の詳細なチュートリアル

PHP_PHP チュートリアルを使用したリモート画像収集の詳細なチュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:26:30823ブラウズ

インターネット上の特定の Web ページのコンテンツを収集する必要がある場合、対象の Web サイト上の写真がホットリンクから保護されている場合、収集した写真は当社自身の Web サイトで直接利用できなくなります。次に、プログラムを使用して対象の Web サイト上の画像を Web サイトのサーバーにダウンロードすると、その画像を呼び出すことができます。

この記事ではPHPを使用してリモート画像収集機能を実装します。基本的なプロセス:
1. 対象の Web サイトの画像アドレスを取得します。
2. 画像の内容を読みます。
3. 画像を保存するパスを作成し、画像に名前を付けます。
4. 画像の内容を書き込みます。
5. 完了します。
このプロセスは、いくつかの関数を作成して実装します。
関数 make_dir() はディレクトリを作成します。保存する画像ファイルのディレクトリが存在するか確認し、存在しない場合はディレクトリを作成し、書き込み権限を設定してください。

コードをコピーします コードは次のとおりです:
function make_dir($path){
If(!file_exists($path)){// 存在しない場合は作成します
$mk=@mkdir($path,0777) //権限
; @chmod($path,0777); }
true を返します。

関数 read_filetext() は画像コンテンツを取得します。 fopen を使用してイメージ ファイルを開き、次に fread を使用してイメージ ファイルの内容を読み取ります。


コードをコピーします コードは次のとおりです:
関数 read_filetext($filepath){
$ファイルパス=トリム($ファイルパス); $htmlfp=@fopen($filepath,"r"); //リモート
If(strstr($filepath,"://")){
while($data=@fread($htmlfp,500000)){
$string.=$data; }
}
//ローカル
他{
$string=@fread($htmlfp,@filesize($filepath)); }
@fclose($htmlfp); $string を返します。 }

関数 write_filetext() はファイルを書き込み、画像コンテンツ fputs をファイルに書き込みます。つまり、画像ファイルは保存されます。



コードをコピーします

コードは次のとおりです:


関数 write_filetext($filepath,$string){
//$string=ストリップスラッシュ($string); $fp=@fopen($filepath,"w"); @fputs($fp,$string); @fclose($fp); } get_filename() 関数はイメージ名を取得します。また、保存するファイル名をカスタマイズすることもできます。
コードをコピーします

コードは次のとおりです:


関数 get_filename($filepath){
$fr=explode("/",$ファイルパス); $count=count($fr)-1; $fr[$count] を返します


次に、いくつかの関数を組み合わせて関数 save_pic() で呼び出し、最後に保存された画像のパスを返します。
コードをコピーします
コードは次のとおりです:


関数 save_pic($url,$savepath=''){
//処理アドレス
$url=トリム($url); $url=str_replace(" ","%20",$url); //ファイルを読み取る
$string=read_filetext($url); If(空($string)){
echo 'ファイルを読み取れません';終了
; }
//ファイル名
$filename = get_filename($url); //保存ディレクトリ Make_dir($savepath) // 保存ディレクトリを作成します //ファイルアドレス $ファイルパス = $保存パス.$ファイル名 //ファイルを書き込む
write_filetext($filepath,$string); $ファイルパスを返します
}

最後のステップでは、save_pic() 関数を呼び出して画像を保存します。テストには次のコードを使用します。



コードをコピーします

コードは次のとおりです:


//対象の画像アドレス
$pic = "http://img0.pconline.com.cn/pconline/1205/06/2776119_end1_thumb.jpg"; //ディレクトリを保存します
$savepath = "画像/"; echo save_pic($pic,$savepath);

実際のアプリケーションでは、アンチホットリンク画像の収集を含む、製品情報などの特定のサイトのコンテンツを収集し、Web サイト上のサーバーに保存することがあります。現時点では、通常のマッチングを使用してページのコンテンツを照合し、ページ内で一致するすべての写真を見つけて、それらをそれぞれ Web サイトのサーバーにダウンロードして、写真のコレクションを完成させることができます。次のコードはテスト専用です:
コードをコピーします コードは次のとおりです:

関数 get_pic($cont,$path){
$pattern_src = '//'; $num = preg_match_all($pattern_src, $cont, $match_src); $pic_arr = $match_src[1] //画像配列を取得します
; foreach ($pic_arr as $pic_item) { //ループして各画像のアドレスを取得します
save_pic($pic_item,$path) //画像をダウンロードして保存します
エコー「[OK]..!」 }
}

次に、ページ コンテンツを分析してメイン コンテンツを見つけ、get_pic() を呼び出して画像を保存します。


コードをコピーします
コードは次のとおりです: //PConline の携帯電話に関するレポートのコンテンツ ページから写真を収集します
$url = "http://gz.pconline.com.cn/321/3215791.html";
$content = file_get_contents($url);//Web コンテンツを取得します
$preg = '#
(.*)
#iUs'; preg_match_all($preg, $content, $arr); $cont = $arr[1][0]; get_pic($cont,'img/'); 上記のコードは作成者によって個人的にテストされており、画像を収集できますが、たとえば、ターゲット Web サイトが 302 回以上のジャンプを行った場合など、いくつかのシナリオがまだ考慮されていません。さまざまな反収集方法を試すのは好きな生徒に任せます。




http://www.bkjia.com/PHPjc/824692.html

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/824692.html

技術記事インターネット上の特定の Web ページのコンテンツを収集する必要がある場合、対象の Web サイト上の写真がホットリンクから保護されている場合、収集した写真は当社の Web サイトで直接利用できなくなります。それは…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。