Problem beim Spidern

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem beim Spidern

    PHP-Code:
    <?php

    function crawl($Site$Follow)
    {
    $file file($Site);

        foreach(
    $file as $n)
        {
        
    $row "".$row."\n".$n."";
        }
            
        
    preg_match_all("!<a (?:.*)href=\"(.*)\"(?:.*)>(.*)</a>!isU",$row,$matches);
        
        for(
    $i 0$i count($matches[1]); $i++)
        {
        print 
    "".$i." ".$matches[1][$i]."<br>";
        
        if(
    $Follow != 0)
        {
        
    $Follow $Follow--;
        
    crawl($matches[1][$i], $Follow);
        }
        }
    }

    crawl($Seite$Follow);
        
    ?>
    Was das Script machen soll is klar, Seite auslesen, Links Suchen, Links ggf. auch auslesen, Links suchen ... [...]

    aber es will nicht so ganz...

    Code:
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    0http://www.flazh.de/index.htm
    
    Fatal error: Allowed memory size of 8388608 bytes exhausted 
    (tried to allocate 35 bytes) in /var/www/web4/html/spider.php on line 5
    http://h4xx0rn.info/spider.php?Follo...a/bmptoepa.htm
    das war der Aufruf

    Wo liegt der Fehler ?


    MfG wyros, danke für die Hilfe im voraus =)

    edit: Achja, es geht mir nicht um den Speicherfehler, woher der kommt weiß ich. Es geht darum, dass immer das gleiche angezeigt wird.
    Zuletzt geändert von wyros; 20.03.2005, 17:42.

  • #2
    edit: Achja, es geht mir nicht um den Speicherfehler, woher der kommt weiß ich. Es geht darum, dass immer das gleiche angezeigt wird.
    hat beides die gleiche ursache!

    aber mehr sag ich nem "h4xx0r" nicht. die sind zu cool für mich.

    Kommentar


    • #3
      omg, noch nie was von fundomain gehört -.- ?

      Kommentar


      • #4
        Wo wird bei dir eigentlich $Follow definiert?

        Kommentar


        • #5
          beim Aufruf

          MfG

          Kommentar


          • #6
            print_r($matches); hilft dir vllt.

            btw:

            PHP-Code:
            $row "".$row."\n".$n."";
            // schöner:
            $row .= "\n".$n;

            $Follow $Follow--;

            // das ist identisch...
            $Follow--; 
            und immer so um die 4 leerzeichen einrücken...
            Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
            var_dump(), print_r(), debug_backtrace und echo.
            Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
            Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
            Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

            Kommentar


            • #7
              Also ich bin ja kein Fan von sich selbst aufrufenden Funktionen... (Vorallem da es ewig dauert bis die UR-Funktion wieder geschlossen wird)

              Mein Ansatz ist - aus meiner Sicht - viel genialer

              [Eigens für dich zusammengebastelt, nicht für produktive Sachen gedacht, soll heißen ein paar Abfragen fehlen und das Ganze ist auch nicht optimal gelöst ]
              Zuletzt geändert von Weltenbrand; 10.03.2012, 18:27.

              Kommentar


              • #8
                Danke für den Beitrag und die Mühe Matt, mir wäre aber lieber wenn ich wenn ich wüsste was bei meinem Script der fehler ist ...

                Ohne den eigenaufruf funktioniert mein Script =(

                Helft mir bitte ...




                MfG wyros

                Kommentar


                • #9
                  @wyros: Vielleicht mal alle Links in ein Array einfügen und dann per in_array() schauen, ob der Link schon drinne ist ... wenn das zu keinem Ergebniss kommt, dann ist irgendwo ein Fehler ...
                  Bevor ich nicht in einem angemessenen Alter bin, werde ich keine Witze mehr über schmalle machen!
                  - Zitat Berni

                  Kommentar


                  • #10
                    Du übergibst der Funktion beim Aufruf eine URL, diese wird geparst, alle Links in einen Array geschrieben und mit dem ersten Eintrag wird die Funktion erneut aufgerufen. Sie liest nun die neue Seite, parst sie wieder in den Array, aber das erste Element ist immer noch das gleiche. Du rufst die Funktion also immer wieder mit dem gleichen Argument auf.
                    Jede Zeile deiner Ausgabe ist also aus einen Durchlauf von crawl(), salopp gesagt tritt dein Script also auf der Stelle - solange bis der Speicher nicht mehr ausreicht.
                    Die Lösung wurde eben schon genannt - du darfst Links nicht einfach so in den Array aufnehmen, sondern mußt sicherstellen, dass sie noch nicht darin enthalten oder zumindest noch nicht abgearbeitet wurden.

                    Kommentar

                    Lädt...
                    X