Por que eu recebo “permissão negada” em PHP ao tentar mudar o nome de um diretório?
-
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');
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 ??em>. Meu palpite é que isso é para incentivar as boas práticas de segurança.