strstr() gibt nicht den gewünschten/erwarteten Wert zurück

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

  • strstr() gibt nicht den gewünschten/erwarteten Wert zurück

    Hallo,

    ich habe mir ein kleines Script geschrieben, welches einen Verzeichnisbaum nach Textdateien und dann den Inhalt nach einem vorhandenen Text durchsucht. Ich habe das Script ein wenig dokumentiert, damit man sieht, wo ich den falschen wert erhalte.

    Hier das Script.

    PHP-Code:
    <?php

        
    class Verzeichnis {

            function 
    dir_rekursiv($verzeichnis$filter) {

            
    // Das dient nur dem Test, ob meine Birne matsche ist ;-)
            // Hier nehme ich die gleichen Strings, die auch weiter unten
            // beim Abarbeiten der Schleife ausgegeben werden.
            // Im Test bekomme ich das richtige Resultat !!

            
    $test1 "Z:/Ultrastar/songs/Deutsch/Pur - Ein Graues Haar/";
            
    $test2 "Deutsch";
            if (
    strstr($test1$test2)) {
                echo 
    $test1.' - <strong>'.$test2.'</strong>';
                echo 
    ' <strong>RICHTIG !</strong><br />';
            } else {
                echo 
    $test1.' - <strong>'.$test2.'</strong>';
                echo 
    ' <strong>FALSCH !</strong><br />';
            }

            
    // TESTENDE

            
    $handle =  opendir($verzeichnis);

            while (
    $datei readdir($handle)){
                if (
    $datei != "." && $datei != "..") {

                    if (
    is_dir($verzeichnis.$datei)) {
                        
    // Wenn Verzeichniseintrag ein Verzeichnis ist
                        // Erneuter Funktionsaufruf, um das aktuelle Verzeichnis auszulesen
                        
    $this->dir_rekursiv($verzeichnis.$datei.'/'$filter);
                    }
                    else {
                        
    // Wenn Verzeichnis-Eintrag eine Datei ist, diese ausgeben
                        
    if (strstr($datei$filter)) {
                            echo 
    '<strong>Dateipfad (komplett): </strong>'.$verzeichnis.$datei.'<br />';

                            
    $fp fopen($verzeichnis.$datei,"r");

                            if (
    $fp) {
                                
    $i 0;
                                
    $vorhanden false;
                                while(!
    feof($fp) && ($i 10)){
                                    
    $text fgets($fp);
                                    if (
    strstr($text'#EDITION')) {
                                        
    $text explode(':'$text);
                                        
    $verz = (string)$verzeichnis;
                                        
    // Hier wird geprüft, ob die Edition auch dem entsprechendem Ordner entspricht
                                        // Also in meinem Beispiel, ob der Text
                                        // 'Deutsch' im Text 'Z:/Ultrastar/songs/Deutsch/Pur - Ein Graues Haar/'
                                        // vorhanden ist
                                        // Und als Resultat bekomme ich FALSCH !
                                        // Was nicht richtig ist *heul*
                                        
    if (strstr($verzeichnis$text[1])) {
                                            echo 
    '<strong>Verzeichnis:</strong> '.$verzeichnis.'<strong><br /><strong>Edition:</strong> '.$text[1].'</strong>';
                                            echo 
    ' >>> <strong>RICHTIG !</strong><br />';
                                        } else {
                                            echo 
    '<strong>Verzeichnis:</strong> '.$verzeichnis.'<strong><br /><strong>Edition:</strong> '.$text[1].'</strong>';
                                            echo 
    ' >>> <strong>FALSCH !</strong><br />';
                                        }
                                        
    $i 9;
                                        
    $vorhanden true;
                                    }
                                    
    $i++;
                                }
                                if (!
    $vorhanden) {echo '<strong>FEHLT !</strong><br />';}
                                echo 
    '<br />';
                                
    fclose($fp);
                            }
                        }
                    }
                }
            }
            
    closedir($handle);
            }
        }
        
    $ausgabe = new Verzeichnis();
        
    $ausgabe->dir_rekursiv("Z:/Ultrastar/songs/"".txt");
    ?>
    Hier eine Passage aus der Ausgabe:

    Z:/Ultrastar/songs/Deutsch/Pur - Ein Graues Haar/ - Deutsch RICHTIG !
    Dateipfad (komplett): Z:/Ultrastar/songs/Deutsch/Pur - Ein Graues Haar/PUR - Ein Graues Haar.txt
    Verzeichnis: Z:/Ultrastar/songs/Deutsch/Pur - Ein Graues Haar/
    Edition: Deutsch >>> FALSCH !
    Vielleicht hat ja jemand eine Idee.

    Viele Grüße Salvatore
    Zuletzt geändert von srusso; 01.02.2009, 13:23.

  • #2
    Re: strstr() gibt nicht den gewünschten/erwarteten Wert zurück

    Mache bitte Kontrollausgaben des Rueckgabewertes von strstr mittels var_dump.

    Und wieso nutzt du ueberhaupt strstr? Das Manual raet, wenn du nur wissen willst, ob needle in haystack ueberhaupt vorkommt, strpos zu nutzen.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Hallo,

      ich nutze nun die Funktion strpos().

      PHP-Code:
      var_dump(strpos($verzeichnis$text[1]));
                                          if (
      strpos($verzeichnis$text[1])) {
                                              echo 
      '<strong>Verzeichnis:</strong> '.$verzeichnis.'<strong><br /><strong>Edition:</strong> '.$text[1].'</strong>';
                                              echo 
      ' >>> <strong>RICHTIG !</strong><br />';
                                          } else {
                                              echo 
      '<strong>Verzeichnis:</strong> '.$verzeichnis.'<strong><br /><strong>Edition:</strong> '.$text[1].'</strong>';
                                              echo 
      ' >>> <strong>FALSCH !</strong><br />';
                                          } 
      Ich bekomme bool(false) zurück

      Z:/Ultrastar/songs/Deutsch/Pur - Ein Graues Haar/ - Deutsch RICHTIG !
      Dateipfad (komplett): Z:/Ultrastar/songs/Deutsch/Pur - Ein Graues Haar/PUR - Ein Graues Haar.txt
      bool(false) Verzeichnis: Z:/Ultrastar/songs/Deutsch/Pur - Ein Graues Haar/
      Edition: Deutsch >>> FALSCH !

      Kommentar


      • #4
        Dann mache Kontrollausgaben der Parameter, die du der Funktion uebergibst.
        Ausgabe mittels var_dump, Copy&Paste aus dem Quelltext, nicht der HTML-Anzeige im Browser, hierher bitte.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Es hatte sich ein Leerzeichen eingeschlichen. Mit eienm trim() funktioniert es. Vielen dank für dein bemühungen.

          Kommentar

          Lädt...
          X