この記事の例では、PHP 泥棒プログラムの設計と実装方法について説明します。参考までに皆さんと共有してください。詳細は次のとおりです:
実際、私は常に含蓄のある写真を含むウェブサイトを作成したいと考えていました。以前のアイデアは、CMS を作成して自分でいくつかの写真をアップロードすることでした。 。
これを始めたとき、私にはやる気がありませんでした。それで諦めて、その後CURLを勉強しました。とにかく、このアイデアは実行した方が良いでしょう。
PHP を使用して写真を盗むのは、靴下とサンダルを履くようなものです。それは大丈夫ですが、見ていると痛くなります。
まず、PHP 泥棒プログラムの設計について話させてください。PHP はマルチスレッドをサポートしていないため、順番にのみ実行できます。
ターゲット Web サイトの HTML ページを取得し、HTML ページを解析して接続を取得します。画像ストレージへ + バイナリ モードで読み取り、ローカルに保存 + 名前変更 == プロセスは OK です
ここで、プログラムを実行する 2 つの方法を使用します:
1 つ目の方法: ブラウザでプログラムを実行します (フリーズする可能性が高いです) 、タイムアウトとメモリ サイズを設定します。OK、待つのは難しいでしょう)
別のオプション: コマンド ラインから PHP を起動します (PHP タイムアウトの問題はありません)
/** *HTML解析类 *author:Summer *date:2014-08-22 **/ class Analytical{ public function __construct() { require_once('Class/SimpleHtmlDom.class.php'); $this->_getDir(); } private function _getDir() { $dir = "../TMP/HTML/Results/1"; $imgBIG = "../TMP/IMG/JPG/BIG"; $it = new DirectoryIterator($dir."/"); foreach($it as $file) { //用isDot ()方法分别过滤掉“.”和“..”目录 if (!$it->isDot()) { $dirs = $dir."/".$file ; $tmp = explode(".",$file); $html = file_get_html($dirs); $ulArr = $html->find('img'); foreach($ulArr as $key=>$value) { if ($value->class == "u") { $url = <a>http://</a>www.jb51.net.$value->src; $infomation = file_get_contents($url); $result = $this->saveHtml($infomation, $imgBIG, $tmp['0'].".jpg"); if($result) { echo $file."OK\n"; } } } } } } private function saveHtml($infomation,$filedir,$filename) { if(!$this->mkdirs($filedir)) { return 0; } $sf = $filedir."/".$filename; $fp=fopen($sf,"w"); //写方式打开文件 return fwrite($fp,$infomation); //存入内容 fclose($fp); //关闭文件 } //创建目录 private function mkdirs($dir) { if(!is_dir($dir)) { if(!$this->mkdirs(dirname($dir))){ return false; } if(!mkdir($dir,0777)){ return false; } } return true; } } new Analytical();
上記は IMG を取得するプロセスですHTML ページからの接続アドレス。
2 つの重要なことが使用されます:
1. PHP の DOM 解析拡張機能 simplehtmldom
2. PHP のディレクトリ イテレーター
これら 2 つのことを理解しました。この分析クラスには難しいことはありません。
解析する必要があるページを取得してみるのはどうでしょうか?
実際、原理は上記と同じです。主にページの URL を取得し、CURL を通じてページを読み取り、HTML 文字列を返し、保存関数パッケージを通じて HTML ページをローカルに保存します。
私はページ上の写真を収集したいためにここにいます(他の人がホットリンクするのを防ぐため)ので、デザインは比較的複雑です。
そして、なぜ分離する必要があるのかというと、simplehtmldom オブジェクトは非常に大きいので、分解することでプロセスが明確になるからです。
それなら通常のマッチングを使用して、HTML をローカルに保存するリンクをスキップすればいいのではないか、BINGO! と言う人もいるでしょう。通常のルールを書く気にはなれません。
PHP thief プログラムの設計と実装方法の詳細な説明については、PHP 中国語 Web サイトに注目してください。