Écran blanc vierge Laravel

117

Mon site laravel fonctionnait auparavant, j'ai récemment mis à niveau vers Apache 2.4 et PHP 5.5.7.

Maintenant, j'obtiens un écran blanc vide lorsque je vais sur laravel.mydomain.com, rien dans les journaux d'erreurs Apache, les routes, etc. ne devrait fonctionner comme avant.

.htaccess se charge car j'obtiens un 500 lorsque j'insère une ligne invalide dans /var/sites/laravel/public/.htaccess.

Voici mon .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]

Voici ma directive d'hôte virtuel:

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>

Et 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
la source
essayez de mettre une nouvelle installation vierge de Laravel dans laravel.mydomain.com - ça marche alors?
Laurence
HMM, j'ai essayé de créer un projet avec le compositeur et il me manque apparemment openssl. Existe-t-il un moyen simple de l'ajouter par la suite ou dois-je recompiler mon PHP avec les options de configuration actuelles + --with-openssl?
Mico
1
J'avais ce problème d'écran vide lors du déplacement d'un projet déjà opérationnel sur un serveur de test. Je n'allais nulle part avec ça alors j'ai décidé de faire la même chose que la suggestion de @ the-shift-exchange et de créer une nouvelle installation de Laravel, puis j'ai trouvé le problème assez rapidement; le serveur de transfert exécutait une version obsolète de PHP. Laravel nécessite au moins PHP v5.4.0. Je pensais que je le mentionnerais au cas où quelqu'un d'autre aurait le même problème.
igneosaur
Vérifiez que la limite de mémoire n'est pas atteinte - cela a déjà causé WSOD pour moi dans Laravel 4
Smith
Juste un autre point de données - j'ai frappé ceci sur une application déployée sur Kubernetes, en utilisant NFS pour monter les fichiers Web. En raison des performances NFS très lentes, il semble que Laravel ne parvient pas à mettre en cache les vues dans un délai raisonnable. PHP-FPM renvoyait une réponse vide. Correction en supprimant manuellement toutes les vues et en les remettant en cache.
Joe Niland

Réponses:

222

Apache

Est -ce que cette réponse décrire ou aider votre situation? La mise à niveau vers Apache 2.4 s'accompagne de quelques changements dans la configuration d'Apache.

Laravel

Vérifiez-vous les journaux de Laravel ou les journaux d'Apache?

Depuis la mise à niveau vers Laravel 4.1, j'ai eu des "erreurs" d'écran blanc (WSOD) lorsque l'application ne pouvait pas écrire dans l'emplacement du journal. J'ai toujours résolu cela en rendant le répertoire app / storage accessible en écriture par Apache (que ce soit le groupe inscriptible sur "www-data", "apache" ou accessible en écriture dans le monde entier - cela dépend de la configuration de votre serveur.

Utilisateur du serveur Web

Sur les serveurs Ubuntu / Debian, votre PHP peut fonctionner en tant qu'utilisateur "www-data". Sur les serveurs CentOS / RedHat / Fedora, votre PHP peut être exécuté en tant qu'utilisateur "apache".

Assurez-vous que vos fichiers appartiennent à l'utilisateur qui exécute PHP:

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

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

Notez que vous ne pouvez pas exécuter en tant qu'utilisateur www-data ou apache. Cela dépend de votre hébergement et de votre configuration!

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+ (dont 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
la source
9
On dirait que c'était un problème de permission. chmodding le répertoire laravel l'a fait fonctionner.
Mico
3
@fideloper Cette réponse m'a vraiment sauvé la journée. Obtenait WSOD, et rien n'apparaissait dans les journaux nulle part. chmodding l'application / le stockage s'en est occupé. Je vous lève mon chapeau virtuel!
Tim Habersack
Ouais merci pour cela m'a vraiment sauvé ici. Je recevais un X-pad: éviter les bogues du navigateur dans ma réponse http et je pensais que c'était ça
Simon Bennett
4
L'autorisation sur le dossier de stockage a résolu mon problème. Mais pourquoi laravel n'affiche pas le problème d'autorisation sur le navigateur?
Musa
4
Cela a résolu le problème pour moi aussi ... je n'aurais jamais trouvé cela par moi-même. Je conviens que ce serait mieux s'il y avait une sorte de message d'erreur affiché plutôt que "l'écran blanc de la mort".
dusty909
65

Une mise à jour de la réponse de fideloper pour Laravel 5 et sa nouvelle structure de fichiers est:

$ sudo chmod -R o+w storage/
EddardOmeka
la source
Gloire! J'ai résolu mon problème pour L5 sur le serveur ubuntu 14.04.
Dylan Pierce
A marché pour moi aussi, sous Mac OS X 10.10.3
dave
A travaillé pour moi - CentOS 6.8 (Final)
Mike
26

Essayez ceci, dans la page public / index.php

error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set("display_errors", 1);
CG_DEV
la source
C'était en fait ce dont j'avais besoin car pour une raison quelconque sur le travail du serveur (Plesk), il ne consignait rien dans le journal des erreurs et rien dans le journal laravel, en ajoutant cela m'a montré que c'était en fait un fichier manquant qui causait mon vide 500 écrans, merci beaucoup!
Sam
J'avais aussi un écran blanc et aucune erreur du tout. Toutes les autorisations et tout étaient parfaits. Cette réponse m'a aidé à voir ce qui se passe réellement. Merci.
SI
ont foiré ce problème depuis hier. Au-delà de l'autorisation des dossiers dans mon cas, cette vérification a été signalée que le serveur n'a pas extrait tous les dossiers dans le dossier du fournisseur!? Quel mystère ... Vraiment une bonne approche. Utile pour les serveurs publics sans accès limité.
CodeToLife le
26

Les étapes suivantes ont résolu le problème d'écran blanc vierge sur mon Laravel 5.

  • Accédez à votre dossier racine Laravel
  • Donner l'autorisation d'écriture aux répertoires bootstrap/cacheetstorage

sudo chmod -R 777 bootstrap / stockage de cache

  • Renommer .env.example en.env
  • Générez la clé d'application avec la commande suivante dans le terminal / l'invite de commande à partir de la racine Laravel:

clé artisanale php: générer

Cela générera la clé de chiffrement et mettra à jour la valeur de APP_KEYin.env fichier

Cela devrait résoudre le problème.

Si le problème persiste, mettez config/app.phpà jour avec la nouvelle clé générée à partir de la commande artisan key generate ci-dessus:

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

à

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

Mukesh Chapagain
la source
10

pour quiconque obtient une page vierge même après avoir rendu le stockage accessible pour afficher les erreurs, placez ces deux lignes dans les premières lignes de public / index.php pour voir au moins ce qui se passe. pour moi, cette erreur était là: la classe 'PDO' n'a pas été trouvée dans /var/www/***/config/database.php à la ligne 16

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

Quand j'étais nouveau sur Linux, je trouvais généralement cette erreur avec mon projet Laravel. Les erreurs blanches signifient une erreur, il peut y avoir un problème d'autorisation ou une erreur.

Il vous suffit de suivre deux étapes et vous travaillerez comme un champion :)

(1) Donnez la permission. Exécutez ces commandes à partir du répertoire racine de votre projet

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

(2) Si vous avez cloné le projet ou extrait de github, exécutez

composer install

(3) Configurez correctement votre fichier .env et votre projet fonctionnera.

Vikash
la source
L'étape (2) était absente de mon installation. J'avais cloné le projet en pensant qu'il avait tous les fichiers nécessaires dans le répertoire pour qu'il fonctionne dès la sortie de la boîte. J'avais encore des problèmes, mais c'était une étape cruciale.
Jonathan Hickman
5

J'étais aux prises avec un problème similaire sur un serveur CentOS. Utiliser php artisan serv et y accéder via le port 8000 sur la machine locale fonctionnait bien, mais je ne pouvais pas faire charger mes machines distantes d'une vue particulière. Je pouvais renvoyer des chaînes très bien, et certaines vues se chargeaient. Je me suis penché sur les autorisations pendant un moment avant de finalement réaliser que c'était un problème SELinux. Je viens de le définir de forcer à permissif et cela a fonctionné. J'espère que cela aidera quelqu'un d'autre qui pourrait rencontrer le même problème.

setenforce permissive
Kamkat86
la source
Cela m'a aidé à chaque fois
Umair Hamid
5

J'ai également une autre option pour laquelle un problème de page blanche peut survenir. Si vous êtes en mode production et si vous avez mis en cache vos fichiers de configuration par php artisan (config: cache), essayez de supprimer le fichier cache en cours d'exécution:

php artisan config:clear

ou supprimez-le manuellement (bootstrap / cache / config.php)

Boris Tetřev
la source
1
J'ai tout essayé et c'est la dernière chose qui a fonctionné pour moi.
DavidHyogo
Il s'avère que mon fichier env est invalide, l'exécution de cette commande me le fait savoir.
SvEnjoyPro le
4

L'exécution de cette commande l'a résolu pour moi:

php artisan view:clear

Je suppose qu'une page d'erreur vierge était en partie mise en cache. J'ai dû effacer les caches.

Andrew
la source
4

Dans mon cas, j'ai installé laravel plusieurs fois, et je suis sûr que l'autorisation d'écriture de dossier a été correctement donnée.

Comme la plupart des réponses ci-dessus:

sudo chmod 777 -R storage bootstrap

L'erreur est que ma configuration nginx provient de la documentation officielle .

J'ai seulement modifié le nom de domaine après la copie , puis j'ai eu une page vierge. J'ai essayé de redémarrer nginxetphp-fpm , mais pas de travail pour moi.

Enfin, j'ai ajouté cette configuration de ligne pour résoudre le problème.

location ~ \.php$ {

    # same as documentation ...

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

J'espère pouvoir aider les autres.

qskane
la source
1
J'ai perdu une journée entière à cause de ce problème. C'est la réponse qui m'a finalement sauvé. J'aurais aimé pouvoir vous donner plus qu'un vote positif. Je vous remercie!
Miles du
3

Face à l'écran vide dans Laravel 5.8. Tout semble bien avec le stockage et le dossier d'amorçage avec les droits 777. Sur

php artisan cache:clear

Cela montre que le problème était les espaces blancs dans le nom de l'application du fichier .env

saad
la source
1

J'ai quelques problèmes pour l'installer dans une machine Vagrant. Ce qui fonctionne vraiment pour moi était d'exécuter un:

chmod -R o+w app/storage/

de l'intérieur de la machine Vagrant.

Référence: https://laracasts.com/lessons/vagrant-and-laravel

gvsrepins
la source
1

Une autre chose qui peut causer le WSOD est l'absence du mot-clé 'return', comme dans:

return View::make('yourview');

par opposition à

View::make('yourview');

emragins
la source
1

Parfois, c'est parce que laravel 5.1 nécessite PHP> = 5.5.9. La mise à jour de php résoudra le problème.

Kevin
la source
1

Étrange pour moi, mais dans mon cas, j'ai dû vider le cache du laravel pour résoudre le problème.

antongorodezkiy
la source
1

J'ai également rencontré le même problème après avoir fait composer update

J'ai essayé d'installer composer required monolog/monolog aussi mais n'a pas fonctionné.

Ensuite, j'ai supprimé le répertoire / vendor et j'ai couru composer installet travaillé comme d'habitude.

fondamentalement, il doit avoir rétabli la version précédente de mon monologue et des autres packages stables. donc mieux de ne pascomposer update

ce que j'ai remarqué en comparant les deux dossiers / vendor et j'ai trouvé que ces classesfichiers /vendor/monolog/monolog/src/Handlerétaient manquants après la mise à jour du compositeur.

Amit Shah
la source
1

Il peut y avoir de nombreuses raisons derrière l'écran vide sans erreurs. J'ai rencontré ce problème à plusieurs reprises chaque fois que je souhaite télécharger un projet laravel dans un hébergement partagé.

Raison: Version PHP incorrecte

Dans mon cas, le problème était dû à une version php incorrecte. J'avais la version php 7.1 sur l'ordinateur local où, comme dans l'hébergement partagé cpanel, il y avait la version php 5.6. Le passage de la version 5.6 à 7.1 a fonctionné pour moi.

Vous pouvez changer la version de php dans cpanel à partir du gestionnaire multiphp disponible dans la page d'accueil de cpanel.

Sagar Gautam
la source
1

Parfois, dans route.php, vous pouvez avoir

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

écrit avant

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

Cela peut être une méthode vide Controller::show()lorsque vous commencez à développer votre contrôleur à partir de zéro. Dans ce cas, vous obtiendrez une page vierge vide lors de la demande d' /addURL. Cela se produit parce que la demande a été traitée par/{id} route et que sa méthode ne renvoie rien.

Essayez juste de placer l' /additinéraire avant/{id}

Илья Алисов
la source
0

Un autre problème avec le même comportement est l'utilisation de Laravel 3 avec PHP 5.5.x. Vous devez changer le nom d'une fonction laravel "yield () car c'est un mot réservé en php 5.5

Hernan
la source
0

La raison peut être Middlewaresi vous oubliez de mettre le code suivant à la fin de la handlefonction

return $next($request);
Farid Movsumov
la source
0

J'obtenais également la même erreur lorsque je démarre la première fois sur laravel + Ubuntu 14.04 Je viens de faire un clic droit sur le dossier d'amorçage et de stockage >>> propriétés >>> autorisation >> Autres accès >>> changez-le en "Créer et supprimer des fichiers" Modifier autorisation pour les fichiers joints

Je vous remercie

user1846871
la source
0

J'ai obtenu ceci sur les forums Laravel, mais si vous avez récemment mis à jour les versions de Laravel ET les versions PHP ET que vous exécutez nginx, assurez-vous d'avoir changé votre fichier de configuration nginx pour refléter la nouvelle version de PHP. Par exemple:

Dans le fichier de configuration de votre site nginx (ici: / etc / nginx / sites-available), modifiez

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

à

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

Ben Wilson
la source
0

J'ai le même problème. Je change déjà le dossier chmod pour le dossier de stockage. remplir les paramètres de base de données dans .env, mais n'a pas résolu le problème. J'ai utilisé Laravel 5.5 et j'ai utilisé PHP 5.6, pour le réparer, je suis allé à (cpanel-> PHP Selector) et j'ai changé en PHP 7.1 Et le problème est terminé.

Abed Putra
la source
0

Dans les cas normaux, les erreurs doivent être enregistrées moins que

Le script ne peut pas écrire dans le fichier journal

  • vérifier son chemin
  • autorisations

Ou une erreur s'est produite sur les journaux du serveur d'application de contrôle de niveau supérieur comme Appache || Nginx

Ou c'est des limites de ressources comme les paramètres PHP ini

memory_limit
max_input_time
max_execution_time

Ou les limites du système d'exploitation et ainsi de suite

Bdwey
la source
0

En plus des problèmes d'autorisation dans le dossier de stockage et de cache et les problèmes de version de php, il pourrait y avoir d'autres raisons d'afficher une page vierge sans aucun message d'erreur.

Par exemple, j'ai eu un message d'erreur de redéclarer sans aucun journal et avec une page blanche vierge. Il y avait un conflit entre ma propre fonction d'assistance et une fonction de fournisseur.

Je suggère comme point de départ , d'exécuter des artisancommandes. par exemple:

php artisan cache:clear

S'il y avait un problème, il s'affichera dans le terminal et vous aurez un indice et vous pourrez rechercher la solution sur Google.

Khalil Laleh
la source
0

Un écran vide se produit également lorsque votre application Laravel tente d'afficher trop d'informations et que les limites PHP entrent en jeu (par exemple, l'affichage de dizaines de milliers d'enregistrements de base de données sur une seule page). Le pire, c'est que vous ne verrez aucune erreur dans les journaux Laravel. Vous ne verrez probablement aucune erreur dans les journaux PHP FPM. Vous pouvez trouver des erreurs dans les journaux de votre serveur http, par exemple nginx jette quelque chose commeFastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of XXX bytes exhausted .

Petite astuce: ajoutez ->limit(1000)1000est votre limite, sur votre objet de requête.

f055
la source
0

J'ai rencontré ce problème lorsque j'ai essayé d'exécuter une application Laravel 5.8 sur mon serveur, en téléchargeant à partir du développement local à l'aide de Vagrant Homestead. Au bout d'un moment, j'ai compris que le sous-domaine dev sur le serveur live que j'utilisais était en quelque sorte réglé sur PHP 5.6.

cPanel> MultiPHP Manager> Définir sur PHP 7.2

fixé ça pour moi. J'espère que cela pourrait aider quelqu'un.

Inigo
la source
0

utilisez ce .htaccess pour résoudre

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
la source
0

dans mon cas, le problème BLANK WHITE SCREEN était aussi simple qu'une faute de frappe ou un mauvais caractère sur le fichier env. J'étais en train d'implémenter socialite, donc quand j'ai configuré les identifiants .env pour Google+ comme ceci:

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

Mais, le fichier .env ne peut pas utiliser le signe '+', donc je dois faire cette correction:

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

J'espère que cela vous aidera à trouver une erreur stupide ...

Absolutkarlos
la source
-2

Dans mon cas, le redémarrage d'Apache a résolu le problème. pour Ubuntu / Debian:

sudo service apache2 restart
Khairulnizam Dahari
la source