Schermo bianco vuoto Laravel


117

Il mio sito laravel funzionava prima, ho recentemente aggiornato ad Apache 2.4 e PHP 5.5.7.

Ora ricevo una schermata bianca vuota quando vado su laravel.mydomain.com, niente nei log degli errori di Apache, nei percorsi e così via dovrebbe andare bene come funzionava prima.

.htaccess si sta caricando poiché ottengo un 500 quando inserisco una riga non valida in /var/sites/laravel/public/.htaccess.

Ecco il mio .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]

Ecco la mia direttiva sull'host virtuale:

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

prova a inserire una nuova installazione vuota di Laravel in laravel.mydomain.com - funziona allora?
Laurence

HMM, ho provato a creare un progetto con il compositore e apparentemente mi manca openssl. C'è un modo semplice per aggiungerlo in seguito o devo ricompilare il mio PHP con le attuali opzioni di configurazione + --with-openssl?
Mico

1
Ho riscontrato questo problema con lo schermo vuoto durante lo spostamento di un progetto già funzionante su un server di staging. Non stavo arrivando da nessuna parte, quindi ho deciso di fare lo stesso del suggerimento di @ the-shift-exchange e creare una nuova installazione di Laravel, poi ho trovato il problema abbastanza rapidamente; il server di staging eseguiva una versione obsoleta di PHP. Laravel richiede almeno PHP v5.4.0. Ho pensato di menzionarlo nel caso che qualcun altro avesse lo stesso problema.
igneosaur

Controlla che il limite di memoria non venga raggiunto: questo ha causato WSOD per me prima in Laravel 4
Smith

Solo un altro punto dati: ho colpito questo su un'app distribuita su Kubernetes, utilizzando NFS per montare i file web. A causa delle prestazioni NFS molto lente, sembrava che Laravel non riuscisse a memorizzare nella cache le viste entro un ragionevole lasso di tempo. PHP-FPM stava restituendo una risposta vuota. Risolto rimuovendo manualmente tutte le visualizzazioni e memorizzandole nuovamente nella cache.
Joe Niland

Risposte:


222

Apache

Ha questa risposta descrivere o aiutare la vostra situazione? L'aggiornamento ad Apache 2.4 include alcune modifiche nella configurazione di Apache.

laravel

Stai controllando i log di Laravel o quelli di Apache?

Dall'aggiornamento a Laravel 4.1, ho riscontrato "errori" (WSOD) con schermo bianco quando l'applicazione non poteva scrivere nella posizione del registro. Ho sempre risolto questo problema rendendo la directory app / storage scrivibile da Apache (sia il gruppo scrivibile in "www-data", "apache" o scrivibile da tutti - dipende dalla configurazione del server.

Utente del server Web

Sui server Ubuntu / Debian, il tuo PHP potrebbe essere in esecuzione come utente "www-data". Sui server CentOS / RedHat / Fedora, il tuo PHP potrebbe essere in esecuzione come utente "apache".

Assicurati che i tuoi file siano di proprietà dell'utente che esegue PHP:

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

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

Nota che potresti non essere in esecuzione come utente www-data o apache. Dipende dal tuo hosting e dalla configurazione!

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+ (di cui 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

9
Sembra che sia stato un problema di autorizzazione. chmodding la directory laravel lo ha fatto funzionare.
Mico

3
@fideloper Questa risposta mi ha davvero salvato la giornata. Ricevevo WSOD e non veniva visualizzato nulla nei log da nessuna parte. chmodding l'app / spazio di archiviazione si è preso cura di esso. Ti do il mio cappello virtuale!
Tim Habersack

Sì, grazie per questo mi ha davvero salvato qui. Stavo ottenendo un X-pad: evita il bug del browser nella mia risposta http e ho pensato che fosse quello
Simon Bennett

4
L'autorizzazione sulla cartella di archiviazione ha risolto il mio problema. Ma perché laravel non mostra il problema di autorizzazione sul browser?
Musa

4
Questo ha risolto il problema anche per me ... non l'avrei mai trovato da solo. Sono d'accordo che sarebbe meglio se ci fosse una sorta di messaggio di errore visualizzato invece della "schermata bianca della morte".
polveroso 909

65

Un aggiornamento alla risposta di fideloper per Laravel 5 e la sua nuova struttura di file è:

$ sudo chmod -R o+w storage/

Complimenti! Risolto il mio problema per L5 sul server Ubuntu 14.04.
Dylan Pierce

Ha funzionato anche per me, su Mac OS X 10.10.3
dave

Ha funzionato per me - CentOS 6.8 (finale)
Mike

26

Prova questo, nella pagina public / index.php

error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set("display_errors", 1);

Questo era effettivamente ciò di cui avevo bisogno perché per qualche motivo sul server il lavoro ha (Plesk) non stava registrando nulla nel registro degli errori e niente nel registro di laravel, aggiungendo questo mi ha mostrato che in realtà era un file mancante che stava causando il mio vuoto 500 schermo, grazie mille!
Sam

Avevo anche lo schermo bianco e nessun errore. Tutti i permessi e tutto erano perfetti. Questa risposta mi ha aiutato a vedere effettivamente cosa sta succedendo. Grazie.
SI

hanno incasinato questo problema da ieri. Al di là dell'autorizzazione delle cartelle nel mio caso, questo controllo è stato segnalato che il server non ha estratto tutte le cartelle all'interno della cartella del fornitore !? Che mistero ... Davvero un buon approccio. Utile per server pubblici senza accesso ridotto.
CodeToLife,

26

I seguenti passaggi hanno risolto il problema dello schermo bianco vuoto sul mio Laravel 5.

  • Vai alla cartella principale di Laravel
  • Dare il permesso di scrittura a bootstrap/cachee storagedirectory

sudo chmod -R 777 bootstrap / cache di archiviazione

  • Rinomina .env.examplein.env
  • Genera la chiave dell'applicazione con il seguente comando nel terminale / prompt dei comandi dalla root di Laravel:

php artisan key: generate

Questo genererà la chiave di crittografia e aggiornerà il valore di APP_KEYin .envfile

Questo dovrebbe risolvere il problema.

Se il problema persiste, aggiorna config/app.phpcon la nuova chiave generata dal comando di generazione della chiave artigianale sopra:

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

per

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


10

per chiunque ottenga una pagina vuota anche dopo aver reso accessibile lo spazio di archiviazione per visualizzare errori, mettere queste due righe nelle prime righe di public / index.php per vedere almeno cosa sta succedendo. per me questo errore era lì: Classe 'PDO' non trovata in /var/www/***/config/database.php alla riga 16

error_reporting(E_ALL);
ini_set('display_errors', 1);

6

Quando ero nuovo su Linux, di solito trovavo questo errore con il mio progetto Laravel. Gli errori bianchi indicano errore, potrebbe esserci qualche problema di autorizzazione o errore.

Devi solo seguire due passaggi e funzionerà come un campione :)

(1) Dare il permesso. Esegui questi comandi dalla directory principale del tuo progetto

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

(2) Se hai clonato il progetto o estratto da GitHub, esegui

composer install

(3) Configura correttamente il tuo file .env e il tuo progetto funzionerà.


Il passaggio (2) mancava dalla mia installazione. Avevo clonato il progetto pensando che avesse tutti i file necessari nella directory perché funzionasse immediatamente. Avevo ancora problemi, ma questo è stato un passaggio cruciale.
Jonathan Hickman

5

Stavo lottando con un problema simile su un server CentOS. L'utilizzo di php artisan serv e l'accesso tramite la porta 8000 sulla macchina locale ha funzionato bene ma non è stato possibile far caricare una vista particolare alle mie macchine remote. Potrei restituire le stringhe bene e alcune visualizzazioni si stavano caricando. Ho inseguito le autorizzazioni per un po 'prima di rendermi finalmente conto che si trattava di un problema di SELinux. L'ho appena impostato da enforce a permissive e ha funzionato. Spero che questo aiuti qualcun altro là fuori che potrebbe riscontrare lo stesso problema.

setenforce permissive

Questo mi ha aiutato ogni volta
Umair Hamid

5

Ho anche un'altra opzione per cui potrebbe verificarsi un problema di pagina vuota. Se sei in modalità produzione e se hai memorizzato nella cache i tuoi file di configurazione da php artisan (config: cache), prova a cancellare il file cache eseguendo:

php artisan config:clear

o cancellalo manualmente (bootstrap / cache / config.php)


1
Ho provato tutto il resto e questa è l'ultima cosa che ha funzionato per me.
DavidHyogo

Risulta che il mio file env non era valido, eseguendo questo comando fammelo sapere.
SvEnjoyPro

4

L'esecuzione di questo comando lo ha risolto per me:

php artisan view:clear

Immagino che una pagina di errore vuota fosse in qualche modo memorizzata nella cache. Ho dovuto cancellare le cache.


4

Nel mio caso, ho installato laravel molte volte e sono sicuro che il permesso di scrittura della cartella sia stato concesso correttamente.

Come la maggior parte delle risposte sopra:

sudo chmod 777 -R storage bootstrap

L'errore è che la mia configurazione di nginx proviene dalla documentazione ufficiale .

Ho modificato il nome di dominio solo dopo aver copiato , poi ho ricevuto una pagina vuota. Ho provato a riavviare nginxephp-fpm , ma non funziona per me.

Infine, ho aggiunto questa configurazione di linea per risolvere il problema.

location ~ \.php$ {

    # same as documentation ...

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Spero di poter aiutare gli altri.


1
Ho perso un'intera giornata libera per questo problema. Questa è la risposta che finalmente mi ha salvato. Vorrei poterti dare più di un voto positivo. Grazie!
Miglia

3

Di fronte allo schermo vuoto in Laravel 5.8. Tutto sembra a posto sia con l'archiviazione che con la cartella bootstrap con diritti 777. Sopra

php artisan cache:clear

Mostra il problema erano gli spazi bianchi nel nome app del file .env



1

Un'altra cosa che potrebbe causare il WSOD è la mancanza della parola chiave "return", come in:

return View::make('yourview');

al contrario di

View::make('yourview');


1

A volte è perché laravel 5.1 richiede PHP> = 5.5.9. L'aggiornamento di php risolverà il problema.


1

Strano per me, ma nel mio caso ho dovuto svuotare la cache del laravel per risolvere il problema.


1

Ho anche affrontato lo stesso problema dopo averlo fatto composer update

Ho provato a installare composer required monolog/monolog anche ma non ha funzionato.

Quindi ho rimosso la directory / vendor e ho eseguito composer installe lavorato normalmente.

fondamentalmente deve aver ripristinato la versione precedente del mio monologo e di altri pacchetti stabili. quindi meglio non farlocomposer update

quello che ho notato confrontando entrambe le cartelle / vendor e ho scoperto che quei classesfile sotto /vendor/monolog/monolog/src/Handlermancavano dopo l'aggiornamento del compositore.


1

Potrebbero esserci molte ragioni dietro lo schermo vuoto senza errori. Ho affrontato questo problema molte volte ogni volta che voglio caricare il progetto Laravel in hosting condiviso.

Motivo: versione PHP errata

Nel mio caso, il problema era a causa di una versione php errata. Avevo la versione php 7.1 nel computer locale dove, come nel cpanel di hosting condiviso, c'era la versione php 5.6. Il passaggio alla versione da 5.6 a 7.1 ha funzionato per me.

Puoi cambiare la versione di php in cpanel dal gestore multiphp disponibile nella home page di cpanel.


1

A volte in route.php potresti avere

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

scritto prima

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

Può essere un metodo vuoto Controller::show()quando inizi a sviluppare il controller da zero. In questo caso otterrai una pagina vuota vuota quando richiedi l' /addURL. Succede perché la richiesta è stata gestita da /{id}route e il suo metodo non restituisce nulla.

Prova a posizionare il /addpercorso prima/{id}


0

Un altro problema con lo stesso comportamento è usare Laravel 3 con PHP 5.5.x. Devi cambiare il nome di alcune funzioni di laravel "yield () perché è una parola riservata in php 5.5


0

La ragione può essere Middlewarese dimentichi di mettere il codice seguente alla fine della handlefunzione

return $next($request);

0

Ricevo lo stesso errore anche quando avvio per la prima volta su laravel + Ubuntu 14.04, faccio semplicemente clic con il pulsante destro del mouse su bootstrap e cartella di archiviazione >>> proprietà >>> autorizzazione >> Altri Accesso >>> cambia in "Crea ed elimina file" Modifica autorizzazione per i file allegati

Grazie


0

Ho ottenuto questo dai forum di Laravel, ma se hai recentemente aggiornato le versioni di Laravel E le versioni PHP E stai eseguendo nginx, assicurati di aver modificato il tuo file di configurazione di nginx per riflettere la nuova versione di PHP. Per esempio:

Nel file di configurazione del sito nginx (qui: / etc / nginx / sites-available), cambia

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

per

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


0

Ho lo stesso problema. Ho già cambiato la cartella chmod per la cartella di archiviazione. riempire le impostazioni del database in .env, ma non ha risolto il problema. Ho usato Laravel 5.5 e PHP 5.6, per risolverlo sono andato a (cpanel-> PHP Selector) e sono passato a PHP 7.1 E il problema è fatto.


0

In casi normali gli errori dovrebbero essere registrati a meno che

Lo script non può scrivere nel file di registro

  • controlla il suo percorso
  • permessi

Oppure si è verificato un errore nei registri del server dell'app di controllo di livello superiore come Appache || nginx

Oppure sono i limiti delle risorse come le impostazioni ini di PHP

memory_limit
max_input_time
max_execution_time

O i limiti del sistema operativo e così via


0

Oltre ai problemi di autorizzazione nella cartella di archiviazione e cache e alla versione di php, potrebbero esserci altri motivi per visualizzare una pagina vuota senza alcun messaggio di errore.

Ad esempio, ho ricevuto un messaggio di errore di nuova dichiarazione senza alcun registro e con una pagina bianca vuota. Si è verificato un conflitto tra la mia funzione di supporto e una funzione di fornitore.

Suggerisco come punto di partenza , eseguire i artisancomandi. per esempio:

php artisan cache:clear

Se si è verificato un problema, verrà richiesto nel terminale e hai un indizio e puoi cercare la soluzione su Google.


0

Lo schermo vuoto si verifica anche quando la tua app Laravel cerca di visualizzare troppe informazioni e si attivano i limiti PHP (ad esempio la visualizzazione di decine di migliaia di record di database su una singola pagina). La parte peggiore è che non vedrai alcun errore nei log di Laravel. Probabilmente non vedrai alcun errore anche nei log PHP FPM. Potresti trovare errori nei log del tuo server http, ad esempio nginx lancia qualcosa di simileFastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of XXX bytes exhausted .

Suggerimento breve: aggiungi ->limit(1000)dove si 1000trova il tuo limite, sul tuo oggetto di query.


0

Ho riscontrato questo problema quando ho provato a eseguire un'app Laravel 5.8 sul mio server, caricando dallo sviluppo locale utilizzando Vagrant Homestead. Dopo un po 'ho capito che il sottodominio dev sul server live che stavo eseguendo era in qualche modo impostato su PHP 5.6.

cPanel> MultiPHP Manager> Imposta su PHP 7.2

risolto questo per me. Spero che questo possa aiutare qualcuno.


0

usa questo .htaccess per risolvere

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>

0

nel mio caso, il problema della SCHERMATA BIANCA IN BIANCO era semplice come un errore di battitura o un carattere sbagliato nel file env. Stavo implementando socialite, quindi quando stavo impostando le credenziali .env per Google+ in questo modo:

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

Ma il file .env non può usare il segno "+", quindi devo apportare questa correzione:

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

Spero che questo ti aiuti a trovare un errore stupido ...


-2

Nel mio caso, il riavvio di Apache ha risolto il problema. per Ubuntu / Debian:

sudo service apache2 restart
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.