Мне нужна функция, родная или пользовательская, которая проверяет, является ли строка допустимым именем каталога. Я просмотрел документацию по PHP, и я могу найти только функцию is_dir
которая проверяет, является ли это существующим каталогом или нет, а не допустимым именем для каталога.
Это должно сработать для вас.
См. Regex для проверки имени папки и имени файла.
if (strpbrk($filename, "\\/?%*:|\"<>") === FALSE) { /* $filename is legal; doesn't contain illegal character. */ } else { /* $filename contains at least one illegal character. */ }
Это сработает. Вы можете изменить второй и третий аргументы в соответствии с вашими потребностями.
if (!mkdir($directory, 0700, true)) { die('Error: Illegal directory.'); }
Обратите внимание, что это создаст каталог, если имя каталога действительно. Тем не менее, по моему скромному мнению (и, не зная вашего конкретного случая использования), это самый предпочтительный способ в большинстве языков обрабатывать проверку правильности имени каталога. Просто попробуйте создать каталог, и если он не сработает, сообщите им, что он сработал.
Преимущество этого заключается в том, что он не поддерживает вашу файловую систему кода и является наименее подверженным ошибкам методом проверки и создания каталога, поскольку никакой другой процесс или поток не смогут создать каталог между проверкой каталога и вы его создаете.
Недостатком является то, что этот метод предполагает, что вы хотите создать каталог немедленно.
Конечно, существует множество причин, из-за которых может mkdir()
сбой mkdir()
(например, недостаточные разрешения, аппаратный сбой, недопустимое имя каталога и т. Д.), Поэтому вы можете отображать разные сообщения об ошибках пользователю на основе ошибки. К сожалению, у PHP нет такой же надежной обработки исключений, как некоторые другие языки, но если вы хотите пойти по этому пути, вы должны использовать такой подход, как в этом ответе, чтобы поймать разные предупреждения, которые mkdir()
может генерировать.