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
Odpowiedz
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. */
}
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()
.
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
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. –
katalog, który nie istnieje, byłby nieprawidłowym katalogiem, nie? –
Możesz wyszukać "ogólny" katalog regex .. – Darkwater