Eu estou tentando criar um diretório com a função mkdir PHP, mas eu recebo um erro como segue: Warning: mkdir() [function.mkdir]: Permission denied in .... Como resolver o problema?
Eu sei que este é um tópico antigo, mas precisa de uma resposta melhor. Você não deve precisar definir as permissões para 777, que é um problema de segurança, pois dá acesso de leitura e gravação para o mundo. Pode ser que o seu usuário apache não tenha permissões de leitura / gravação no diretório.
Aqui está o que você faz no Ubuntu
Certifique-se de que todos os arquivos pertencem ao grupo e usuário Apache. No Ubuntu é o grupo www-data e o usuário
chown -R www-data:www-data /path/to/webserver/www
Em seguida, habilitou todos os membros do grupo www-data a ler e gravar arquivos
chmod -R g+rw /path/to/webserver/www
A mkdir()função php agora deve funcionar sem retornar erros
O Apache precisa de permissão para escrever coisas como cache e logs ... é apenas uma questão de ajuste fino.
Manatax
@simpleengine Olá, percebi sua resposta. Estou enfrentando o mesmo problema com um projeto que estou tentando criar no CodeIgnter e desenvolvendo no Ubuntu 14.14 Lts .. Você poderia me explicar mais detalhadamente os passos que preciso fazer para corrigir esse erro ??? Para lhe dar algumas informações adicionais: o caminho absoluto é /opt/lampp/htdocs/www/my-app/public/uploads.. Basicamente o que estou tentando fazer é que cada usuário logado carregue arquivos dentro da pasta de uploads e também crie pastas de álbuns (isso será feito com php) para armazenar fotos ..
ltdev
5
Não gosto de usuários que ficam dizendo "não é seguro" sem mostrar a maneira segura de fazer isso.
che-azeh
38
Resposta tardia para pessoas que encontrarão isso no Google no futuro. Eu tive o mesmo problema.
NOTA: ESTOU NO MAC OSX LION
O que acontece é que o apache está sendo executado como o usuário "_www" e não tem permissão para editar nenhum arquivo. Você notará que nenhuma função do sistema de arquivos funciona via php.
Como consertar:
Abra uma janela de localização e, na barra de menus, escolha Ir> Ir para a pasta> / private / etc / apache2
agora abra httpd.conf
encontrar:
User _www
Group _www
mude o nome de usuário:
User<YOUR LOGIN USERNAME>
Agora reinicie o apache executando este terminal de formulário:
sudo apachectl -k restart
Se ainda não funcionar, eu faço o seguinte antes de fazer o acima. Pode estar relacionado.
Abra o terminal e execute os seguintes comandos: (observe, meus arquivos do servidor da web estão localizados em / Library / WebServer / www. Altere de acordo com a localização do seu site)
Esta solução funciona, mas permite que o Apache cause estragos em seu sistema caso alguém o faça executar um código malicioso (por exemplo, através do exploit Shellshock). Uma alternativa seria deixar o Apache executando como _wwwe criar um grupo para você e o Apache. Faça um novo grupo, digamos chamado trusted, e coloque-se _wwwnele. Em seguida, torne confiável o proprietário do grupo de todos os arquivos no diretório de documentos do servidor. Finalmente, faça o que chmod g+rwxfor necessário apenas nos arquivos que o Apache precisa acessar, de modo que o trustedgrupo tenha permissão para editar os arquivos.
Chris Middleton,
3
apenas entrando na conversa para enfatizar novamente que essa resposta é uma má ideia. há muitos motivos muito bons para que os processos do Apache sejam propriedade de seus próprios usuários com fins especiais.
danyamachine
15
Não defina as permissões para 777 ao usar mkdir em PHP
As respostas apenas com links não são consideradas boas práticas no StackOverflow, mas o conselho que é fornecido aqui geralmente NÃO deve ser seguido.
Pare de sugerir o uso de 777. Você está tornando seu arquivo gravável por todos, o que significa que você perde toda a segurança para a qual o sistema de permissão foi projetado. Se você sugerir isso, pense nas consequências que isso pode ter em um servidor web mal configurado: seria incrivelmente fácil "hackear" o site, sobrescrevendo os arquivos. Então, não faça isso.
Acabei de resolver o problema da questão original alterando as permissões do arquivo para 755 recursivamente, usando o Filezilla. Clique com o botão direito na pasta pai, presumindo que seja algum tipo de pasta de repositório de arquivo geral na qual está tudo bem definir permissões 755, Atributos de arquivo -> Valor numérico -> 755 e marque "Recurse em subdiretórios". Demora alguns minutos para se propagar através dos subdiretórios se você tiver muitos arquivos. Em seguida, tente novamente.
TARKUS
7
Sei que esse tópico é antigo, mas talvez isso ajude alguém, um dia.
O problema por que o PHP diz "Permissão negada" para mkdir () - caminho de url errado. Então, para consertar, tudo que você precisa é obter o caminho correto. Eu fiz assim:
Aconteceu comigo ao transferir para um novo host (que tem mysqlnd lol). Esqueci de mudar para o novo caminho completo do diretório inicial. Acontece que não era realmente um problema de permissão.
JSG de
2
Você precisa ter permissão do sistema de arquivos para criar o diretório.
Exemplo: No Ubuntu 10.04 apache (php) é executado como usuário: www-data no grupo: www-data
Significa que o usuário www-data precisa de acesso para criar o diretório.
Você pode tentar fazer isso usando: 'su www-data' para se tornar o usuário www-data.
Como uma solução rápida, você pode fazer: sudo chmod 777 my_parent_dir
chmod 0777dará acesso de leitura e escrita ao mundo! Você não deve aconselhar algo assim. No entanto, o conselho com o grupo de usuários é atualmente o melhor aqui :)
KingCrunch
1
Se o mundo tiver acesso ao sistema operacional, com certeza. A melhor maneira seria: sudo chown www-data: www-data my_parent_dir
Jon Skarpeteig,
Ou deixe as permissões de lado e adicione www-data ao grupo do diretório pai.
Marc B,
0
Outra coisa que você pode fazer é acessar: / etc / sudoers
Adicione a seguinte linha que dá permissão a esse usuário www-data ALL = (ALL: ALL) ALL Por que www-data? isso ocorre porque o apache está sendo executado por este nome de usuário.
Caso seu usuário seja diferente, tente o nome de usuário ALL = (ALL: ALL) ALL
não edite sudoersdiretamente, mas faça login como root e use o visudocomando te : que verifica todas as alterações para evitar edições defeituosas, que pode causar erros de análise quando o arquivo sudoers é carregado, o que pode deixá-lo impotente (como em nenhum direito de mudar qualquer coisa)
Elias Van Ootegem
Como encontrar o nome de usuário. como www-data? Estou usando o nginx, mas não funciona
robspin
1
@robspin tente isso: ps aux | egrep '(nginx)'
maxwells
0
Como você está em um mac, pode se adicionar ao grupo _www (o grupo de usuários apache) no seu mac:
sudo dseditgroup -o edit -a $USER -t user _www
e adicione _www user ao grupo wheel que parece ser o que o mac cria arquivos como:
Estou com este problema agora, minha melhor solução que posso dar a você agora (apesar de você não ter incluído nenhum de seu código) seria:
Verifique como você nomeia sua pasta de destino, por exemplo: new_folder (às vezes isso pode causar erro de permissão, pois a maioria dos hosts não permite que nomes usando sublinhado, traço, etc. sejam criados em tempo de execução). Funcionou para mim
Se você estava usando o comando recursivo para criar subpastas, não se esqueça de colocar 0755 (lembre-se de incluir 0 no início) no comando mkdir, por exemplo:
if(!file_exists($output)){if(!mkdir($output,0755,true)){//0755die('Failed to create folders...');}}
Depois de instalar o servidor ftp, sudo apt-get install vsftpdvocê terá que configurá-lo. Para habilitar o acesso de gravação, você deve editar o /etc/vsftpd.confarquivo e descomentar o
#write_enable=YES
linha, então deve ser
write_enable=YES
Salve o arquivo e reinicie vsftpdcomsudo service vsftpd restart .
Respostas:
Eu sei que este é um tópico antigo, mas precisa de uma resposta melhor. Você não deve precisar definir as permissões para 777, que é um problema de segurança, pois dá acesso de leitura e gravação para o mundo. Pode ser que o seu usuário apache não tenha permissões de leitura / gravação no diretório.
Aqui está o que você faz no Ubuntu
Certifique-se de que todos os arquivos pertencem ao grupo e usuário Apache. No Ubuntu é o grupo www-data e o usuário
chown -R www-data:www-data /path/to/webserver/www
Em seguida, habilitou todos os membros do grupo www-data a ler e gravar arquivos
chmod -R g+rw /path/to/webserver/www
A
mkdir()
função php agora deve funcionar sem retornar errosfonte
/opt/lampp/htdocs/www/my-app/public/uploads
.. Basicamente o que estou tentando fazer é que cada usuário logado carregue arquivos dentro da pasta de uploads e também crie pastas de álbuns (isso será feito com php) para armazenar fotos ..Resposta tardia para pessoas que encontrarão isso no Google no futuro. Eu tive o mesmo problema.
NOTA: ESTOU NO MAC OSX LION
O que acontece é que o apache está sendo executado como o usuário "_www" e não tem permissão para editar nenhum arquivo. Você notará que nenhuma função do sistema de arquivos funciona via php.
Como consertar:
Abra uma janela de localização e, na barra de menus, escolha Ir> Ir para a pasta> / private / etc / apache2
agora abra httpd.conf
encontrar:
mude o nome de usuário:
Agora reinicie o apache executando este terminal de formulário:
Se ainda não funcionar, eu faço o seguinte antes de fazer o acima. Pode estar relacionado.
Abra o terminal e execute os seguintes comandos: (observe, meus arquivos do servidor da web estão localizados em / Library / WebServer / www. Altere de acordo com a localização do seu site)
fonte
_www
e criar um grupo para você e o Apache. Faça um novo grupo, digamos chamadotrusted
, e coloque-se_www
nele. Em seguida, torne confiável o proprietário do grupo de todos os arquivos no diretório de documentos do servidor. Finalmente, faça o quechmod g+rwx
for necessário apenas nos arquivos que o Apache precisa acessar, de modo que otrusted
grupo tenha permissão para editar os arquivos.Não defina as permissões para 777 ao usar mkdir em PHP
As respostas apenas com links não são consideradas boas práticas no StackOverflow, mas o conselho que é fornecido aqui geralmente NÃO deve ser seguido.
Eu gostaria de voltar a esta ótima resposta em uma pergunta semelhante . Eu cito:
fonte
Corrigir as permissões do diretório que você tentar criar um diretório no .
fonte
Sei que esse tópico é antigo, mas talvez isso ajude alguém, um dia.
O problema por que o PHP diz "Permissão negada" para mkdir () - caminho de url errado. Então, para consertar, tudo que você precisa é obter o caminho correto. Eu fiz assim:
fonte
Você precisa ter permissão do sistema de arquivos para criar o diretório.
Exemplo: No Ubuntu 10.04 apache (php) é executado como usuário: www-data no grupo: www-data
Significa que o usuário www-data precisa de acesso para criar o diretório.
Você pode tentar fazer isso usando: 'su www-data' para se tornar o usuário www-data.
Como uma solução rápida, você pode fazer: sudo chmod 777 my_parent_dir
fonte
chmod 0777
dará acesso de leitura e escrita ao mundo! Você não deve aconselhar algo assim. No entanto, o conselho com o grupo de usuários é atualmente o melhor aqui :)Outra coisa que você pode fazer é acessar: / etc / sudoers
Adicione a seguinte linha que dá permissão a esse usuário www-data ALL = (ALL: ALL) ALL Por que www-data? isso ocorre porque o apache está sendo executado por este nome de usuário.
Caso seu usuário seja diferente, tente o nome de usuário ALL = (ALL: ALL) ALL
Isso funcionou para mim.
fonte
sudoers
diretamente, mas faça login como root e use ovisudo
comando te : que verifica todas as alterações para evitar edições defeituosas, que pode causar erros de análise quando o arquivo sudoers é carregado, o que pode deixá-lo impotente (como em nenhum direito de mudar qualquer coisa)Como você está em um mac, pode se adicionar ao grupo _www (o grupo de usuários apache) no seu mac:
e adicione _www user ao grupo wheel que parece ser o que o mac cria arquivos como:
fonte
Estou com este problema agora, minha melhor solução que posso dar a você agora (apesar de você não ter incluído nenhum de seu código) seria:
Se você estava usando o comando recursivo para criar subpastas, não se esqueça de colocar 0755 (lembre-se de incluir 0 no início) no comando mkdir, por exemplo:
Isso também funcionou para mim agora.
fonte
Se você estiver usando o LINUX, primeiro vamos verificar o usuário do apache, já que em algumas distros pode ser diferente:
Digamos que o resultado seja "http". Faça o seguinte, lembre-se de alterar path_to_folder para folders path:
fonte
verifique se não é um problema com umask
fonte
Depois de instalar o servidor ftp,
sudo apt-get install vsftpd
você terá que configurá-lo. Para habilitar o acesso de gravação, você deve editar o/etc/vsftpd.conf
arquivo e descomentar olinha, então deve ser
Salve o arquivo e reinicie
vsftpd
comsudo service vsftpd restart
.Para outras opções de configuração, consulte esta documentação ou
man vsftpd.conf
fonte
Este erro ocorre se você estiver usando o caminho errado.
Por exemplo:
Estou usando o sistema Ubuntu e o nome da minha pasta de projeto é 'myproject'
Suponha que eu tenha o diretório myproject / public / report e queira criar uma nova pasta chamada orders
Então eu preciso de todo um caminho onde meu projeto exista. Você pode obter o caminho pelo comando PWD
Portanto, meu caminho de raiz será = '/ home / htdocs / myproject /'
$ dir = '/ home / htdocs / myproject / public / report / Orders';
Vai funcionar para você !! Aproveitar !!
fonte