Eu sou novo no Laravel. Eu estava tentando abrir http://localhost/test/public/
e consegui
Erro no manipulador de exceções.
Eu pesquisei e mudei a permissão do diretório de armazenamento usando chmod -R 777 app/storage
mas sem sucesso.
Eu mudei debug=>true
em app.php
e visitou a página e obteve o erro no manipulador de exceção:
Não foi possível abrir o fluxo ou o arquivo "/var/www/html/test/app/storage/logs/laravel.log": falha ao abrir o fluxo: permissão negada em / var / www / html / test / bootstrap / compilado. php: 8423
Alterei as permissões do diretório de armazenamento usando o comando chmod -R 644 app/storage
e o erro 'Erro no manipulador de exceções' desapareceu e uma página foi carregada. Mas lá estou eu recebendo isso:
file_put_contents (/var/www/html/laravel/app/storage/meta/services.json): falha ao abrir o fluxo: permissão negada
php artisan cache:clear
entãochmod -R 777 app/storage
finalmentephp artisan dump-autoload
Respostas:
A sugestão de vsmoraes funcionou para mim:
Laravel> = 5.4
Laravel <5.4
NOTA: NÃO O FAÇA EM QUALQUER SERVIDOR REMOTO (DEV OU PRODUÇÃO)
Quando fiz essa pergunta, havia um problema no meu host local, executando em uma máquina virtual. Por isso, pensei que configurar um 777 fosse seguro o suficiente, no entanto, as pessoas estão certas quando dizem que você deve procurar uma solução diferente. Tente 775 primeiro
fonte
php artisan cache:clear
e, em seguidachmod -R 777 storage
, e depoiscomposer dump-autoload
chmod -R 777 storage
em vezphp artisan cache:clear
é a resposta correta. Em seguida,sudo chmod -R ug+rw storage
concede as permissões corretas para mim, sem concederothers
privilégios de leitura / gravação ou, principalmente, de execução.777
Laravel não é específico, mas o processo de pensamento para os desenvolvedores do Laravel é: "faça funcionar AGORA, eu não me importo como", assim como777
). Como regra geral, nunca, jamais, defina algo777
para que algo funcione. ENTENDA seu servidor e usuários / funções e defina-os de acordo; não faça isso. Seus clientes confiam em você para fazer isso corretamente.Para os googlers que enfrentam esse problema com o Laravel 5.
Esse é um problema de permissão causado por diferentes usuários que tentam gravar no mesmo arquivo de log na
storage/logs
pasta com permissões diferentes.O que acontece é que a sua configuração do laravel provavelmente está configurada para registrar erros diariamente e, portanto, seu servidor da web (apache / nginx) pode criar esse arquivo com um usuário padrão, dependendo do seu ambiente, pode ser algo como
_www
noswww-data
sistemas OSX ou * NIX, e então o problema ocorre quando você pode executar alguns comandos do artesão e obter alguns erros, então o artesão gravará esse arquivo, mas com um usuário diferente, porque o PHP no terminal é executado por um usuário diferente, na verdade o seu usuário de login, você pode verificar executando este comando :Se o seu usuário de login criou esse arquivo de log no seu servidor da Web, você não poderá gravar erros nele e vice-versa, porque o laravel grava arquivos de log com
655
permissões por padrão, o que permite apenas que o proprietário escreva nele.Para corrigir esse problema temporário, você deve conceder manualmente permissões para o grupo
664
neste arquivo, para que tanto o usuário de logon como o servidor do servidor da Web possam gravar nesse arquivo de log.Para evitar esse problema permanentemente, convém configurar as permissões apropriadas quando um novo arquivo for criado no
storage/logs
diretório, herdando as permissões do diretório. Esta resposta https://unix.stackexchange.com/a/115632 pode ajudá-lo a lidar com aquele.fonte
Você não deve conceder 777 permissões. É um risco de segurança. Para usuários do Ubuntu, no Laravel 5, sugiro alterar o proprietário para armazenamento de diretório recursivamente:
Tente o seguinte:
Nos sistemas baseados no Ubuntu, o www-data é um usuário apache.
fonte
chmod 777
respostas. Obrigado ~chmod 777
é um pesadelo completo.chmod 777
consequências?Para todos que usam o Laravel 5, Homestead e Mac, tente o seguinte:
fonte
bootstrap/cache/compiled.php
estava tentando gravar neste diretório, mas ele não existia e acabou gerando um erro de permissão. Obrigado.algumas vezes o SELINUX causou esse problema; você pode desativar o selinux com este comando.
fonte
Problema resolvido
isso permite a permissão de gravação para o aplicativo, estrutura, logs Espero que isso ajude
fonte
NUNCA DÊ A PERMISSÃO 777!
vá para o diretório do projeto laravel no seu terminal e escreva:
Dessa forma, você está tornando seu usuário o proprietário e concedendo privilégios:
1 Execute, 2 Write, 4 Read
1 + 2 + 4 = 7 significa (rwx)
2 + 4 = 6 significa (rw)
finalmente, para o acesso ao armazenamento, ug + rwx significa que você está dando ao usuário e ao grupo 7
fonte
Para usuários vagantes, a solução é:
(vagrant) cache de artesãos php: limpar
(fora do vagrant) chmod -R 777 app / storage
(em vagrantes) compositor dump-autoload
Certificar-se de que você chmod em seu ambiente local e não dentro de vagabundos é importante aqui!
fonte
Tente novamente com
chmod -R 755 /var/www/html/test/app/storage
. Use com sudo forOperation not permitted
no chmod. Use Verificar permissão do proprietário se ainda tiver o erro.fonte
De acordo com o Laravel 5.4, que é o mais recente que eu estou escrevendo, se você tiver qualquer problema como esse, precisará alterar a permissão. NÃO OUÇA NINGUÉM QUE DIZ QUE VOCÊ AJUSTE 777 PARA QUALQUER DIRETÓRIO. Tem um problema de segurança. Mude a permissão da pasta de armazenamento como esta
Alterar a permissão da pasta de inicialização como esta
Agora, verifique se você está executando os dois comandos no diretório do aplicativo. Você não enfrentará problemas no futuro em relação à permissão. O 775 não compromete nenhuma segurança da sua máquina.
fonte
Sugira a permissão correta, se for para o Apache,
fonte
Se você possui o Laravel 5 e procura uma solução permanente, o
php artisan
uso da linha de comando e o servidor Apache aplicáveis usam o seguinte:sudo chmod -R 777 vendor storage
echo "umask 000" | sudo tee -a /etc/resolv.conf
sudo service apache2 restart
Veja a explicação detalhada aqui .
fonte
PARA QUALQUER UM EXECUTANDO UM SO COM SELINUX: A maneira correta de permitir que o httpd grave na pasta de armazenamento laravel é:
Em seguida, aplique as alterações imediatamente:
O SELinux pode ser um problema, mas se estiver presente, recomendo que você aprenda mais do que ignorá-lo completamente.
fonte
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/path/to/www/storage(/.*)?'
Eu tive o mesmo problema e as etapas abaixo me ajudaram a corrigir o problema.
<?php echo exec('whoami'); ?>
E execute o arquivo no navegador da web. Isso daria ao usuário apache. No meu caso, é ec2-user, pois eu estava usando o aws com o cronjob instalado no /etc/cron.d/. Pode ser um usuário diferente para os outros.
sudo chown -R ec2-user:<usergroup> /app-path/public
Você precisa identificar e usar o "usuário" e o "grupo de usuários" certos aqui.
fonte
Se você usa Linux ou Mac, também pode executar o
ssh terminal
. Você pode usar o terminal para executar este comando,Se você estiver usando o Windows, poderá executar usando
git bash
.Você pode fazer o download do formulário git https://git-scm.com/downloads .
fonte
Xampp para uso:
fonte
Sempre que altero o app.php, recebo uma permissão negada para gravar o bootstrap / cache / services.json, então fiz isso para corrigi-lo:
fonte
resolveu isso para mim
fonte
Definir a permissão para 777 é definitivamente uma péssima ideia!
... mas
Se você está recebendo um erro de permissão conectado à pasta "storage", foi o que funcionou para mim:
fonte
Se estiver usando laradock, tente
chown -R laradock:www-data ./storage
no contêiner da área de trabalhofonte
No meu caso, a solução foi alterar a permissão
app/storage/framework/views
e osapp/storage/logs
diretórios.fonte
Se alguém mais tiver um problema semelhante com o erro de permissão de arquivo fopen, mas for sábio o suficiente para não chmod 777 às cegas, aqui está minha sugestão.
Verifique o comando que você está usando para obter as permissões que o apache precisa:
O 'r' significa aberto apenas para leitura e, se você não estiver editando o arquivo, é como deve defini-lo. Isso significa que o apache / www-data precisa de pelo menos permissão de leitura nesse arquivo, que se o arquivo for criado através do laravel, ele já terá permissão de leitura.
Se, por algum motivo, você precisar gravar no arquivo:
Em seguida, verifique se o apache também tem permissões para gravar no arquivo.
http://php.net/manual/en/function.fopen.php
fonte
Basta iniciar seu servidor usando
artisian
php artisian serve
Em seguida, acesse seu projeto a partir do URL especificado:
fonte
Eu tenho o mesmo problema ao rodar vagrant no mac. resolveu o problema alterando o usuário do servidor Apache no arquivo https.conf:
Execute o apache no usuário php em vez do daemon do usuário para resolver o problema de acesso ao arquivo com php
agora, o arquivo de cache criado pelo php pode ser lido e editado pelo apache sem mostrar nenhum erro de permissão de acesso.
fonte
Depois de muitas tentativas e erros com permissões de diretório, acabei com uma epifania ... não havia mais espaço na partição do disco. Só queria compartilhar para garantir que ninguém mais seja estúpido o suficiente para continuar procurando a solução na direção errada.
No Linux, você pode usar
df -h
para verificar o tamanho do disco e o espaço livre.fonte
Esse problema, na verdade, é causado por usuários diferentes que desejam
write/read
arquivar, mas que foram negados, causam propriedade diferente. talvez você como 'root' tenha instalado o laravel antes de fazer o login no seu site como usuário 'laravel' onde 'laravel' é a propriedade padrão, portanto, esse é o problema realmente real aqui. Portanto, quando o usuário 'laravel' quiser ler / gravar todos os arquivos no disco como padrão, a ser negado, faça com que o arquivo seja propriedade de 'root'.Para resolver esse problema, você pode seguir assim:
sudo chown -hR your-user-name /root /nameforlder
ou no meu caso
sudo chown -hR igmcoid /root /sublaravel
Nota de rodapé:
root
como nome de primeira propriedade que instalou antesyour-user-name
como a propriedade padrão que realmente escreve / lê no site.namefolder
como pasta de nome que deseja alterar a propriedade.fonte
Espero que ajude em algum lugar de alguma forma ...
fonte
Enquanto trabalhava no Windows 10 com o Laragon e o Laravel 4, parecia-me que não havia maneira de alterar as permissões manualmente, pois a execução de
chmod
comandos no terminal Laragon embutido não tinha efeito.No entanto, era possível neste terminal ir para a pasta de armazenamento e adicionar manualmente as pastas desejadas como esta:
O
cd
comando-no terminal leva você para a pasta (pode ser necessário ajustar esse caminho para se adequar à sua estrutura de arquivos). Omkdir
comando-criará o diretório com o nome fornecido.Não tive a oportunidade de testar essa abordagem no Laravel 5, mas espero que uma abordagem semelhante funcione.
Claro que pode haver uma maneira melhor, mas pelo menos essa foi uma solução razoável para a minha situação (corrigindo o erro
file_put_contents(/var/www/html/laravel/app/storage/meta/services.json): failed to open stream
:).fonte
Eu resolvi meu problema fazendo isso.
fonte
Eu tentei dar
777
acesso à pasta de armazenamento e ela tem trabalho para mim1) vá para o diretório raiz do laravel (
/var/www/html
para mim) e execute o seguinte comandofonte