Я хочу создать каталог, если он еще не существует.
Пользуется is_dir
достаточно для этой цели?
if ( !is_dir( $dir ) ) {
mkdir( $dir );
}
Или я должен сочетаться is_dir
с file_exists
?
if ( !file_exists( $dir ) && !is_dir( $dir ) ) {
mkdir( $dir );
}
or
/and
помимо||
/&&
.&&
здесь бесполезен, потому что, если файл не существует (!file_exists($dir) == true
), он точно не является каталогом. И если файл существует,!is_dir($dir)
проверяться не будет, так!file_exists($dir)
как вернетсяfalse
и&&
оператор замкнут .Ответы:
Оба возвращают true в системах Unix - в Unix все является файлом, включая каталоги. Но чтобы проверить, занято ли это имя, вы должны проверить оба. Там может быть обычный файл с именем 'foo', который не позволит вам создать каталог с именем 'foo'.
источник
is_writable
, не так ли?источник
# The following directives force the content-type application/octet-stream # and force browsers to display a download dialog for non-image files. # This prevents the execution of script files in the context of the website: #ForceType application/octet-stream Header set Content-Disposition attachment <FilesMatch "(?i)\.(gif|jpe?g|png)$"> ForceType none Header unset Content-Disposition </FilesMatch> # The following directive prevents browsers from MIME-sniffing the content-type. # This is an important complement to the ForceType directive above: Header set X-Content-Type-Options nosniff
mkdir
- почему вы просто не передали '$ filename'?Я думаю, что realpath () может быть лучшим способом проверки, если путь существует http://www.php.net/realpath
Вот пример функции:
Короткая версия той же функции
Примеры вывода
использование
источник
Второй вариант в сообщении с вопросом не подходит, потому что, если у вас уже есть файл с таким же именем, но это не каталог,
!file_exists($dir)
он вернетсяfalse
, папка не будет создана, поэтому"failed to open stream: No such file or directory"
произойдет ошибка . В Windows есть разница между типами «файл» и «папка», поэтому необходимо использоватьfile_exists()
иis_dir()
одновременно, например:источник
источник
источник
добавить истину после 0777
источник
Ну, вместо того, чтобы проверить оба, вы могли бы сделать
if(stream_resolve_include_path($folder)!==false)
. Это медленнее, но убивает двух птиц за один выстрел.Другой вариант - просто игнорировать
E_WARNING
, не используя@mkdir(...);
(потому что это просто отменит все возможные предупреждения, не только каталог уже существует), но и зарегистрирует определенный обработчик ошибок, прежде чем делать это:источник
У меня было такое же сомнение, но посмотрите документ PHP:
https://www.php.net/manual/en/function.file-exists.php
https://www.php.net/manual/en/function.is-dir.php
Вы увидите, что is-dir обладает обоими свойствами.
источник
Это старый, но все еще актуальный вопрос. Просто проверьте с помощью функции
is_dir()
илиfile_exists()
наличие файла.
или..
в тестируемом каталоге. Каждый каталог должен содержать эти файлы:источник
Вот как я делаю
источник
Способ проверить, является ли путь каталогом, может быть следующим:
источник