PHP не работает chmod?

Я запускаю 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 после создания каталога.