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