ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用してリモート画像を収集する_PHP チュートリアル

PHP を使用してリモート画像を収集する_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-20 11:17:48960ブラウズ

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

​ この記事では、PHP を使用してリモート画像を収集する機能を実装します。基本的なプロセス: ​ 1. 対象の Web サイトの画像アドレスを取得します。 ​ 2. 画像の内容を読みます。 ​ 3. 画像を保存するパスを作成し、画像に名前を付けます。 ​ 4. 画像の内容を書き込みます。 ​ 5.完了。 ​ このプロセスは、いくつかの関数を作成して実装します。 ​ 関数 make_dir() はディレクトリを作成します。保存する画像ファイルのディレクトリが存在するか確認し、存在しない場合はディレクトリを作成し、書き込み権限を設定してください。 ​ 関数 make_dir($path){ ​ if(!file_exists($path)){// 存在しない場合は作成します ​ $mk=@mkdir($path,0777); //権限 ​ @chmod($path,0777); ​ } ​ true を返します。 ​ } ​ 関数 read_filetext() は画像コンテンツを取得します。 fopen を使用してイメージ ファイルを開き、次に fread を使用してイメージ ファイルの内容を読み取ります。 ​ 関数 read_filetext($filepath){ ​ $filepath=trim($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("/",$filepath); ​ $count=count($fr)-1; ​ $fr[$count]を返します; ​ } ​ 次に、いくつかの関数を組み合わせて関数 save_pic() で呼び出し、最後に保存された画像のパスを返します。 ​ function 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 = "/program/UploadPic/2013-4/201343155341353.jpg"; ​ //ディレクトリを保存 ​ $savepath = "画像/"; ​ echo save_pic($pic,$savepath); ​ 実際の用途では、当社は、リーチ防止画像の収集を含む製品情報など、特定のサイトのコンテンツを収集し、Web サイト上のサーバーに保存することがあります。現時点では、通常のマッチングを使用してページのコンテンツを照合し、ページ内で一致するすべての写真を見つけて、それらをそれぞれ Web サイトのサーバーにダウンロードして、写真のコレクションを完成させることができます。次のコードはテスト専用です。 ​ 関数 get_pic($cont,$path){ ​ $pattern_src = '/<[imgIMG].*?src=/picture/allimg/130409/123450BK-0.gif/.jpg]))['"].*?[/]?>/'; ​ $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); //画像をダウンロードして保存します。 ​ echo "[OK]..!"; ​ } ​ } ​ 次に、ページ コンテンツを分析し、メイン コンテンツを見つけて、get_pic() を呼び出して画像を保存します。 ​ //PConline の携帯電話に関するレポートのコンテンツ ページから写真を収集しました リーリー ​ 上記のコードは作成者によって個人的にテストされており、画像を収集できますが、たとえば、ターゲット Web サイトが 302 回以上のジャンプを行った場合など、いくつかのシナリオがまだ考慮されていません。さまざまな反収集方法を試すのは好きな生徒に任せます。

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