…und Ordner ausgeben.
Moin, moin,
Ich häng jetzt schon ein paar Tage an einem Problem und habe zig Foren durchsucht, aber nirgends find ich grundlegend eine Lösung.
Und zwar habe ich eine Abfrage aus MySql, das Ergebnis sind Files welche auf einem Share in Ordner liegen.
Anhand der Ausgabe der Abfrage kann ich den Pfad ermitteln und einen Teil des Datei-Inhalts (Subject)
$pfad\_erhalten = str\_replace(" ", "", $pfad\_erhalten);
echo "[$pfad\_erhalten](%2524pfad_download)";
Der lautet in etwa so… *e:\Datum\Kunde1*
In diesem Ordner befinden sich zig Unterordner und in diesen mehrer einzelne Files, eine davon hat den o. g. Subject.
Nun das Problem -->(Soweit versteh ichs noch) Also
- durchsuche rekursiv den Pfad *e:\Datum\Kunde1*
- öffne jede Datei und suche nach dem String (Subect)
- wenn vorhanden --> STOPP und gebe den Pfad *e:\Datum\Kunde1* + Unterordner aus.
ODER 4) wenn nix drin nimm den nächsten Unterordner und …siehe 2…und 3…bis gefunden.
Der Subject MUSS in einer der Files sein, anonsten hätte mir die SQL-Abfrage den Subject ned ausgegeben, also kanns ein false ned das Ergebnis sein.
Jemand Lust mir auf die Sprünge zu helfen?
Also fopen etc kann ich. Nur eben das alles oben im Zusammenhang…da steig ich leider nicht durch.
Gruß Rolf
Hallo
…und Ordner ausgeben.
Ich häng jetzt schon ein paar Tage an einem Problem und habe
zig Foren durchsucht, aber nirgends find ich grundlegend eine
Lösung.
Hmmm.
Und zwar habe ich eine Abfrage aus MySql, das Ergebnis sind
Files welche auf einem Share in Ordner liegen.
Anhand der Ausgabe der Abfrage kann ich den Pfad ermitteln und
einen Teil des Datei-Inhalts (Subject)
Hmmm. Also „Subject“ ist das, wonach Du suchst? Also
eine Art „Suchmuster“?
$pfad_erhalten = str_replace(" ", „“, $pfad_erhalten);
echo „$pfad_erhalten“;
Der lautet in etwa so… *e:\Datum\Kunde1*
In diesem Ordner befinden sich zig Unterordner und in diesen
mehrer einzelne Files, eine davon hat den o. g. Subject.
Aha
Nun das Problem -->(Soweit versteh ichs noch) Also
- durchsuche rekursiv den Pfad *e:\Datum\Kunde1*
- öffne jede Datei und suche nach dem String (Subect)
- wenn vorhanden --> STOPP und gebe den Pfad
*e:\Datum\Kunde1* + Unterordner aus.
ODER 4) wenn nix drin nimm den nächsten Unterordner und
…siehe 2…und 3…bis gefunden.
Der Subject MUSS in einer der Files sein, anonsten hätte mir
die SQL-Abfrage den Subject ned ausgegeben, also kanns ein
false ned das Ergebnis sein.
Jemand Lust mir auf die Sprünge zu helfen?
Naja, so schwer wird das nicht sein. Ich würde
erstmal eine einfache Variante vorgeben …
$suchmuster = '/Hallo!/';
$pfad\_erhal = ' e:\Datum\Kunde1\ '; # '', '|\\\\|' =\> '/', '|/+$|' =\> '');
$pfad\_download = preg\_replace(array\_keys($repl), array\_values($repl), $pfad\_erhal);
echo "[$pfad\_erhal](%255C%2522%2524pfad_download%255C%2522)\n";
echo "suche nach: $suchmuster\n";
find($pfad\_download, 'wanted');
function wanted($filename) # was soll mit der Datei gemacht werden
{
global $suchmuster;
$content = file\_get\_contents($filename);
if(preg\_match($suchmuster, $content, $m, PREG\_OFFSET\_CAPTURE))
echo "$filename =\> pos {$m[0][1]}\n";
}
function find($dir, $procname) # rekursive Suche, Aufruf pro Datei mit procname()
{
$dh = opendir($dir) or die("Pfad '$pfad' glabbt nich so!");
while($fn = readdir($dh))
if(!preg\_match('/^\.\.?$/', $fn, $m)) # . und .. ignorieren
is\_dir("$dir/$fn") ? find("$dir/$fn", $procname) : $procname("$dir/$fn");
closedir( $dh );
}
… die Du dann für Deine Problemstellung erweitern
könntest.
Grüße
CMБ
Moin, moin
danke für deine Tipp, nur löfft das ganze nicht so.
Ich erkläre nochmal kurz genauer was ich will (und was ich hab
)
Also die MySQL-Abfrage gibt mir folgendes aus -->
subject |datum_erhalten|firmename| und noch n paar mehr
die aber vorerst nicht wichtig sind.
Aus datum_erhalten und firmennamen und eines Laufwerksbuchstaben, der immer gleich ist, weiss ich den Pfad
–> d:\090425\mueller\
Hallo Rolf,
also willst Du uns sagen, was denn falsch läuft oder nicht? Leider kann man Dir wegen der nicht ausgefüllten Vita kaum zielgerichtete Hilfe anbieten.
In deinem Source - was davon ist mein Suchbegriff (Subject)
und was davon mein Pfad?
Der Sourcecode ist im Detail nicht schnell erfassbar (zumindestens brauchte ich selbst eine Gedenkminute zur Analyse), aber die Variablenname sind doch offensichtlich gewählt. Kopiere doch den Source-Code und teste ihn (nach Anpassung) aus.
Kleiner Hinweis: Semjon geht im Gegensatz zu Dir von potentiell mehreren Suchergebnissen aus und ruft deshalb eine Funktion auf statt das Suchergebnis in eine Variable zu schreiben. Das kann man natürlich ändern.
MfG Georg V.
Hallo
danke für deine Tipp, nur löfft das ganze nicht so.
Ich erkläre nochmal kurz genauer was ich will (und was ich hab
OK
Also die MySQL-Abfrage gibt mir folgendes aus -->
subject |datum_erhalten|firmename| und noch n paar mehr
die aber vorerst nicht wichtig sind.
Aus datum_erhalten und firmennamen und eines
Laufwerksbuchstaben, der immer gleich ist, weiss ich den Pfad
–> d:\090425\mueller\ $suchmuster
und der Pfad ist $pfad_erhal
und der komplette Dateiname einer jeweils
gefundenen Übereinstimmung ist $filename ;
in der Funktion wanted().
Grüße
CMБ
Ich erkläre nochmal kurz genauer was ich will (und was ich hab
OK
Also die MySQL-Abfrage gibt mir folgendes aus -->
subject |datum_erhalten|firmename| und noch n paar mehr
die aber vorerst nicht wichtig sind.
Aus datum_erhalten und firmennamen und eines
Laufwerksbuchstaben, der immer gleich ist, weiss ich den Pfad
–> d:\090425\mueller\
quasi --> $pfad_erhalten = str_replace(" ", „“, $pfad_erhalten);
echo „$pfad_erhalten“;
der sieht als echo ausgegben so aus (das is nur ein Beispiel
bis auf den Laufwerksbuchstaben ist der Pfad NICHT konstant)
e:\090425\mueller\UNTERORDNER(UNTER-UNTERODNER)
+++
Woher kommt dann D: oder E: usw
+++
Wie erwähnt - der ist konstant!
+++
In jedem dieser Unter-Ordner oder Unter-Unter-Ordner befinden
2 oder 4 Files, davon ein File das o. g. Subject -
alphanummerisch.
OK. Bezieht sich „Subject“ auf File-„Name“
oder File-„Inhalt“?
Nun will ich eben das er mir die Ordner nach dem Subject
durchsucht und dann den Unter-Ordner bzw. Unter-Unter-Ordner
ausgibt.
+++
Mein Such-String, also das Suchwort, nehme ich auch aus der DB-
Abfrage (Subject) Dieser Subject ist ein Teil der Dateiinhaltes,
also nicht der Dateiname!
+++
OK
Am besten in ner Variablen denn der muss dann kopiert werden.
(das ist dann auch wieder kein Problem)
OK
In deinem Source - was davon ist mein Suchbegriff (Subject)
und was davon mein Pfad?
Der Suchbegriff ist $suchmuster
++++
Achja, mein Suchbegriff laute hier $subject…
+++++
und der Pfad ist $pfad_erhal
und der komplette Dateiname einer jeweils
gefundenen Übereinstimmung ist $filename;
in der Funktion wanted().
Gruß Rolf
Hallo Georg,
es kann nur einen Suchtreffer geben.
Die Datei mit dem Subject ist hir im Grunde ein Zertifikat.
Gruß Rolf
Achja, ausgeben tut er mir -->
Warning: preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash in C:\xampp\htdocs\user.php on line 238
PHP ist Version 5.2…
Warum er hier alphanumeric anmäkelt…keine Ahnung.
Gruß Rolf
Moin moin,
also ich habe deine Code nun angepasst -->
$suchmuster = $\_SESSION['datei\_no'];
$pfad\_erhal = $pfad\_erhalten; # '', '|\\\\|' =\> '/', '|/+$|' =\> '');
$pfad\_erhalten= preg\_replace(array\_keys($repl), array\_values($repl), $pfad\_erhal);
echo "[$pfad\_erhal](%255C%2522%2524pfad_erhalten%255C%2522)\n";
echo " **Suche in:** $pfad\_erhal";
echo "
";
echo " **nach:** $suchmuster\n";
find($pfad\_erhalten, 'wanted');
function wanted($filename) # was soll mit der Datei gemacht werden
{
global $suchmuster;
$content = file\_get\_contents($filename);
if(preg\_match($suchmuster, $content, $m, PREG\_OFFSET\_CAPTURE))
echo "$filename =\> pos {$m[0][1]}\n";
}
function find($dir, $procname) # rekursive Suche, Aufruf pro Datei mit procname()
{
$dh = opendir($dir) or die("Pfad '$pfad\_erhalten' glabbt nich so!");
while($fn = readdir($dh))
if(!preg\_match('/^\.\.?$/', $fn, $m)) # . und .. ignorieren
is\_dir("$dir/$fn") ? find("$dir/$fn", $procname) : $procname("$dir/$fn");
closedir( $dh );
}
Fehler --> Fatal error: Call to undefined function find() in C:\xampp\htdocs\user.php on line 235
Meine Zeile 235 ist --> find($pfad_erhalten, ‚wanted‘);
Warum ist der nun nicht definiert? HÜÜÜÜÜÜLFE!!!
Gruß Rolf
Hallo
also ich habe deine Code nun angepasst -->
Fehler --> Fatal error: Call to undefined function find()
in C:\xampp\htdocs\user.php on line 235
Meine Zeile 235 ist --> find($pfad_erhalten, ‚wanted‘);
Warum ist der nun nicht definiert? HÜÜÜÜÜÜLFE!!!
Keine Ahnung. Dreh mal die Reihenfolge von Code
und Funktionen um:
<?php # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #<br /> function wanted($filename, &$hit) # was soll mit der Datei gemacht werden
{
global $Suchmuster;
$content = file\_get\_contents($filename);
if(preg\_match($Suchmuster, $content, $m)) $hit [] = $filename;
}
function find\_one($dir, $procname, &$hit) # rekursive Suche, Aufruf: procname()
{
$dh = opendir($dir) or die("Pfad '$dir' glabbt nich so!");
while( !sizeof($hit) && ($fn=readdir($dh)) )
if(!preg\_match('/^\.\.?$/', $fn, $m)) # . und .. ignorieren
is\_dir("$dir/$fn") ? find\_one("$dir/$fn", $procname, $hit)
: $procname("$dir/$fn", $hit);
closedir($dh);
}
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
$pfad\_erhalten = ' d:\090425\mueller\ ';
$repl = Array('|\s+|' =\> '', '|\\\\|' =\> '/', '|/+$|' =\> ''); # Pfad saeubern
$pfad\_download=preg\_replace(array\_keys($repl),array\_values($repl),$pfad\_erhalten);
# Pfad sollte jetzt "kanonisiert" ond fehlerfrei sein
$subject = $\_SESSION['datei\_no']; # Beispiel für Subject
$Suchmuster = '/' . preg\_quote($subject, '/') . '/'; # Subject saeubern
echo "suche in $pfad\_download nach: $Suchmuster\n";
$Resultat = Array(); # Array aus Gruenden der Bequemlichkeit
find\_one($pfad\_download, 'wanted', $Resultat);
print\_r($Resultat);
?\>
Grüße
CMБ
1 „Gefällt mir“
Joap!
Danke, jetzt rennts 
Subba.
Jetzt hab ich auch noch n anderes Problem.
Aber das krieg ich auch noch hin.
Gruß Rolf