Ordner und Unterordner nach XML Datei durchsuchen

Sry konnte nicht früher antworten wegen leichtem Fieber.

Danke Sheel deine abgewandelte Funktion funktioniert einwandfrei.

Ich muss mir dringend Tutorials für Filesystem in PHP anschauen.

@ Saftmeister

Was passiert dann? Was schlimmes?

Habe wenig Erfahrung mit Filesystem in PHP.
 
@Meine Funktion funktioniert: Schön :)

@Ob bei der anderen was Schlimmes passiert:
Naja, je nachdem, was du mit dem Suchergebnis machst.
Wenn du die Dateien löscht, ist eventuell zuviel weg.

Du willst ja nur Dateien, die .xml am Ende haben.
Der "Fehler" ist ja nur, dass auch Dateien gefunden werden,
bei denen das .xml nicht ganz am Ende ist.
 
Man könnte auch stattdessen mit substr arbeiten...

Aber wie gesagt: bei mir kommen keine Punkte in ordner oder dateinamen vor vor.
 
Was passiert dann? Was schlimmes?

Nein, es passiert zunächst nichts schlimmes. Es könnten z.B. a.xml.jpg oder a.xml.irgendeineandereendung Dateien als gültige Dateien erkannt werden (obwohl sie das nicht sind), denn strpos() liefert einen Wert ungleich false zurück, da '.xml' gefunden wurde. Die weitere Verarbeitung des ungültigen Ergebnisses könnte also problematisch werden.

Ein nettes Beispiel: Eine Datei hat den Namen "RFC3275.xml-signature_Syntax_and_Processing.txt" und würde nach dem o.g. Code als korrekte XML-Datei erkannt werden. Augenscheinlich handelt es sich jedoch um eine Text-Datei. Sicher wissen kann man es aber erst, wenn man den Mime-Typen ausgelesen hat.

Daher hat hela richtigerweise die Mime-Typen-Prüfung eingeworfen.

Was ich eigentlich einbringen wollte: Manchmal sollte man einen Algorithmus zunächst fehlerfrei implementieren und dann erst optimieren.

Wenn gefordert ist: "Liste alle XML-Dateien rekursiv", dann muss auch berücksichtigt werden, das es Situationen gibt, wo einem vorgegaukelt wird, das eine Datei ein bestimmtes Format hat. Durch unsichere Scripts (bei Datei-Uploads z.B.) entstehen Sicherheitslücken, wo man evtl. gar keine vermutet. In diesen Situationen ist etwas langsamerer aber sicher funktionierender Code vorzuziehen.

Ich hab mal ein kleines Test-Script angehängt, damit man den Unterschied sehen kann. Die Funktion mime_content_type() gibt's aber erst, wenn man die Extension php_fileinfo.dll bzw. php_fileinfo.so geladen hat (siehe phpinfo()). Hier die Ausgabe:

Code:
test.xml.txt is a application/xml
test.asc is a text/plain
test.png is a image/png
test.xml is a text/plain

Dabei geht es noch nicht mal um diesen einen speziellen Fall. Ich meine das ganz allgemein :)
 

Anhänge

  • mt-test.zip
    3,8 KB · Aufrufe: 7
Du willst ja nur Dateien, die .xml am Ende haben.
Der "Fehler" ist ja nur, dass auch Dateien gefunden werden,
bei denen das .xml nicht ganz am Ende ist.

Nein, er will XML-Dateien finden, um sie in SimpleXML parsen zu können. Das geht mit einer Text-Datei, die .xml am Ende stehen genauso schief.

Man könnte auch stattdessen mit substr arbeiten...

Aber wie gesagt: bei mir kommen keine Punkte in ordner oder dateinamen vor vor.

substr() ist korrekt angewandt auch nur eine Prüfung, ob '.xml' als Datei-Endung vorkommt. Es ist nicht sicher, das es sich um eine tatsächliche XML-Datei handelt.

Natürlich kann man argumentieren: Hey, wer wird denn eine Datei im Ordner liegen haben, die .xml endet und keine XML-Datei ist? Genauso kann man argumentieren: Wie kann eine Datei, die .png endet eine exe sein? - Schon ist die Lücke da ;-)
 

Neue Beiträge

Zurück