chmod

(PHP 4, PHP 5, PHP 7, PHP 8)

chmodModifica as permissões do arquivo

Descrição

chmod(string $filename, int $permissions): bool

Tenta mudar as permissões do arquivo especificado para o especificado em permissions.

Parâmetros

filename

O caminho para o arquivo.

permissions

Note que permissions não é automaticamente assumido como valor em octal, então para assegurar a operação esperada, é necessário prefixar permissions com um zero (0). Strings como "g+w" naõ irão funcionar adequadamente.

<?php
chmod
("/arquivo/diretorio", 755); // decimal; provavelmente incorreto
chmod ("/arquivo/diretorio", "u+rwx,go+rx"); // string; incorreto
chmod ("/arquivo/diretorio", 0755); // octal; representação correta do modo
?>

O parâmetro permissions consiste de três componentes numéricos em octal especificando restrições de acesso para o proprietário, para o grupo de usuário onde está o proprietário e para todos os outros usuários, nesta ordem. Um componente pode ser calculado adicionando-se as permissões necessárias para o usuário alvo. O número 1 significa direito de execução, 2 significa direito de escrita, 4 significa direito de leitura. Some esses números para especificar os direitos desejados. Pode-se consultar mais sobre modos em sistemas Unix com os comandos 'man 1 chmod' e 'man 2 chmod'.

<?php
// Escrita e leitura para o proprietário, nada mais para ninguém
chmod ("/somedir/somefile", 0600);

// Escrita e leitura para o proprietário, leitura para todos os outros
chmod ("/somedir/somefile", 0644);

// Tudo para o proprietário, leitura e execução para os outros
chmod ("/somedir/somefile", 0755);

// Tudo para o proprietário, leitura e execução para o grupo do prop
chmod ("/somedir/somefile", 0750);
?>

Valor Retornado

Retorna true em caso de sucesso ou false em caso de falha.

Erros/Exceções

Em caso de falha, um aviso E_WARNING é emitido.

Notas

Nota:

O usuário atual é aquele sob o qual o PHP é executado. Provavelmente não é o mesmo usuário que acessa linha de comando ou FTP. O modo pode ser modificado apenas pelo usuário proprietário do arquivo na maioria dos sistemas.

Nota: Esta função não funcionará em arquivos remotos, pois o arquivo a ser examinado deve ser acessível através do sistema de arquivos do servidor.

Veja Também

  • chown() - Modifica o proprietário do arquivo
  • chgrp() - Altera o grupo do arquivo
  • fileperms() - Obtém permissões de arquivo
  • stat() - Obtém informações sobre um arquivo

adicione uma nota

Notas Enviadas por Usuários (em inglês) 6 notes

up
58
MethodicalFool
14 years ago
BEWARE, a couple of the examples in the comments suggest doing something like this:

chmod(file_or_dir_name, intval($mode, 8));

However, if $mode is an integer then intval( ) won't modify it. So, this code...

$mode = 644;
chmod('/tmp/test', intval($mode, 8));

...produces permissions that look like this:

1--w----r-T

Instead, use octdec( ), like this:

chmod(file_or_dir_name, octdec($mode));

See also: http://www.php.net/manual/en/function.octdec.php
up
38
Geoff W
14 years ago
BEWARE using quotes around the second parameter...

If you use quotes eg

chmod (file, "0644");

php will not complain but will do an implicit conversion to an int before running chmod. Unfortunately the implicit conversion doesn't take into account the octal string so you end up with an integer version 644, which is 1204 octal
up
36
masha at mail dot ru
19 years ago
Usefull reference:

Value Permission Level
400 Owner Read
200 Owner Write
100 Owner Execute
40 Group Read
20 Group Write
10 Group Execute
4 Global Read
2 Global Write
1 Global Execute

(taken from http://www.onlamp.com/pub/a/php/2003/02/06/php_foundations.html)
up
8
chris at ocproducts dot com
4 years ago
Windows has a very different file permission model to Unix and integrates them only minimally.

On Windows, all this function can do is to change the "read only" flag, which is turned on if $mode & 0200 does not pass.
i.e. it only checks if u+w is missing from the bitmask, and if it is, it sets the read only flag.

The executable flag cannot be set as Windows determines it based on file extension.
The write flag cannot be set as Windows determines write access based on ACLs, which are not integrated here.
up
6
alex at feidesign dot com
19 years ago
If you cannot chmod files/directories with PHP because of safe_mode restrictions, but you can use FTP to chmod them, simply use PHP's FTP-functions (eg. ftp_chmod or ftp_site) instead. Not as efficient, but works.
up
2
sander
15 years ago
if you want to chmod directories too, use this

<?php
$iterator
= new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathname), RecursiveIteratorIterator::SELF_FIRST);

foreach(
$iterator as $item) {
chmod($item, $filemode);
}
?>
To Top