Hiho! Ich will ein php-Skript schreiben, das rekursiv alle Verzeichnisse Unterhalb eines Basisverzeichnisses nach Dateien mit einem bestimmten Muster durchsucht. Ich probier das gerade mit htdocs als Basisverzeichnis aus. Allerdings bekomme ich folgende Fehlermeldung, sobald mein Skript versucht Verzeichnisse unterhalb htdocs zu durchwühlen: Warning: stat failed for cd.php (errno=2 - No such file or directory) in /usr/local/httpd/htdocs/suchen.php on line 21 cd.php ist eine Datei im Verzeichnis cd, das direkt unter htdocs liegt, auf diese Datei kann ich ohne Probleme zugreifen, wenn ich z.B. die URL direkt im Browser eintrage. In Zeile 21 meines php-Skripts verwende ich folgenden Befehl: $verz = opendir($zeile); Das Problem scheint zu sein, dass das opendir() von php nicht auf andere Verzeichnisse außer htdocs angewendet werden kann, in diese Verzeichnisse gelange ich aber ohne Probleme direkt über den Browser. Hat jemand 'ne Ahnung, was da das Problem sein könnte und wie ich's beheben kann? Ciao + THX, Schöpp -- Christian Schoepplein | Beste Rockband der Welt: http://www.lily-rockt.de mail@schoeppi.net | Linux fuer Blinde: http://www.blinux.suse.de
Hallo Christian, hallo Leute, Am Mittwoch, 30. April 2003 12:37 schrieb Christian Schoepplein:
Ich will ein php-Skript schreiben, das rekursiv alle Verzeichnisse Unterhalb eines Basisverzeichnisses nach Dateien mit einem bestimmten Muster durchsucht.
BTW: Lösung für Faule: $liste = `find .`; # Die ` sind Backticks, wie von der Bash gewohnt $filelist_array = explode( "\n", $liste ); Ist zwar nichts supertolles, funktioniert aber ;-)
Ich probier das gerade mit htdocs als Basisverzeichnis aus. Allerdings bekomme ich folgende Fehlermeldung, sobald mein Skript versucht Verzeichnisse unterhalb htdocs zu durchwühlen:
Warning: stat failed for cd.php (errno=2 - No such file or directory) in /usr/local/httpd/htdocs/suchen.php on line 21
cd.php ist eine Datei im Verzeichnis cd, das direkt unter htdocs liegt, auf diese Datei kann ich ohne Probleme zugreifen, wenn ich z.B. die URL direkt im Browser eintrage. In Zeile 21 meines php-Skripts verwende ich folgenden Befehl:
$verz = opendir($zeile);
Und was sagt echo $zeile ? Ich habe das Gefühl, dass da ein _Datei_name drinsteht, obwohl ein _Verzeichnis_name erwartet wird.
Das Problem scheint zu sein, dass das opendir() von php nicht auf andere Verzeichnisse außer htdocs angewendet werden kann, in diese Verzeichnisse gelange ich aber ohne Probleme direkt über den Browser.
Kann es sein, dass Du Dich in der PHP-Config mit open_basedir irgendwo in den htdocs eingesperrt hast? Wenn Du den Fehler nicht findest, schick doch mal einen etwas größeren Ausschnitt aus dem Script, damit man alles im Kontext überprüfen kann. Da der Fehler in Zeile 21 auftaucht, würden sich die ersten 25 Zeilen anbieten ;-) Gruß Christian Boltz -- blubb || { echo "Autsch" >&2; exit 1; } [David Haller in suse-linux über ein misslungenes Script]
Hi Christian! On Sam, Mai 03, 2003 at 12:05:45 +0200, Christian Boltz wrote:
Am Mittwoch, 30. April 2003 12:37 schrieb Christian Schoepplein:
Ich will ein php-Skript schreiben, das rekursiv alle Verzeichnisse Unterhalb eines Basisverzeichnisses nach Dateien mit einem bestimmten Muster durchsucht.
BTW: Lösung für Faule: $liste = `find .`; # Die ` sind Backticks, wie von der Bash gewohnt $filelist_array = explode( "\n", $liste );
Ist zwar nichts supertolles, funktioniert aber ;-)
OK, so werde ich's auch mal probieren. Danke ;-).
Ich probier das gerade mit htdocs als Basisverzeichnis aus. Allerdings bekomme ich folgende Fehlermeldung, sobald mein Skript versucht Verzeichnisse unterhalb htdocs zu durchwühlen:
Warning: stat failed for cd.php (errno=2 - No such file or directory) in /usr/local/httpd/htdocs/suchen.php on line 21
cd.php ist eine Datei im Verzeichnis cd, das direkt unter htdocs liegt, auf diese Datei kann ich ohne Probleme zugreifen, wenn ich z.B. die URL direkt im Browser eintrage. In Zeile 21 meines php-Skripts verwende ich folgenden Befehl:
$verz = opendir($zeile);
Und was sagt echo $zeile ? Ich habe das Gefühl, dass da ein _Datei_name drinsteht, obwohl ein _Verzeichnis_name erwartet wird.
Jau, der Fehler lag bei mir im Skript. Das Problem war, dass mein Skript zwar erkannt hat wenn ein Unterverzeichnis in htdocs durchsucht werden sollte, allerdings hat er nach den Dateien anstatt im Unterverzeichnis innerhalb von htdocs gesucht..., da war halt noch einiges mit Pfad- und Dateinamen im argen ;-). Mittlerweile funzts so weit, dass er eine Ebene tiefer als htdocs alles schön durchsucht, wenn dort allerdings auch wieder Unterverzeichnisse auftauchen gibts ähnliche Probleme... Egal aber, mit ein wenig Zeit und wird das aber auch noch gelöst, jetzt wo ich weiß das dass Problem nihct an php oder den apache liegt weiß ich wo ich suchen muss ;-).
Christian Boltz
Ciao, Schöppi -- Christian Schoepplein | Beste Rockband der Welt: http://www.lily-rockt.de mail@schoeppi.net | Linux fuer Blinde: http://www.blinux.suse.de
Hallo Christian, hallo Leute, Am Samstag, 3. Mai 2003 13:39 schrieb Christian Schoepplein:
On Sam, Mai 03, 2003 at 12:05:45 +0200, Christian Boltz wrote:
Am Mittwoch, 30. April 2003 12:37 schrieb Christian Schoepplein:
Ich will ein php-Skript schreiben, das rekursiv alle Verzeichnisse Unterhalb eines Basisverzeichnisses nach Dateien mit einem bestimmten Muster durchsucht.
BTW: Lösung für Faule: $liste = `find .`; # Die ` sind Backticks, wie von der Bash gewohnt $filelist_array = explode( "\n", $liste );
Ist zwar nichts supertolles, funktioniert aber ;-)
OK, so werde ich's auch mal probieren. Danke ;-).
Meine Lösung ist nur in einem Verzeichnis mit "guten" Dateinamen [-._a-z0-9] empfehlenswert ;-) Wenn Du die Suchroutinen mit PHP zusammengebastelt hast, solltest Du meine Faulenzerlösung nicht einsetzen. Die macht nämlich vermutlich Probleme, wenn Zeilenwechsel und sonstige Überraschungen im Dateinamen vorkommen ;-)
[...] Mittlerweile funzts so weit, dass er eine Ebene tiefer als htdocs alles schön durchsucht,
wenn dort allerdings auch wieder Unterverzeichnisse auftauchen gibts ähnliche Probleme... Egal aber, mit ein wenig Zeit und wird das aber auch noch gelöst, [...]
Dieses Problem sollte recht einfach zu lösen sein, wenn Du Deinen Code zum Durchsuchen des Verzeichnisses in eine function packst und diese für Unterverzeichnisse rekursiv [1] aufrufst (Verzeichnisname als Parameter angeben). ACHTUNG: "." und ".." solltest Du wegen [1] ausschließen ;-) Eie weitere Stolperfalle könnten evtl. Symlinks sein, die aufs aktuelle Verzeichnis verweisen [2] - lässt sich wohl durch Festlegung einer max. Verzeichnistiefe oder durch explizites Testen, ob $verzeichnis ein Symlink ist, umgehen. Außerdem scheint es (im Kernel?) eine Begrenzung der max. Symlinktiefe zu geben, als letzten Rettungsanker ;-) Gruß Christian Boltz [1] vermeide möglichst, eine Endlosschleife zu erzeugen ;-) [2] cb@tux:/tmp/tmp-cb/test> ln -s . link cb@tux:/tmp/tmp-cb/test> ls -l insgesamt 0 lrwxrwxrwx 1 cb users 1 2003-05-03 23:07 link -> ./ cb@tux:/tmp/tmp-cb/test> cd link/ cb@tux:/tmp/tmp-cb/test/link> ls -l insgesamt 0 lrwxrwxrwx 1 cb users 1 2003-05-03 23:07 link -> ./ cb@tux:/tmp/tmp-cb/test/link> cd link/link/link/link/link/link/link/ cb@tux:/tmp/tmp-cb/test/link/link/link/link/link/link/link/link> -- Wenn du beim Autofahren ein "komisches Geraeusch" hoerst und stehen- bleibst (ohne das Geraeusch naeher identifizieren zu koennen!), dann schraubst du ja auch nicht einfach mal auf Verdacht an der Nockenwelle rum, wenn's doch nur am leeren Tank liegen koennte! [David Haller in suse-linux]
participants (2)
-
Christian Boltz
-
Christian Schoepplein