Я запускаю PHP 5.3.5-1ubuntu7.2 (с safe_mode
= Off
), и я не могу правильно установить режим для любого файла или каталога из PHP-скрипта, я закодировал следующий тест (просто чтобы убедиться) :
$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 '</pre>'; function getFileOwner($path) { $user = posix_getpwuid(fileowner($path)); $group = posix_getgrgid(filegroup($path)); return implode(':', array($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
) разрешения?
Возможно, вам придется очистить umask до создания каталога. Однако рекомендуется настраивать разрешения с помощью chmod вместо того, чтобы полагаться на umask.
Похоже, у вас есть umask 022. Попробуйте добавить umask(0)
до mkdir
Просто прочитайте руководство:
Режим также изменяется текущей umask, которую вы можете изменить с помощью umask () .
Проверьте свои системы umask и соответствующим образом используйте параметр режима.
В качестве альтернативы установите umask в значение, с которым вы можете иметь дело.
Или позаботьтесь о chmod'ding после создания каталога.