Tela branca em branco do Laravel

117

Meu site laravel estava funcionando antes, recentemente atualizei para Apache 2.4 e PHP 5.5.7.

Agora estou recebendo uma tela branca em branco quando vou para laravel.mydomain.com, nada nos logs de erros do apache, rotas e etc. deve estar bem como funcionava antes.

.htaccess está carregando, pois recebo 500 quando insiro uma linha inválida em /var/sites/laravel/public/.htaccess.

Aqui está meu .htaccess:

$ cat /var/sites/laravel/public/.htaccess
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
    Options -MultiViews
</IfModule>

RewriteEngine On

# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]

# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Aqui está minha diretiva de host virtual:

DocumentRoot "/var/sites/laravel/public"
ServerName laravel.mydomain.com
<Directory "/var/sites/laravel/public">
    AllowOverride All
    allow from all
    Options +Indexes
    Require all granted
</Directory>

E apachectl -S

$ /usr/local/apache2/bin/apachectl -S
VirtualHost configuration:
*:*                    is a NameVirtualHost
     default server mydomain.com (/usr/local/apache2/conf/extra/httpd-vhosts.conf:25)
     port * namevhost mydomain.com (/usr/local/apache2/conf/extra/httpd-vhosts.conf:25)
     port * namevhost laravel.mydomain.com (/usr/local/apache2/conf/extra/httpd-     vhosts.conf:34)
ServerRoot: "/usr/local/apache2"
Main DocumentRoot: "/var/www"
Main ErrorLog: "/usr/local/apache2/logs/error_log"
Mutex rewrite-map: using_defaults
Mutex default: dir="/usr/local/apache2/logs/" mechanism=default
PidFile: "/usr/local/apache2/logs/httpd.pid"
Define: DUMP_VHOSTS
Define: DUMP_RUN_CFG
User: name="daemon" id=1 not_used
Group: name="daemon" id=1 not_used
Mico
fonte
tente colocar uma nova instalação em branco do Laravel em laravel.mydomain.com - funciona então?
Laurence
HMM, tentei criar um projeto com o compositor e estou aparentemente perdendo o openssl. Existe alguma maneira fácil de adicioná-lo depois ou eu preciso recompilar meu PHP com as opções de configuração atuais + --with-openssl?
Mico
1
Eu estava tendo esse problema de tela em branco ao mover um projeto já em funcionamento para um servidor de teste. Eu não estava chegando a lugar nenhum com isso então decidi fazer o mesmo que a sugestão de @ the-shift-exchange e criar uma nova instalação do Laravel, então descobri o problema rapidamente; o servidor de teste estava executando uma versão desatualizada do PHP. Laravel requer pelo menos PHP v5.4.0. Pensei em mencioná-lo no caso de outra pessoa ter o mesmo problema.
igneossauro
Verifique se o limite de memória não está sendo atingido - isso causou WSOD para mim antes no Laravel 4
Smith
Apenas outro ponto de dados - eu achei isso em um aplicativo implantado no Kubernetes, usando NFS para montar os arquivos da web. Devido ao desempenho muito lento do NFS, parecia que o Laravel estava falhando em armazenar as visualizações em um período de tempo razoável. PHP-FPM estava retornando uma resposta vazia. Corrigido removendo manualmente todas as visualizações e armazenando-as novamente em cache.
Joe Niland

Respostas:

222

Apache

Esta resposta descreve ou ajuda sua situação? A atualização para o Apache 2.4 vem com algumas mudanças na configuração do Apache.

Laravel

Você está verificando os logs do Laravel ou do Apache?

Desde a atualização para o Laravel 4.1, tive "erros" de tela branca (WSOD) quando o aplicativo não pôde gravar no local do log. Eu sempre resolvi isso tornando o diretório app / storage gravável pelo Apache (qualquer grupo gravável em "www-data", "apache" ou gravável mundialmente - isso depende da configuração do seu servidor.

Usuário do servidor web

Em servidores Ubuntu / Debian, seu PHP pode estar rodando como usuário "www-data". Em servidores CentOS / RedHat / Fedora, seu PHP pode estar rodando como usuário "apache".

Certifique-se de que seus arquivos sejam propriedade do usuário que está executando o PHP:

# Debian/Ubuntu
$ sudo chown -R www-data /path/to/laravel/files

# CentOS/RedHat/Fedora
$ sudo chown -R apache /path/to/laravel/files

Observe que você pode não estar executando como usuário www-data ou apache. Depende da sua hospedagem e configuração!

Laravel 4

# Group Writable (Group, User Writable)
$ sudo chmod -R gu+w app/storage

# World-writable (Group, User, Other Writable)
$ sudo chmod -R guo+w app/storage

Laravel 5+ (incluindo 6)

# Group Writable (Group, User Writable)
$ sudo chmod -R gu+w storage

# World-writable (Group, User, Other Writable)
$ sudo chmod -R guo+w storage

#####
# The bootstrap/cache directory may need writing to also
##

# Group Writable (Group, User Writable)
$ sudo chmod -R gu+w bootstrap/cache

# World-writable (Group, User, Other Writable)
$ sudo chmod -R guo+w bootstrap/cache
fideloper
fonte
9
Parece que foi um problema de permissão. usar chmod no diretório laravel fez com que funcionasse.
Mico
3
@fideloper Essa resposta realmente salvou meu dia. Estava recebendo WSOD, e nada aparecendo nos logs em qualquer lugar. chmodding o app / storage cuidou disso. Eu tiro meu chapéu virtual para você!
Tim Habersack
Sim, obrigado por isso realmente me salvou aqui. Estava recebendo um X-pad: evite bug do navegador em minha resposta http e pensei que era isso
Simon Bennett
4
A permissão na pasta de armazenamento resolveu meu problema. Mas por que laravel não mostra problema de permissão no navegador?
Musa
4
Isso resolveu o problema para mim também ... nunca teria encontrado isso sozinho. Eu concordo que seria melhor se houvesse algum tipo de mensagem de erro exibida em vez da "tela branca da morte".
dusty909
65

Uma atualização da resposta do fideloper para o Laravel 5 e sua nova estrutura de arquivo é:

$ sudo chmod -R o+w storage/
EddardOmeka
fonte
Kudos! Resolvido meu problema para L5 no servidor Ubuntu 14.04.
Dylan Pierce
Funcionou para mim também, no Mac OS X 10.10.3
dave
Trabalhou para mim - CentOS 6.8 (final)
Mike
26

Tente isso, na página public / index.php

error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set("display_errors", 1);
CG_DEV
fonte
Isso era realmente o que eu precisava porque por algum motivo o trabalho do servidor (Plesk) não estava registrando nada no log de erros e nada no log de laravel, adicionando isso me mostrou que era realmente um arquivo ausente que estava causando meu branco Tela 500, muito obrigado!
Sam
Tive uma tela branca também e nenhum erro. Todas as permissões e tudo foi perfeito. Essa resposta me ajudou a realmente ver o que está acontecendo. Obrigado.
SI
bagunçamos esse problema desde ontem. Além da permissão das pastas, no meu caso, esta verificação foi relatada que o servidor não extraiu todas as pastas dentro da pasta do fornecedor !? Que mistério .... Realmente uma boa abordagem. Útil para servidores públicos sem baixo acesso.
CodeToLife
26

As etapas a seguir resolveram o problema da tela branca em meu Laravel 5.

  • Vá para a pasta raiz do Laravel
  • Dê permissão de gravação para diretórios bootstrap/cacheestorage

sudo chmod -R 777 bootstrap / armazenamento em cache

  • Renomear .env.example para.env
  • Gere a chave do aplicativo com o seguinte comando no terminal / prompt de comando da raiz do Laravel:

chave php artisan: gerar

Isso irá gerar a chave de criptografia e atualizar o valor de APP_KEYem.env arquivo

Isso deve resolver o problema.

Se o problema persistir, atualize config/app.phpcom a nova chave gerada a partir do comando artisan key generate acima:

'key' => env('APP_KEY', 'SomeRandomString'),

para

'key' => env('APP_KEY', 'KEY_GENERATED_FROM_ABOVE_COMMAND'),

Mukesh Chapagain
fonte
10

para qualquer um que obtiver uma página em branco, mesmo depois de tornar o armazenamento acessível para exibição de erros, coloque essas duas linhas nas primeiras linhas de public / index.php para ver, pelo menos, o que está acontecendo. para mim, esse erro estava lá: Classe 'PDO' não encontrada em /var/www/***/config/database.php na linha 16

error_reporting(E_ALL);
ini_set('display_errors', 1);
Hassan Gilak
fonte
6

Quando eu era novo no Linux, geralmente encontrava esse erro no meu projeto Laravel. Erros brancos significam erro, pode haver algum problema de permissão ou erro.

Você só tem que seguir dois passos, e vai funcionar como campeão :)

(1) Dê a permissão. Execute estes comandos do diretório raiz do seu projeto

(a) sudo chmod 777 -R storage
(b) sudo chmod bootstrap/cache

(2) Se você clonou o projeto ou puxou do github, execute

composer install

(3) Configure seu arquivo .env adequadamente e seu projeto funcionará.

Vikash
fonte
A etapa (2) estava faltando na minha instalação. Eu tinha clonado o projeto pensando que ele tinha todos os arquivos necessários no diretório para funcionar imediatamente. Eu ainda tinha problemas, mas essa foi uma etapa crucial.
Jonathan Hickman
5

Eu estava lutando com um problema semelhante em um servidor CentOS. Usar php artisan serv e acessá-lo através da porta 8000 na máquina local funcionou bem, mas não consegui fazer com que minhas máquinas remotas carregassem uma determinada visualização. Eu poderia retornar strings sem problemas e algumas visualizações estavam sendo carregadas. Persegui minhas permissões por um tempo antes de finalmente perceber que era um problema do SELinux. Acabei de definir de obrigatória para permissiva e funcionou. Espero que ajude alguém que possa estar enfrentando o mesmo problema.

setenforce permissive
Kamkat86
fonte
Isso sempre me ajudou
Umair Hamid
5

Também tenho mais uma opção de por que pode ocorrer o problema de página em branco. Se você estiver no modo de produção e se armazenou em cache seus arquivos de configuração por php artisan (config: cache), tente excluir o arquivo de cache executando:

php artisan config:clear

ou exclua-o manualmente (bootstrap / cache / config.php)

Boris Tetřev
fonte
1
Tentei de tudo e esta é a última coisa que funcionou para mim.
DavidHyogo
Acontece que meu arquivo env era inválido, execute este comando, me avise.
SvEnjoyPro
4

Executar este comando resolveu para mim:

php artisan view:clear

Acho que uma página de erro em branco foi de alguma forma armazenada em cache. Tive que limpar os caches.

Andrew
fonte
4

No meu caso, instalei laravel várias vezes e tenho certeza de que a permissão de gravação da pasta foi concedida corretamente.

Como a maioria das respostas acima:

sudo chmod 777 -R storage bootstrap

O erro é que minha configuração nginx vem da documentação oficial .

Só modifiquei o nome de domínio após a cópia, então recebi uma página em branco. Tentei reiniciar nginxephp-fpm , mas não funciona para mim.

Finalmente, adicionei esta configuração de linha para resolver o problema.

location ~ \.php$ {

    # same as documentation ...

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Espero poder ajudar outras pessoas.

qskane
fonte
1
Perdi um dia inteiro de folga com esse problema. Esta é a resposta que finalmente me salvou. Eu gostaria de poder dar a você mais do que um voto favorável. Obrigado!
Milhas de
3

Enfrentando a tela em branco no Laravel 5.8. Tudo parece bem com a pasta de armazenamento e bootstrap com 777 direitos. Em

php artisan cache:clear

Isso mostra que o problema eram os espaços em branco no nome do aplicativo do arquivo .env

saad
fonte
1

Eu tenho alguns problemas para configurá-lo em uma máquina Vagrant. O que realmente funciona para mim foi executar um:

chmod -R o+w app/storage/

de dentro da máquina Vagrant.

Referência: https://laracasts.com/lessons/vagrant-and-laravel

gvsrepins
fonte
1

Outra coisa que pode fazer com que o WSOD falte a palavra-chave 'return', como em:

return View::make('yourview');

em oposição a

View::make('yourview');

emragins
fonte
1

Às vezes é porque o laravel 5.1 requer PHP> = 5.5.9. Atualizar o php resolverá o problema.

Kevin
fonte
1

Estranho para mim, mas no meu caso tive que limpar o cache do laravel para resolver o problema.

antongorodezkiy
fonte
1

Eu também enfrentei o mesmo problema depois de fazer composer update

Eu tentei instalar composer required monolog/monolog mas não funcionou.

Em seguida, removi o diretório / vendor e executei composer installe trabalhei normalmente.

basicamente, ele deve ter revertido minha versão do monólogo e de outros pacotes estáveis ​​para a anterior. então é melhor nãocomposer update

o que eu percebi comparando as pastas / vendor e descobri que esses classesarquivos /vendor/monolog/monolog/src/Handlerestavam faltando após a atualização do composer.

Amit Shah
fonte
1

Pode haver uma série de razões por trás da tela em branco sem erros. Já enfrentei esse problema muitas vezes sempre que quero fazer upload de um projeto laravel em hospedagem compartilhada.

Razão: Versão PHP incorreta

No meu caso, o problema era devido à versão incorreta do php. Eu tinha a versão do php 7.1 no computador local onde, como no cpanel de hospedagem compartilhada, havia a versão do php 5.6. Mudar a versão 5.6 para 7.1 funcionou para mim.

Você pode alterar a versão do php no cpanel do gerenciador multiphp disponível na página inicial do cpanel.

Sagar Gautam
fonte
1

Às vezes, em route.php, você pode ter

Route::get('/{id}', 'Controller@show'..

escrito antes

Route::get('/add', 'Controller@add'..

Pode ser um método vazio Controller::show()quando você começa a desenvolver seu controlador do zero. Neste caso, você obterá uma página em branco vazia ao solicitar o /addurl. Isso acontece porque a solicitação foi tratada por /{id}rota e seu método não retorna nada.

Apenas tente colocar a /addrota antes/{id}

Илья Алисов
fonte
0

Outro problema com o mesmo comportamento é o uso do Laravel 3 com PHP 5.5.x. Você tem que mudar o nome de alguma função laravel "yield () porque é uma palavra reservada no php 5.5

Hernan
fonte
0

O motivo pode ser Middlewarese você esquecer de colocar o código a seguir no final da handlefunção

return $next($request);
Farid Movsumov
fonte
0

Eu também estava recebendo o mesmo erro quando iniciei o laravel + Ubuntu 14.04 pela primeira vez. Apenas cliquei com o botão direito do mouse na pasta de bootstrap e armazenamento >>> propriedades >>> permissão >> Outros acessem >>> altere para "Criar e excluir arquivos" Alterar permissão para arquivos incluídos

Obrigado

user1846871
fonte
0

Peguei isso nos fóruns do Laravel, mas se você atualizou recentemente as versões do Laravel E as versões do PHP E está executando o nginx, certifique-se de ter alterado o arquivo de configuração do nginx para refletir a nova versão do PHP. Por exemplo:

No arquivo de configuração do seu site nginx (aqui: / etc / nginx / sites-available), mude

fastcgi_pass unix:/var/run/php5-fpm.sock;

para

fastcgi_pass unix:/var/run/php/php5.6-fpm.sock;

Ben Wilson
fonte
0

Eu tenho o mesmo problema. Já mudei a pasta chmod para a pasta Armazenamento. preencha as configurações do banco de dados em .env, mas não corrigiu o problema. Usei o Laravel 5.5 e usei o PHP 5.6, para consertar fui ao (cpanel-> PHP Selector) e mudei para o PHP 7.1 E o problema está resolvido.

Abed Putra
fonte
0

Em casos normais, os erros devem ser registrados, a menos que

O script não pode gravar no arquivo de log

  • verifique o caminho
  • permissões

Ou ocorreu um erro em logs de servidor de aplicativos de verificação de nível superior, como Appache || Nginx

Ou são os limites de recursos como as configurações do PHP ini

memory_limit
max_input_time
max_execution_time

Ou limite do sistema operacional e assim por diante

Bdwey
fonte
0

Além de problemas de permissão no armazenamento e pasta de cache e problemas de versão php, pode haver outros motivos para exibir a página em branco sem qualquer mensagem de erro.

Por exemplo, recebi uma mensagem de erro de redeclaração sem nenhum log e com página em branco em branco. Houve um conflito entre minha função de auxiliar e uma função de fornecedor.

Eu sugiro como ponto de partida , artisancomandos de execução . por exemplo:

php artisan cache:clear

Se houver um problema, será solicitado no terminal e você tem uma pista e pode procurar a solução no Google.

Khalil Laleh
fonte
0

A tela em branco também acontece quando seu aplicativo Laravel tenta exibir muitas informações e os limites do PHP aparecem (por exemplo, exibindo dezenas de milhares de registros de banco de dados em uma única página). A pior parte é que você não verá nenhum erro nos logs do Laravel. Você provavelmente não verá erros nos logs do PHP FPM também. Você pode encontrar erros nos logs do seu servidor http, por exemplo, nginx lança algo comoFastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of XXX bytes exhausted .

Dica curta: adicione ->limit(1000)onde 1000está o seu limite, no seu objeto de consulta.

f055
fonte
0

Eu encontrei esse problema quando tentei rodar um aplicativo Laravel 5.8 no meu servidor, fazendo o upload do desenvolvimento local usando o Vagrant Homestead. Depois de um tempo, descobri que o subdomínio dev no servidor ativo que estava executando estava de alguma forma configurado para PHP 5.6.

cPanel> Gerenciador MultiPHP> Definir como PHP 7.2

consertou isso para mim. Espero que isso possa ajudar alguém.

Inigo
fonte
0

use este .htaccess para resolver

Options +ExecCGI
addhandler x-httpd-php5-cgi .php
Options -MultiViews
DirectoryIndex index.php
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
    Options -MultiViews -Indexes
</IfModule>
RewriteEngine On
RewriteBase /
# Handle Authorization Header
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect Trailing Slashes If Not A Folder...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^ %1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
#RewriteRule ^ index.php [L]
RewriteRule ^(.*)$ index.php?/$1 [L]
</IfModule>
Kaushik Dey
fonte
0

no meu caso, o problema da TELA BRANCA EM BRANCO era tão simples quanto um erro de digitação ou caractere incorreto no arquivo env. Eu estava implementando o socialite, então quando estava configurando as credenciais .env para o Google+ assim:

G+_CLIENT_ID = Your G+ Client ID
G+_CLIENT_SECRET = Your G+ Client secret
G+_REDIRECT = 'http://localhost:8000/callback/google'

Mas, o arquivo .env não pode usar o sinal '+', então tenho que fazer esta correção:

GOOGLE_CLIENT_ID = Your G+ Client ID
GOOGLE_CLIENT_SECRET = Your G+ Client secret
GOOGLE_REDIRECT = 'http://localhost:8000/callback/google'

Espero que isso ajude você a encontrar um erro idiota ...

Absolutkarlos
fonte
-2

No meu caso, reiniciar o apache corrigiu o problema. para Ubuntu / Debian:

sudo service apache2 restart
Khairulnizam Dahari
fonte