Ankündigung

Einklappen
Keine Ankündigung bisher.

Negative strpos-Prüfung

Einklappen

Neue Werbung 2019

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

  • Negative strpos-Prüfung

    Folgende Situation,

    Ziel: Prüfen, ob ein gewissener String im Quelltext einer Website vorhanden ist.

    Ich prüfe mittels der snoopy.class, ob ein gewisser String im Content vorhanden ist, folgendermaßen:

    PHP-Code:
    if (strpos($content,"suchstring") !== false) {
    echo 
    "ist vorhanden";

    Klappt einwandfrei!

    Möchte ich nun aber prüfen, ob der suchstring NICHT VORHANDEN ist, klappt es irgendwie nicht.
    Und zwar bekomme ich als Ergebnis, dass der String vorhanden sei, obwohl er NICHT vorhanden ist.

    var_dump habe ich bereits ausgegeben, String ist NICHT enthalten.

    Ich habe bereits probiert:

    PHP-Code:
    if (strpos($content,"suchstring") === false) {
    echo 
    "ist nicht vorhanden";

    PHP-Code:
    if (strpos($content,"suchstring") == false) {
    echo 
    "ist nicht vorhanden";

    PHP-Code:
    if (!strpos($content,"suchstring")) {
    echo 
    "ist nicht vorhanden";

    PHP-Code:
    if (strpos(!$content,"suchstring")) {
    echo 
    "ist nicht vorhanden";

    Ich habe es auch bereits mit diesem Workaround probiert:
    PHP-Code:
    if (strpos(!$content,"suchstring") !== false) {
    }
    else {echo 
    "ist nicht vorhanden";} 

    Was mache ich falsch?
    Gibt es für mein Vorhaben eine bessere Möglichkeit wie strpos?
    Das Suchwort befindet sich ca. in der Mitte des Quelltextes, also nicht am Anfang.

    Grüße & Danke sehr

  • #2
    Doch, die ersten drei Versionen „klappen“ sehr wohl (wobei die zweite und dritte natürlich problematisch sind, wenn sich das gesuchte am Stringanfang befinden sollte), und die vierte ist schlichtweg blödsinnig.

    Kommentar


    • #3
      Hi Chris, vielen Dank, aber es klappt so bei mir nicht.
      Welche andere Funktion schlägst Du neben strpos vor, um zu prüfen, ob der string nicht enthalten ist? preg_match "== 0"?

      Grüße & THX

      Kommentar


      • #4
        Ich schlage überhaupt keine andere vor;
        sondern stattdessen das Problem vernünftig zu analysieren, anstatt eine Zeile Code zu zeigen und „funzt nich“ zu jammern.

        Kontrollausgaben der beteiligten Variablen mittels var_dump direkt vor dem Vergleich wären der Anfang.

        Kommentar


        • #5
          klappt nicht.

          Kommentar


          • #6
            Habe meine Angaben korrigiert.

            Grüße

            Kommentar


            • #7
              Zitat von jkrueg42 Beitrag anzeigen
              Habe meine Angaben korrigiert.
              Das Problem wird dadurch aber immer noch nicht klarer.

              Was hat Snoopy damit zu tun?

              PHP-Code:
              $test1 'abcdefghi';
              $test2 'jklmnopqr';
              $such 'def';

              if(
              strpos($test1$such) === false) {
                echo 
              $test1.' enthält '.$such.' nicht';
              }
              if(
              strpos($test2$such) === false) {
                echo 
              $test2.' enthält '.$such.' nicht';
              }

              // Ausgabe, wie erwartet:
              // jklmnopqr enthält def nicht 
              Das funktioniert also exakt so, wie es zu erwarten ist.

              Dein Fehler muss also irgendwo drumherum liegen, in Code, den du uns bisher nicht gezeigt hast. Vielleicht hat es auch was damit zu tun, wie du Snoopy verwendest.

              Kommentar


              • #8
                Hallo Chris,

                ich habe mir ja bereits den komplett Snoopy-Result per var_dump ausgeben lassen (es ist halt ein kompletter Quelltext einer Website),
                dort drin steht der Suchstring definitiv nicht, aber das Script tut so, als würde er gefunden.

                Snoopy rufe ich so auf (klappt ja auch):
                PHP-Code:
                $snoopy= new Snoopy;        
                $snoopy->fetch("http://www.".$testseite);
                $content=$snoopy->results
                Eventuell ist ja strpos() nicht so geeignet, weil das Pattern kein kurzer String ist, sondern eine recht komplexe Sache (kompletter Quelltext).

                Kommentar


                • #9
                  Was mir gerade auffällt..
                  Was hat es mit dem HOST auf sich, der in der snoopy.class.php mit www.php.net angegeben ist?
                  Kann es sein, dass Seiteninhalte dort gecached werden?
                  Snoopy gibt mir andere Inhalte aus, als sie tatsächlich auf der Seite vorhanden sind.

                  Kommentar


                  • #10
                    Snoopy dir das mal: http://m-software.de/snoopy-php

                    Da stehen die Schnüffunctions und Schnüffablien von Snoopy. Was dein "Funktioniert nicht" angeht, lies dir mal die doku durch zu strpos und prüfe dann korrekt. Die länge des Contents in dem du suchst ist strpos egal. Ich persönlich würde aber die regex-funktionen zum suchen von komplexeren Pattern in einem sehr langen String bevorzugen.

                    Kommentar


                    • #11
                      Danke troy, aber ich bin seit Stunden dabei.. und es scheint alles korrekt zu sein.

                      Mir kommt es mittlerweile so vor, als seien die Inhalte die Snoopy mir ausgibt, gecached.

                      Beispiel:

                      Ich habe 20 aufzurufende Seiten in der DB (www.xxxxxx.com) , bei denen der Inhalt gestern EXAKT gleich war, also exakt gleicher Quelltext.
                      Nun zeigen seit heute morgen 2 dieser Seiten einen anderen Inhalt an.

                      Lasse ich nun mein Snoopy durchlaufen und mir bei jeder Seite den $content von Snoopy ausgeben,
                      erscheint überall noch der alte Inhalt von gestern, auch bei den 2 aktualisierten Seiten.
                      Deshalb: was hat der Host genau zu bedeuten und werden Seitenanfragen dort gecached?

                      Kommentar


                      • #12
                        Zitat von tr0y Beitrag anzeigen
                        lies dir mal die doku durch zu strpos und prüfe dann korrekt.
                        Auch schon getan.
                        Sieh Dir mal mein Eingangsposting an.
                        Chris meint, die ersten drei Beispiele sollten problemlos funktionieren.

                        Kommentar


                        • #13
                          Ich seh schon, den Link hab ich zur Deko gepostet ( steht da beschrieben wozu $host da ist )..

                          Wenn du im glauben bist das Snoopy irgendetwas Cached, dann leer doch bevor du deine Seite jeweils fetched das temp dir von snoopy. ( wie man das setzt steht auch unter dem link, wie man das löscht findet sich im php handbuch )

                          Kommentar


                          • #14
                            Ich habe gelesen, wozu $host da ist, verstehe aber den Satz nicht ganz, und zwar weder auf deutsch, noch auf englisch.
                            Hat denn snoopy ein solches tempdir, wenn ich es nicht ausdrücklich eingestellt hab?
                            Auf meinem Linux-Server ist und bleibt der /tmp Ordner leer, wenn Snoopy läuft.

                            Kommentar


                            • #15
                              Keine Ahnung ich nutze keine Verpackungs-Klassen für solche Aufgaben sondern direkt cURL. Ich will hier auch nicht weiter Snoopy Class supporten ( dafür sind "wir" nicht da ), also abschließend als Debug-Vorschlag:

                              PHP-Code:
                              // hier deine url die du testen willst
                              $website 'http://www.google.de'

                              // the code of doom
                              $dog = new Snoopy;
                              $dog->fetch($website);

                              $hash_snoopy md5($dog->results);

                              $raw file_get_contents($website);

                              $hash_raw md5($raw);

                              echo 
                              "Snoopy Hash: ".$hash_snoopy."<br />";
                              echo 
                              "Raw Hash: ".$hash_raw."<br />";

                              if ( 
                              $hash_snoopy == $hash_raw ) echo "Snoopy verbummelt was.";
                              else echo 
                              "Snoopy verbummelt nichts."
                              Dieser Code-Schnipsel ruft die Page 2 mal ab, hashed sie ( MD5 ) und vergleicht die beiden hashes. Ausgaben sollten selbsterklärend sein.

                              Allgemein gefragt: hast du dir den Source der Webseiten seitdem sie sich für dich in der DB(?) verändert haben denn mal per browser angesehen ob sie das nicht vielleicht auch wirklich haben ?..

                              Kommentar

                              Lädt...
                              X