ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用してリモート画像を収集する_PHP チュートリアル
インターネット上の特定の 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 回以上のジャンプを行った場合など、いくつかのシナリオがまだ考慮されていません。さまざまな反収集方法を試すのは好きな生徒に任せます。