Por que eu recebo “permissão negada” em PHP ao tentar mudar o nome de um diretório?

StackOverflow https://stackoverflow.com/questions/196114

  •  10-07-2019
  •  | 
  •  

Pergunta

Eu chmod'ed o diretório para 777, mesmo com o conteúdo do diretório. Ainda assim, eu recebo um erro "permissão negada". O PHP lançar este erro se apache não é o grupo / proprietário, independentemente das permissões de arquivo? Aqui está a chamada que está falhando:

rename('/correct/path/to/dir/1', '/correct/path/to/dir/2');
Foi útil?

Solução

Você está editando o diretório de nível superior, de modo que as necessidades do usuário PHP para ter acesso de gravação para esse diretório.

Outras dicas

Isso é provavelmente porque apache não é o proprietário do diretório pai. Renomear (ou mover) um arquivo é basicamente a mesma coisa que criar um novo arquivo.

para esclarecer, php só pode renomear diretórios que tem a propriedade real sobre: ??

-rwxrwxrwx user   user   temp/
-rwxr-xr-x apache apache temp2/
-rw-r--r-- user   user   script.php

assumem script.php está tentando mudar o nome destes dois diretórios:

// this operation fails as PHP (running as apache) does not own "temp",
// despite having write permissions    
rename('temp', 'temp.bak');

// this operation is successful as PHP owns "temp2"
rename('temp2, 'temp.bak'); 

Tente executar o seguinte script:

print_r(posix_getpwuid(getmyuid()));
print_r(pathinfo($YOUR_PATH));

E ver o que os retornos.

Outra coisa que pode ajudar esses tipos de situações é tentar realmente baixando permissões. Eu vi ocasiões em apache nega uma permissão de aplicativo para fazer alguma coisa, porque as suas permissões estão definidas demasiado alta . Meu palpite é que isso é para incentivar as boas práticas de segurança.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top