Подтвердить что ты не робот

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

Кто-нибудь знает, как я могу проверить, можно ли писать каталог на PHP?

Функция is_writable не работает для папок. (edit: он работает. См. принятый ответ.)

4b9b3361

Ответ 1

Да, он работает для папок....

Возвращает TRUE, если имя файла существует и доступно для записи. Аргумент filename может быть именем каталога, позволяющим проверить, доступен ли каталог для записи.

Ответ 2

это код:)

<?php 

$newFileName = '/var/www/your/file.txt';

if ( ! is_writable(dirname($newFileName))) {

    echo dirname($newFileName) . ' must writable!!!';
} else {

    // blah blah blah
}

Ответ 3

чтобы быть более конкретным для владельца/группы/мира

$dir_writable = substr(sprintf('%o', fileperms($folder)), -4) == "0774" ? "true" : "false";

мир...

Ответ 4

Согласно документации для is_writable, он должен просто работать, но вы сказали "папка", так что это может быть проблема Windows. В комментариях предлагается обходной путь.

(Быстрое чтение ранее заставило меня думать, что трейлинг-косые черты важны, но это оказалось специфичным для этой работы).

Ответ 5

Вы можете отправить полный путь к файлу функции is_writable(). is_writable() вернет false, если файл еще не существует в каталоге. Вам нужно проверить сам каталог с удалением имени файла, если это так. Если вы это сделаете, is_writable будет правильно указывать, является ли каталог доступным для записи или нет. Если $file содержит ваш путь к файлу, выполните следующие действия:

$file_directory = dirname($file);

Затем используйте is_writable($file_directory), чтобы определить, доступна ли папка для записи.

Я надеюсь, что это поможет кому-то.

Ответ 6

стат()

Как системный stat, но в PHP. То, что вы хотите проверить, - это значение режима, как и любой другой вызов stat на других языках (I.E.C/С++).

http://us2.php.net/stat

Ответ 7

В соответствии с руководством PHP is_writable должно отлично работать в каталогах.

Ответ 8

вот как я это делаю:

создайте файл с file_put_contents() и проверьте возвращаемое значение, если оно положительное (количество написанных в байтах), тогда вы можете идти и делать то, что вам нужно сделать, если оно ЛОЖНО, то оно не доступно для записи

$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');

Ответ 9

Я написал немного script (я называю его isWritable.php), который обнаруживает все каталоги в том же каталоге, в котором находится script, и записывает на страницу, доступен ли каждый каталог для записи или нет. Надеюсь, это поможет.

<?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>';
    } 
}
?>