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

srusso

Grünschnabel
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:
<?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
 
Verstehe dein Script nicht:

PHP:
$text = fgets($fp);
                                if (strstr($text, '#EDITION')) {
                                    $text = explode(':', $text);

Erst liest du was aus der Datei aus und dann suchst du ob das im Verzeichnis vorkommt:

PHP:
if (strstr($verzeichnis, $text[1]))

Zu dem Zeitpunkt ist (nach deiner Ausgabe zufolge):
Code:
$text[1] = " Deutsch";
$verzeichnis = "Z:/Ultrastar/songs/Deutsch/Pur - Ein Graues Haar/"

Und da $text[1] nicht in $verzeichnis vorkommt liefert er dir FALSE bzw. dein "FALSCH". Hat sich ein Leerzeichen eingeschlichen? mit trim() geht sowas links und rechts weg
 
Zuletzt bearbeitet:
Zurück