2012-10-01 6 views
5

Potrzebuję funkcji natywnej lub wykonanej przez użytkownika, która sprawdza, czy ciąg znaków jest prawidłową nazwą katalogu. Przeglądałem dokumentację PHP i mogę znaleźć tylko funkcję is_dir, która sprawdza, czy jest to istniejący katalog, czy nie, a nie jest poprawną nazwą katalogu.Sprawdź ciąg dla poprawnej nazwy katalogu

+3

Definiowanie "prawidłowej nazwy katalogu" Każdy system operacyjny ma własne ograniczenia. Określ, co jest legalne, a co nie, a następnie potwierdź to. –

+0

katalog, który nie istnieje, byłby nieprawidłowym katalogiem, nie? –

+0

Możesz wyszukać "ogólny" katalog regex .. – Darkwater

Odpowiedz

7

To powinno działać dla Ciebie.

Zobacz 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

to będzie działać. Możesz modyfikować drugi i trzeci argument do swoich potrzeb.

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

Pamiętaj, że utworzy to katalog, jeśli nazwa katalogu jest prawidłowa. Jednak w mojej skromnej opinii (i bez znajomości konkretnego przypadku użycia) jest to preferowany sposób w większości języków do obsługi sprawdzania poprawności nazwy katalogu. Po prostu spróbuj utworzyć katalog, a jeśli się nie powiedzie, powiedz im, że się nie udało.

Zaletą tego jest to, że zachowuje on agnostyczny system plików kodu i jest to najmniej podatna na błędy metoda sprawdzania poprawności i tworzenia katalogu, ponieważ żaden inny proces ani wątek nie będzie w stanie utworzyć katalogu pomiędzy podczas sprawdzania poprawności katalog i kiedy go tworzysz.

Wadą jest to, że ta metoda zakłada, że ​​chcesz natychmiast utworzyć katalog.

Oczywiście, istnieje wiele powodów, które mkdir() może zawodzić (np wystarczających uprawnień, awaria sprzętu, nieprawidłowa nazwa katalogu, itd.), Więc może chcesz wyświetlać różne komunikaty o błędach do użytkownika w oparciu o błędzie. Niestety, PHP nie ma tak solidnej obsługi wyjątków, jak inne języki, ale jeśli chcesz iść tą drogą, powinieneś być w stanie zastosować podejście takie jak w tym answer, aby uchwycić różne ostrzeżenia, które może wygenerować mkdir().

+0

Może powinieneś spróbować tego: 'mkdir ('dirname/test /../ temp', 0700, true);' Z pewnością warto byłoby filtrować nazwę '$ directory' dla pewnych rzeczy, takich jak @GregoryBurns sugeruje w swojej odpowiedzi ... – Wilt

Powiązane problemy