Проверьте строку для действительного имени каталога

Мне нужна функция, родная или пользовательская, которая проверяет, является ли строка допустимым именем каталога. Я просмотрел документацию по 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() может генерировать.