2010-12-30 6 views
5

In data2 Verzeichnis, ich habe diese Dateien:Warum gibt die PHP-Funktion glob() Dateien zurück, die nicht mit dem Platzhalter übereinstimmen?

alt text

Mit folgendem Code (auf dem Mac ausgeführt wird), mag ich die Dateien nur erhalten, die mit .xls Ende:

$file_names = glob('data2/*.xls'); 
foreach ($file_names as $file_name) { 
    echo $file_name . '<br/>'; 
} 

I würde erwarten, dass dieser Code eine Datei 27template.xls zurückgeben würde, aber es auch die Dateien mit TEMP in ihnen zurückgibt und fügt eine .xls zu ihnen hinzu:

alt text

Added: auch wenn ich smaller.xls zu smaller.xlsx dann ändert es finden es nicht wie erwartet, aber wenn ich es smaller.NNN ändern findet es smaller.NNN.xls.

Wie kann ich glob() verwenden, um nur .xls Dateien zu erhalten?

+4

Was ist was? –

+2

Kann unter Mac OS X 10.6.5 mit PHP 5.3.0 nicht reproduziert werden. Gibt nur '27template.xls' zurück, wie für mich erwartet. – BoltClock

+4

Sind Sie sicher, dass die Dateien nicht über diese Erweiterung verfügen, die in Ihrer Benutzeroberfläche verborgen ist? – regilero

Antwort

0

Ein Dateiname wie data2/smaller.xlsTEMP.xls stimmt mit Ihrem Glob-Ausdruck von data2/* .xls überein, also wird er von glob zurückgegeben ... Sind Sie sicher, dass er nicht existiert? (Vielleicht der Mac Äquivalent von Windows versteckt)

Versuchen zwei glob Ausdrücke mit array_diff Kombination()

$file_names = array_diff(glob('data2/*.xls'),glob('data2/*.*.xls')); 

Die zweite glob gibt diese Einträge, die Sie nicht wollen, dann die array_diff (Filter), die eingestellt aus dem Ergebnis aus dem ersten glob

EDIT

oder versuchen Aufruf clearstatcache() kurz vor Ihrer glob, falls PHP Verzeichniseinträge aus einer früheren Abfrage zwischengespeichert

2

Ich denke, es ist, weil die Erweiterung, die Sie betrachten, möglicherweise nicht die echte ist (im Finder standardmäßig ausgeblendet). Sie können die echte Erweiterung überprüfen, indem Sie auf die Datei klicken und auf "Get info" klicken. Wenn Sie die Erweiterungen aller Datei anzeigen möchten, müssen Sie die Schritte, die von der Apple-Dokumentation folgen:

Um die Erweiterung für alle Dateien anzuzeigen, wählen Sie Einstellungen Finder> und klicken Sie auf Erweitert, und wählen Sie „Zeigen alle Dateierweiterungen . "