Кто-нибудь знает, как я могу проверить, можно ли писать каталог на PHP?
Функция is_writable
не работает для папок. (edit: Это работает. См. принятый ответ.)
Да, это работает для папок ….
Возвращает TRUE, если имя файла существует и доступно для записи. Аргумент filename может быть именем каталога, позволяющим проверить, доступен ли каталог для записи.
это код 🙂
<?php $newFileName = '/var/www/your/file.txt'; if ( ! is_writable(dirname($newFileName))) { echo dirname($newFileName) . ' must writable!!!'; } else { // blah blah blah }
быть более конкретным для владельца / группы / мира
$dir_writable = substr(sprintf('%o', fileperms($folder)), -4) == "0774" ? "true" : "false";
мир …
Согласно документации для is_writable , она должна просто работать, но вы сказали «папка», поэтому это может быть проблема с Windows . В комментариях предлагается обходной путь .
(Раннее чтение заставило меня подумать, что трейлинг-косые черты важны, но это оказалось специфичным для этой работы).
Вы можете отправить полный путь к функции is_writable()
. is_writable()
вернет false, если файл еще не существует в каталоге. Вам нужно проверить сам каталог с удалением имени файла, если это так. Если вы это сделаете, is_writable
правильно скажет вам, является ли каталог доступным для записи или нет. Если $file
содержит ваш путь к файлу, выполните следующие действия:
$file_directory = dirname($file);
Затем используйте is_writable($file_directory)
чтобы определить, is_writable($file_directory)
ли папка для записи.
Я надеюсь, что это помогает кому-то.
стат ()
Очень похоже на системный stat, но на PHP. То, что вы хотите проверить, – это значение режима, похожее на любой другой вызов stat на других языках (IE C / C ++).
Согласно руководству PHP, is_writable должен отлично работать в каталогах.
вот как я это делаю:
создайте файл с file_put_contents()
и проверьте возвращаемое значение, если оно положительно (количество написанных в байтах), тогда вы можете идти дальше и делать то, что вам нужно сделать, если оно FALSE, тогда оно не доступно для записи
$is_writable = file_put_contents('directory/dummy.txt', "hello"); if ($is_writable > 0) echo "yes directory it is writable"; else echo "NO directory it is not writable";
то вы можете удалить фиктивный файл, используя unlink ()
unlink('directory/dummy.txt');
Я написал небольшой скрипт (я называю его isWritable.php ), который обнаруживает все каталоги в том же каталоге, в котором находится скрипт, и записывает на страницу, является ли каждый каталог доступным для записи или нет. Надеюсь это поможет.
<?php // isWritable.php detects all directories in the same directory the script is in // and writes to the page whether each directory is writable or not. $dirs = array_filter(glob('*'), 'is_dir'); foreach ($dirs as $dir) { if (is_writable($dir)) { echo $dir.' is writable.<br>'; } else { echo $dir.' is not writable. Permissions may have to be adjusted.<br>'; } } ?>