• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

LIKE dateisuche

Tectum

New member
hy leute, bei mysql gibt es ja den tollen Befehl
PHP:
LIKE '%text%'
wo davor und danach irgendwas stehn kann.
Jetzt hab ich aber mehrere dateien aufm ftp, wobei ich mit:
PHP:
$filename1 = './dir_'.$data_nr.'/'.$tel.'.mp3';
if (file_exists($filename1)){blabla}
die existenz prüfe. Was aber wenn Datei xsdfs_024875667_asdgsdf.mp3 heißt?
Gibt es da auch ein befehl/Trick wie man einen suchbegriff in einem dateinamen suchen kann?
 
du könntest das Verzeichnis in ein String einlesen und diesen über Reguläre Ausdrücke bearbeiten... etwas anderes fällt mir im Moment nicht ein.
 
So in der Art?
PHP:
$dir = "./voices/dir_7/";
if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
		foreach (glob("*08544916856*") as $filename) {
			echo "".$filename." - found <br />";
		}
        closedir($dh);
    }
}
funzt nur leider nicht :( bastel schon seit stunden rum, nix passiert!
 
Ja klar ist an, nur passiert nix:

hab mir jetzt zum testen die files ausgeben lassen
PHP:
$dir = "./voices/dir_7/";

if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
		while (($file = readdir($dh)) !== false) {
		if ($file != "." && $file != "..") 
            { 
				echo "".$file."<br />";
			}
        }
		foreach (glob("*08544916856*") as $filename) {
			echo "".$filename." - <b>TREFFER</b> <br />";
		}
        closedir($dh);
    }
}

Ergebnis ist:
2010-04-10_Thomas_S_08544916856-201109083.wav
2010-04-10_Thomas_S_07031273656-201109240.wav
2010-04-10_Vito_04455506-201109168.wav
2010-04-10_Vito_06554270-201109443.wav

08544916856 ist also schon im ersten datensatz zu finden, warum findert der mir den nicht?
 
08544916856 ist also schon im ersten datensatz zu finden, warum findert der mir den nicht?
Weil Du irgendwie davon ausgehst, dass glob sich in irgendeiner Weise von opendir beeinflussen lassen würde. Komischerweise muss man gar kein Handle in glob reingeben, das wird wohl telepatisch übertragen.
 
ich öffne doch den Ordner mit opendir,
Du kannst 50 oder mehr gleichzeitig aufmachen, woher soll glob wissen, welches Du meinst? Vielleicht rät es ja. Vielleicht schert es sich nicht die Bohne darum.
Steht eigentlich in der Doku was darüber, dass man opendir verwenden muss, um glob einzusetzen?

oder was ist ein Handle?
Wofür steht die Abkürzung dh? Steht alles in der Doku.
 
find in der Doku nix über handle im globe, wenn du mir kurz sagst was das ist, codeschnippsel oder so, dann wär mir sehr weitergeholfen!
 
find in der Doku nix über handle im globe
Ebend. Da gibt es sowas auch nicht. Wohl aber in der Doku von opendir.
Wenn die beiden in irgendeiner Form zusammenarbeiten, sollte sich dann doch wohl ein diesbezüglicher Hinweis finden lassen, oder? Wenn es also keinen solchen Hinweis gibt, dann kann man mit an Sicherheit grenzender Wahrscheinlichkeit davon ausgehen, dass beide Funktionen völlig unabhängig voneinander arbeiten, was Dir hiermit schon zum vierten Mal gesagt wurde.

wenn du mir kurz sagst was das ist, codeschnippsel oder so, dann wär mir sehr weitergeholfen!
Du solltest einfach mal die Doku aufmerksamer lesen und einfach mal die Beispiele durchspielen, die dort so drinne stehen, es besteht natürlich die Gefahr, dass Du dabei was lernst, aber das kann man vernachlässigen.
 
glob arbeitet im aktuellen Arbeitsverzeichnis:
oder anders formuliert arbeitet glob ausgehend vom aktuellen Verzeichnis.


Das aktuelle Verzeichnis setzen ist ein Weg, aber oft nicht notwendig, da der Pfad mit angegeben werden kann. Da ich an dieser Stelle selbst schon mal etwas gesucht habe, glaube ich ist ein kleines Beispiel erlaubt:
PHP:
foreach (glob("Daten/*.txt") as $filename) ..
Findet ausgehend vom aktuellen Verzeichnis im Unterverzeichnis Daten alle Dateien mit .txt.
 
Ohje ich bin voll den falschen Weg gegangen -,- mieser Denkfehler in meiner Struktur!
Ich muss die soundfiles umbenennen, also von:
2010-04-10_Thomas_S_08544916856-201109083.wav -> 08544916856.wav

Wie finde ich die Telefonnr im Dateinamen?
Muss ja irgendwie statisch laufen, schneiden nach dem zweiten _ und ende beim dritten -
wie setzt man sowas um?
 
So n bisschen kompliziert aber funktioniert :) habs jetzt so gebastelt:

PHP:
$dir = "./voices/dir_7/";

if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
		while (($file = readdir($dh)) !== false) {
		if ($file != "." && $file != "..") 
            { 
				echo "".$file."<br />";
				$val = strlen($file) - strlen(str_replace("_", "", $file));
				//echo "".$val."<br />";
				$teile1 = explode("_", $file);
				if($val=="2"){$string1 = $teile1[2];}
				else if($val=="3"){$string1 = $teile1[3];}
				else if($val=="4"){$string1 = $teile1[4];}
				//echo "".$string1."<br />";
				$teile2 	= explode("-", $string1);
				$teile3 	= explode(".", $string1);
				$new_dat	= "".$teile2[0].".".$teile3[1];
				echo "".$new_dat."<br /><br />";
			}
        }
        closedir($dh);
    }
}
 
Schön das es erstmal so funktioniert. Die anfängliche Frage lautete:
Gibt es da auch ein befehl/Trick wie man einen suchbegriff in einem dateinamen suchen kann?

Dazu nochmal ein Beispiel mit glob, um die Mächtigkeit dieser function zu zeigen:
PHP:
foreach (glob("Daten*/*_08544916856-*.wav") as $filename)
Findet in allen Unterverzeichnissen die mit Daten beginnen solche Dateien, die im Namen den string '_08544916856-' enthalten und auf '.wav' enden. Mit einen sinnvollen Aufbau der Dateinamen sollte man hiermit viele Probleme einfach lösen können.
 
Zurück
Oben