Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Entwurfs- und Implementierungsmethode des PHP-Thief-Programms

Detaillierte Erläuterung der Entwurfs- und Implementierungsmethode des PHP-Thief-Programms

高洛峰
高洛峰Original
2016-12-20 09:06:331307Durchsuche

Das Beispiel in diesem Artikel beschreibt die Entwurfs- und Implementierungsmethode des PHP-Thief-Programms. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Eigentlich wollte ich schon immer eine Website mit konnotativen Bildern erstellen. Meine vorherige Idee war, ein CMS zu erstellen und selbst einige Bilder hochzuladen. .

Als ich damit anfing, hatte ich keine Motivation. Danach gab ich es auf und studierte später CURL. Auf jeden Fall wäre es besser, diese Idee umzusetzen.

Mit PHP Bilder zu stehlen ist so, als würde man Socken und Sandalen tragen. Obwohl es in Ordnung ist, tut es weh, es anzusehen.

Lassen Sie mich zunächst über mein Design des PHP-Thief-Programms sprechen. PHP unterstützt kein Multithreading, daher kann dies nur durchgeführt werden, um

die HTML-Seite der Zielwebsite abzurufen + HTML analysieren Die Seite erhält die Verbindung zum Bildspeicher + liest es im Binärmodus und speichert es lokal + benennt == Prozess OK

Sie führen das Programm jetzt auf zwei Arten aus:

Die erster Weg: Verwenden Sie einen Browser, um das Programm auszuführen (höchstwahrscheinlich friert es ein, stellen Sie einfach das Timeout und die Speichergröße ein und es wird in Ordnung sein. Es wird Ihnen schwer fallen zu warten)

Eine andere Option: Starten Sie PHP über die Befehlszeile (es gibt kein PHP-Timeout-Problem)

/**
*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[&#39;0&#39;].".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();

Das Obige ist der Prozess zum Abrufen der IMG-Verbindungsadresse von der HTML-Seite.

verwendet zwei wichtige Dinge:

1. PHPs DOM-Parsing-Erweiterung simplehtmldom

2. PHPs Verzeichnis-Iterator

Verstehen Sie diese zwei Dinge. In diesem Analysekurs gibt es keine Schwierigkeiten.

Sprechen Sie darüber, wie Sie die Seite erhalten, die analysiert werden muss?

Tatsächlich ist das Prinzip dasselbe wie oben. Rufen Sie hauptsächlich die URL der Seite ab, lesen Sie die Seite dann über CURL, geben Sie eine HTML-Zeichenfolge zurück,

und speichern Sie die HTML-Seite dann lokal über das Speicherfunktionspaket.

Ich bin hier, weil ich die Bilder auf der Seite sammeln möchte (um andere am Hotlinking zu hindern), daher ist das Design relativ kompliziert.

Und der Grund, warum es getrennt werden muss, liegt darin, dass das simplehtmldom-Objekt sehr groß ist und das Zerlegen den Prozess klarer macht.

Einige Leute werden definitiv sagen: Warum verwenden Sie dann nicht reguläre Ausdrücke zum Abgleichen und überspringen den Schritt des Speicherns des HTML-Codes im lokalen BINGO? Ich habe einfach keine Lust, regelmäßige Regeln zu schreiben.



Ausführlichere Erläuterungen zu den Design- und Implementierungsmethoden des PHP-Thief-Programms finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn