2012-10-01 6 views
5

Ich brauche eine Funktion, native oder benutzerdefiniert, die überprüft, ob eine Zeichenfolge ein gültiger Verzeichnisname ist. Ich habe mir die PHP-Dokumentation angeschaut und finde nur die Funktion is_dir, die prüft ob es ein existierendes Verzeichnis ist oder nicht und kein gültiger Name für ein Verzeichnis.Überprüfen Sie eine Zeichenfolge für einen gültigen Verzeichnisnamen

+3

"Gültigen Verzeichnisnamen" definieren Jedes Betriebssystem hat seine eigenen Einschränkungen. Definieren Sie, was legal ist und nicht, und validieren Sie dann dagegen. –

+0

ein Verzeichnis, das nicht existiert, wäre ein ungültiges Verzeichnis, nein? –

+0

Sie könnten nach einem 'allgemeinen' Verzeichnis Regex suchen. – Darkwater

Antwort

7

Dies sollte für Sie arbeiten.

Siehe regex for validating folder name & file name

if (strpbrk($filename, "\\/?%*:|\"<>") === FALSE) { 
    /* $filename is legal; doesn't contain illegal character. */ 
} 
else { 
    /* $filename contains at least one illegal character. */ 
} 
4

Dies funktionieren würde. Sie können das zweite und dritte Argument an Ihre Bedürfnisse anpassen.

if (!mkdir($directory, 0700, true)) { 
    die('Error: Illegal directory.'); 
} 

Beachten Sie, dass dadurch das Verzeichnis erstellt wird, wenn der Verzeichnisname gültig ist. Nach meiner bescheidenen Meinung (und ohne Ihren speziellen Anwendungsfall zu kennen) ist dies der bevorzugte Weg in den meisten Sprachen, die Gültigkeit des Verzeichnisnamens zu überprüfen. Versuchen Sie einfach, das Verzeichnis zu erstellen, und wenn es fehlschlägt, sagen Sie ihm, dass es fehlgeschlagen ist. Die Vorteile bestehen darin, dass es Ihr Code-Dateisystem unabhängig hält und es die am wenigsten fehleranfällige Methode ist, ein Verzeichnis zu validieren und zu erstellen, da kein anderer Prozess oder Thread in der Lage ist, beim Validieren ein Verzeichnis zu erstellen das Verzeichnis und wenn Sie es erstellen.

Der Nachteil ist, dass diese Methode annimmt, dass Sie das Verzeichnis sofort erstellen möchten.

Natürlich gibt es mehrere Gründe dafür, dass mkdir() fehlschlagen kann (z. B. unzureichende Berechtigungen, Hardwarefehler, ungültiger Verzeichnisname usw.). Daher sollten Sie dem Benutzer verschiedene Fehlermeldungen basierend auf dem Fehler anzeigen. Leider hat PHP nicht ganz so stabile Ausnahmebehandlung wie einige andere Sprachen, aber wenn Sie diesen Weg gehen wollen, sollten Sie einen Ansatz wie in diesem answer verwenden können, um die verschiedenen Warnungen abzufangen, die mkdir() erzeugen kann.

+0

Vielleicht sollten Sie das versuchen: 'mkdir ('dirname/test /../ temp', 0700, true);' Es könnte definitiv nützlich sein, den '$ directory' Namen für bestimmte Dinge zu filtern, wie @GregoryBurns in seiner Antwort suggeriert ... – Wilt

Verwandte Themen