Estou tentando escrever uma consulta em um arquivo para depuração. O arquivo está em database/execute.php
. O arquivo que desejo escrever é database/queries.php
.
Estou tentando usar file_put_contents('queries.txt', $query)
Mas estou conseguindo
file_put_contents (queries.txt) [function.file-put-contents]: falha ao abrir o stream: permissão negada
Tenho o queries.txt
arquivo chmod'd para 777, qual poderia ser o problema?
php
file-io
file-permissions
Hailwood
fonte
fonte
php.ini
arquivo por algo que possa negar o acesso ao arquivo?Respostas:
Tente ajustar as permissões do diretório.
a partir de um terminal, execute
chmod 777 database
(a partir do diretório que contém a pasta do banco de dados)o apache e ninguém terá acesso a este diretório se ele for chmoded corretamente.
A outra coisa a fazer é echo "getcwd ()". Isso mostrará o diretório atual e, se não for '/algo.../ banco de dados/', você precisará alterar 'query.txt' para o caminho completo do seu servidor.
fonte
chmod +x /parent/directory
, para cada diretório pai do destino.chmod +x /parent/directory
,chmod +x /parent
etc.A outra opção
é que você pode fazer
Apache (www-data)
, o dono da pastaisso deve
file_put_contents
funcionar agora. Mas para mais segurança é melhor definir também as permissões como abaixo/var/www
para a pasta raiz de seus arquivos phpfonte
Perceba que isso é muito antigo agora, mas não há necessidade de escrever consultas manualmente em um arquivo como este. O MySQL tem suporte de registro embutido, você só precisa habilitá-lo em seu ambiente de desenvolvimento.
Dê uma olhada na documentação do 'registro de consulta geral':
http://dev.mysql.com/doc/refman/5.1/en/query-log.html
fonte
Pessoal eu tive esse problema por 1 mês e fiz de tudo mas não consegui consertar, mas agora eu sei a solução.
Eu uso uma hospedagem linux compartilhada, quando meu administrador mudou o php para 5.3 recebo muitos erros para o código "file_put_contents". tente testar meu plano:
Em seu host, crie um arquivo como mytest.php, coloque este código e salve:
Abra a URL "www.your-domain.com/mytest.php" uma vez e verifique seu e-mail. você deve receber um e-mail do seu host com as informações inseridas em mytest.php, verifique o nome do remetente. se é de ninguém você tem problema com "Permissão negada" porque algo não definido e se o nome do remetente for como o meu id: [email protected] você não tem prob.
Meu administrador mudou o servidor e instalou o host novamente, eu acho, e o problema foi resolvido, diga à administração do host o que eu disse a você e talvez eles encontrem a resposta.
espero que ajude você!
fonte
Sei que é uma pergunta muito antiga, mas gostaria de acrescentar a boa solução com algumas explicações aprofundadas. Você terá que executar duas instruções em sistemas semelhantes ao Ubuntu e então funcionará perfeitamente.
As permissões no Linux podem ser representadas com três dígitos. O primeiro dígito define a permissão do proprietário dos arquivos. O segundo dígito as permissões de um grupo específico de usuários. O terceiro dígito define as permissões para todos os usuários que não são o proprietário nem membro do grupo.
O servidor web deve ser executado com um id que é membro do grupo. O servidor web nunca deve rodar com o mesmo id do dono dos arquivos e diretórios. No Ubuntu executa o apache sob o id www-data. Esse id deve ser um membro do grupo para o qual as permissões são especificadas.
Para dar os direitos apropriados ao diretório no qual deseja alterar o conteúdo dos arquivos, execute a instrução:
.Isso implicaria na questão do OP que as permissões para o diretório% ROOT% / banco de dados deveriam ser alteradas de acordo. Portanto, é importante não ter arquivos dentro desse diretório que nunca devem ser alterados ou removidos. Portanto, é prática recomendada criar um diretório separado para arquivos cujo conteúdo deve ser alterado.
Permissões de leitura (4) para um diretório significa ser capaz de coletar todos os arquivos e diretórios com seus metadados dentro de um diretório. Permissões de gravação (2) dão permissão para alterar o conteúdo do diretório. Implicando adicionar e remover arquivos, alterar permissões, etc. A permissão de execução (1) significa que você tem o direito de entrar nesse diretório. Sem o último, é impossível ir mais fundo no diretório. O servidor web precisa de permissões de leitura, gravação e execução quando o conteúdo de um arquivo deve ser alterado. Portanto, o grupo precisa do dígito 7.
A segunda afirmação é sobre a questão do OP:
Ser capaz de ler e gravar um documento é obrigatório, mas não para executar o arquivo. O 7 é dado ao dono dos arquivos, o 6 ao grupo. O servidor web não precisa ter permissão para executar o arquivo para alterar seu conteúdo. Essas permissões de gravação devem ser concedidas apenas a arquivos nesse diretório.
Todos os outros usuários não devem receber permissão.
Para diretórios que não requerem alteração de seus arquivos, há permissões de grupo 5 suficientes. Documentação sobre permissões e alguns exemplos:
https://wiki.debian.org/Permissions
https://www.linux.com/learn/tutorials/309527-understanding-linux-file-permissions
http://www.linux.org/threads/file-permissions-chmod.4094/
fonte
A coleta de informações deste link stackoverflow-image save não funciona com chmod 777 e do usuário azerafati e Loek Bergman
se você olhar no arquivo / etc / apache / envvars, verá algo como:
Apache é executado com o nome de usuário 'www-data'
'0755' significa que o proprietário do arquivo pode ler / escrever / executar, mas o grupo e outros usuários não podem escrever. então, em seu terminal, faça cd para a pasta que contém sua pasta 'imagens'. então digite:
você deve alterar as permissões primeiro, antes de alterar o proprietário. digite sua senha quando solicitado. isso tornará 'www-data' proprietário da pasta de imagens.
seu upload agora deve funcionar.
fonte
Para qualquer pessoa que use o Ubuntu e receba este erro ao carregar a página localmente, mas não em um serviço de hospedagem na web,
Acabei de consertar isso abrindo o nautilus (
sudo nautilus
) e clique com o botão direito no arquivo que você está tentando abrir, clique em propriedades> Configurações> e forneça leitura e gravação para 'todos os outros'fonte
teve o mesmo problema; meu problema era que o selinux foi definido como obrigatório.
Continuei recebendo o erro "falhou ao abrir o fluxo: permissão negada" mesmo depois de chmoding para 777 e me certificando de que todas as pastas pai tinham permissões de execução para o usuário apache. Acontece que meu problema era que selinux estava configurado para enforcing (estou em centos7), este é um devbox, então eu o desliguei.
fonte
Isso pode ser resolvido com as seguintes etapas:
Espero que ajude
fonte
Se você estiver puxando do git do local para o servidor, você precisará limpar o cache às vezes por causa dos arquivos de visualização que são carregados com ele / ou outros arquivos em cache.
Às vezes, pode ser difícil se seu aplicativo estava funcionando antes do git pull
fonte
isso pode ajudar. Funcionou para mim experimente no terminal
setenforce 0
fonte
Existem 2 maneiras de resolver esses problemas
1. use
chmod 777 path-to-your-directory
.se não funcionar,
2. simplesmente forneça o caminho completo do seu arquivo
query.txt
.fonte
Aqui está a solução. Para copiar uma imagem de um URL. este URL:
http://url/img.jpg
crie o caminho desejado termine o nome com
.jpg
fonte
Além disso, como dito
file_put_contents man page
emphp.net
, cuidado com os problemas de nomenclatura.pode não funcionar (embora esteja correto na sintaxe), mas
trabalho. Eu experimentei isso em diferentes servidores php instalados.
fonte
$dir."/file.txt"
é funcionalmente equivalente a"$dir/file.txt"
em todos os casos, supondo que$dir
seja uma string. Além disso, esse comportamento não está documentado no php.net, como afirma Kivanc.