Как проверить, может ли каталог записываться в PHP?

Кто-нибудь знает, как я могу проверить, можно ли писать каталог на 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 ++).

http://us2.php.net/stat

Согласно руководству 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>'; } } ?>