PHP не удается chmod? - PullRequest
       38

PHP не удается chmod?

3 голосов
/ 27 июля 2011

Я использую PHP 5.3.5-1ubuntu7.2 (с safe_mode = Off) и не могу правильно установить режим для любого файла или каталога из скрипта PHP, я написал следующеетест (просто чтобы убедиться):

<code>$result = array();

if (mkdir('./I/do/not/exist/', 0777, true) === true)
{
    $result['./I/'] = sprintf('%s (%s)', getFileOwner('./I/'), getFilePermissions('./I/'));
    $result['./I/do/'] = sprintf('%s (%s)', getFileOwner('./I/do/'), getFilePermissions('./I/do/'));
    $result['./I/do/not/'] = sprintf('%s (%s)', getFileOwner('./I/do/not/'), getFilePermissions('./I/do/not/'));
    $result['./I/do/not/exist/'] = sprintf('%s (%s)', getFileOwner('./I/do/not/exist/'), getFilePermissions('./I/do/not/exist/'));
    $result[__DIR__] = sprintf('%s (%s)', getFileOwner(__DIR__), getFilePermissions(__DIR__));
    $result[__FILE__] = sprintf('%s (%s)', getFileOwner(__FILE__), getFilePermissions(__FILE__));
}

echo '<pre>';
print_r($result);
echo '
';function getFileOwner ($ path) {$ user = posix_getpwuid (fileowner ($ path));$ group = posix_getgrgid (filegroup ($ path));return implode (':', массив ($ user ['name'], $ group ['name']));} function getFilePermissions ($ path) {return substr (sprintf ('% o', fileperms ($ path)), -4);}

И это вывод:

Array
(
    [./I/] => www-data:www-data (0755)
    [./I/do/] => www-data:www-data (0755)
    [./I/do/not/] => www-data:www-data (0755)
    [./I/do/not/exist/] => www-data:www-data (0755)
    [/home/alix/Server/_] => alix:alix (0777)
    [/home/alix/Server/_/chmod.php] => alix:alix (0644)
)

Почему ни одна из (под) папок ./I/do/not/exist/ не получает указанных (0777) разрешений?

Ответы [ 3 ]

3 голосов
/ 27 июля 2011

Может потребоваться очистить umask перед созданием каталога.Однако рекомендуется изменить разрешения, используя chmod, а не полагаться на umask.

2 голосов
/ 27 июля 2011

Похоже, у вас есть umask 022. Попробуйте добавить umask(0) до mkdir

1 голос
/ 27 июля 2011

Просто прочитайте инструкцию:

Режим также изменяется текущим значением umask, которое можно изменить с помощью umask () .

Проверьте свои системы umask и соответственно используйте параметр режима.

Можно также установить значение umask, с которым вы можете иметь дело.

Или позаботиться о chmod'ding после создания каталога.

...