Laravel порожній білий екран


117

Мій сайт laravel працював раніше, я нещодавно оновив до Apache 2.4 та PHP 5.5.7.

Тепер я отримую білий порожній екран, коли переходжу на laravel.mydomain.com, нічого в журналах помилок apache, маршрутах та ін. Не повинно бути нормально, як це було раніше.

.htaccess завантажується, коли я отримую 500, коли я вставляю недійсний рядок у /var/sites/laravel/public/.htaccess.

Ось мій .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]

Ось моя директива щодо віртуального хоста:

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>

І 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

спробуйте вставити порожню нову інсталяцію Laravel на laravel.mydomain.com - чи працює вона тоді?
Лоранс

HMM, я спробував створити проект із композитором, і мені, очевидно, не вистачає Opensl. Чи є якийсь простий спосіб додати його згодом чи мені потрібно перекомпілювати PHP з поточними параметрами настройки + --with-openssl?
Міко

1
У мене виникла ця проблема з порожнім екраном при переміщенні вже працюючого проекту на інстальований сервер. Мені з цим нікуди не дівати, тоді я вирішив зробити те ж саме, що і пропозиція @ the shift-exchange і створити нову установку Laravel, тоді я досить швидко знайшов проблему; на сервері інсценування запущена застаріла версія PHP. Для Laravel потрібен принаймні PHP v5.4.0. Думав, я згадаю це, якщо хтось інший мав ті самі проблеми.
igneosaur

Перевірте, чи не обмежено обмеження пам'яті - це спричинило для мене WSOD раніше в Laravel 4
Smith

Ще одна точка даних - я натиснув це на додаток, розгорнутий у Kubernetes, використовуючи NFS для монтажу веб-файлів. Завдяки дуже повільній продуктивності NFS, здавалося, Laravel не в змозі кешувати погляди протягом розумного часу. PHP-FPM повертав порожню відповідь. Виправлено вручну, видаливши всі представлення даних і повторно кешируючи їх.
Джо

Відповіді:


222

Апач

Чи відповідає ця відповідь чи допомагає вашій ситуації? Оновлення до Apache 2.4 має деякі зміни в конфігурації Apache.

Ларавель

Ви перевіряєте журнали Laravel або журнали Apache?

З моменту оновлення до Laravel 4.1 у мене виникли «помилки» на білому екрані (WSOD), коли програма не могла записатись у лог-файл. Я завжди вирішував це, зробивши каталог додатків / зберігання, доступним для запису Apache (або групою, доступною для "www-data", "apache", або світовою, - це залежить від налаштування вашого сервера.

Користувач веб-сервера

На серверах Ubuntu / Debian ваша PHP може працювати як "www-data" користувача. На серверах CentOS / RedHat / Fedora, PHP, можливо, працює як "апаш" користувача.

Переконайтеся, що ваші файли належать користувачеві, який працює з PHP:

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

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

Зауважте, що, можливо, ви не працюєте як користувацькі www-data або apache. Це залежить від вашого хостингу та налаштування!

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+ (включаючи 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
Здається, це була проблема з дозволом. chmodding каталог laravel змусив його працювати.
Міко

3
@fideloper Ця відповідь справді врятувала мені день. Отримував WSOD, і нічого не з’являлося в журналах ніде. chmodding додаток / сховище подбали про це. Я підкажу вам свою віртуальну шапку!
Тім Хаберсак

Так, спасибі за це нас справді врятувало. Я отримував X-pad: уникайте помилок у браузері у моїй відповіді на http, і я подумав, що це саме так
Саймон Беннетт

4
Дозвіл на папку зберігання вирішив мою таку проблему. Але чому laravel не відображає проблеми з дозволом у веб-переглядачі?
Муса

4
Це і вирішило проблему для мене .... ніколи б не знайшов цього самостійно. Я погоджуюся, що було б найкраще, якби відображалося якесь повідомлення про помилку, а не «білий екран смерті».
dusty909

65

Оновлення відповіді Fideloper для Laravel 5 та нової структури файлів:

$ sudo chmod -R o+w storage/

Кудо! Вирішено мою проблему щодо L5 на сервері ubuntu 14.04.
Ділан Пірс

Працював для мене , як добре, на Mac OS X 10.10.3
Дейв

Працював для мене - CentOS 6.8 (Фінал)
Майк

26

Спробуйте це на сторінці public / index.php

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

Це було власне те, що мені було потрібно, оскільки чомусь на роботі сервера є (Plesk), він не записував нічого до журналу помилок і нічого до журналу laravel, додавши це показало мені, що насправді відсутній файл, який спричиняв мій пустий 500 екрану, дякую купу!
Сем

У мене був і білий екран, і зовсім не було помилок. Весь дозвіл і все було ідеально. Ця відповідь допомогла мені реально побачити, що відбувається. Дякую.
СІ

псували це питання з вчорашнього дня. Крім дозволу папок у моєму випадку, ця перевірка повідомляла, що сервер не вилучив усі папки всередині папки постачальника !? Яка таємниця .... Дійсно хороший підхід. Корисний для публічних серверів без низького доступу.
CodeToLife

26

Наступні кроки вирішили проблему з порожнім екраном на моєму Laravel 5.

  • Перейдіть у свою кореневу папку Laravel
  • Дайте дозвіл на написання bootstrap/cacheта storageкаталоги

sudo chmod -R 777 завантажувальний / кеш-пам'ять

  • Перейменувати .env.exampleна.env
  • Створіть ключ програми із такою командою в терміналі / командному рядку з кореня Laravel:

php ремісничий ключ: створити

Це створить ключ шифрування та оновить значення APP_KEYу .envфайлі

Це повинно вирішити проблему.

Якщо проблема все-таки існує, оновіть config/app.phpновий ключ, згенерований з вищевказаної команди generis ключ:

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

до

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


10

для тих, хто отримує порожню сторінку навіть після того, як зробити доступним для зберігання для відображення помилок, покладіть ці два рядки на перші рядки public / index.php, щоб побачити що відбувається. для мене ця помилка була там: клас "PDO" не знайдено в /var/www/***/config/database.php у рядку 16

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

6

Коли я був новим у Linux.Я зазвичай виявляв цю помилку в проекті Laravel. Білі помилки означають помилку. Можливо, є певна проблема з дозволом чи помилка.

Вам просто потрібно виконати два кроки, і він буде працювати як чемпіон :)

(1) Дайте дозвіл. Запустіть ці команди з кореневого каталогу вашого проекту

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

(2) Якщо ви клонували проект або витягли з github, тоді запустіть

composer install

(3) Налаштуйте файл .env належним чином, і ваш проект буде працювати.


Крок (2) відсутній у моїй установці. Я клонував проект, думаючи, що в ньому є всі необхідні файли в каталозі, щоб він працював з коробки. У мене ще були проблеми, але це був вирішальний крок.
Джонатан Хікман

5

Я боровся з подібною проблемою на сервері CentOS. Використання сервісного сервісу php та доступ до нього через порт 8000 на локальній машині справно працював, але не міг змусити мої віддалені машини завантажити певний вигляд. Я міг добре повернути рядки, і деякі перегляди завантажувалися. Якось переслідував хвіст на дозволи, перш ніж я нарешті зрозумів, що це проблема SELinux. Я просто встановив це від примусового до вседозволеного і воно спрацювало. Сподіваємось, що це допоможе комусь іншому там, який, можливо, зіткнеться з тією ж проблемою.

setenforce permissive

Це мені допомагало кожен раз
Умаїр Хамід

5

У мене є ще один варіант, чому може виникнути проблема з порожньою сторінкою. Якщо ви перебуваєте у виробничому режимі, і якщо ви кешували свої конфігураційні файли php artisan (config: кеш), спробуйте видалити кеш-файл, виконуючи:

php artisan config:clear

або видалити вручну (bootstrap / cache / config.php)


1
Я спробував все інше, і це остання річ, яка працювала на мене.
DavidHyogo

Виявляється, мій env-файл був недійсним, запустивши цю команду, дайте мені знати.
SvEnjoyPro

4

Запуск цієї команди вирішив її для мене:

php artisan view:clear

Я думаю, що порожня сторінка з помилками була певною, як кешована. Довелося очистити схованки.


4

У моєму випадку я встановлював laravelбагато разів, і я впевнений, що дозвіл на запис у папку надано правильно.

Як і більшість відповідей вище:

sudo chmod 777 -R storage bootstrap

Помилка полягає в тому, що моя конфігурація nginx походить з офіційної документації .

Я змінив доменне ім'я лише після копіювання ,, тоді я отримав порожню сторінку. Я спробував перезапустити nginxі php-fpm, але не для мене.

Нарешті, я додав цю конфігурацію рядка, щоб вирішити проблему.

location ~ \.php$ {

    # same as documentation ...

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Я сподіваюся, що зможу допомогти іншим.


1
Я втратив цілий вихідний день з цього питання. Це відповідь, яка остаточно врятувала мене. Я хотів би, щоб я міг дати вам більше, ніж голос "за". Дякую!
Майлз

3

Облицювання порожнього екрана в Laravel 5.8. Кожна річ здається прекрасною, як для папки зберігання, так і для завантажувальної програми, наданої 777 прав. На

php artisan cache:clear

Це показує проблему, що це були пробіли у назві програми .env- файла



1

Інша річ, яка може спричинити WSOD, відсутнє ключове слово "return", як у:

return View::make('yourview');

на відміну від

View::make('yourview');


1

Іноді тому, що для laravel 5.1 потрібен PHP> = 5.5.9. Оновлення php вирішить проблему.



1

Я також зіткнувся з тим же питанням після цього composer update

Я також спробував встановити, composer required monolog/monologале не вийшло.

Тоді я видалив каталог / vendor, побіг composer installі працював, як за нормально.

в основному, це, можливо, повернуло мою монологічну та інші стабільні версії пакетів до попередньої. так що краще не робитиcomposer update

що я помітив, порівнюючи обидві папки / постачальника та виявив, що ці classesфайли в програмі /vendor/monolog/monolog/src/Handlerвідсутні після оновлення композитора.


1

Причин може виникнути безліч причин за порожнім екраном без помилок. Я стикався з цією проблемою багато разів, коли я хочу завантажувати проект laravel у спільний хостинг.

Причина: Неправильна версія PHP

У моєму випадку проблема виникла через неправильну версію php. У мене була версія php 7.1 в локальному комп’ютері, де, як і в спільному хостингу cpanel, була версія php 5.6. Перемикання версії з 5.6 на 7.1 працювало для мене.

Ви можете змінити PHP-версію в cpanel з multiphp-менеджера, доступного на домашній сторінці cpanel.


1

Іноді у route.php у вас може бути

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

написані раніше

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

Це може бути порожній метод, Controller::show()коли ви починаєте розробляти свій контролер з нуля. У цьому випадку ви отримаєте порожню порожню сторінку при запиті /addURL-адреси. Це відбувається тому, що запит оброблявся /{id}маршрутом, і його метод нічого не повертає.

Постарайтеся розмістити /addмаршрут раніше/{id}


0

Інша проблема з такою ж поведінкою - використання Laravel 3 з PHP 5.5.x. Ви повинні змінити назву функції "laravel" "yield (), оскільки це зарезервоване слово в php 5.5


0

Причина може бути, Middlewareякщо ви забудете поставити наступний код до кінця handleфункції

return $next($request);

0

Я також отримував таку ж помилку, коли я вперше запускався на laravel + Ubuntu 14.04. Я просто клацну правою кнопкою миші на завантажувальній і папці зберігання >>> властивості >>> дозвіл >> Інший доступ >>> змінити його на "Створити та видалити файли" Змінити дозвіл на вкладені файли

Дякую


0

Отримав це з форумів Laravel, але якщо ви нещодавно оновили версії Laravel І PHP-версії І працюють nginx, переконайтеся, що ви змінили файл конфігурації nginx, щоб відобразити нову версію PHP. Наприклад:

У своєму конфігураційному файлі сайту nginx (тут: / etc / nginx / available-sites) змініть

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

до

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


0

У мене ж питання. Я вже змінюю папку chmod для папки зберігання. заповніть налаштування бази даних у .env, але проблему не виправили. Я використовував Laravel 5.5 і використовував PHP 5.6, щоб виправити це, я пішов (cpanel-> PHP Selector) і змінив на PHP 7.1. І проблема виконана.


0

У звичайних випадках помилки слід реєструвати, якщо тільки немає

Сценарій не може записати у файл журналу

  • перевірити це шлях
  • дозволи

Або сталася помилка у журналах перевірки сервера додатків вищого рівня, наприклад Appache || Nginx

Або це обмеження ресурсів, як і налаштування PHP ini

memory_limit
max_input_time
max_execution_time

Або обмеження ОС тощо


0

Окрім проблем із дозволом у виправленнях папок зберігання та кешу, а також із версіями php, можуть бути інші причини відображення порожньої сторінки без повідомлення про помилку.

Наприклад, у мене з’явилося повідомлення про помилку переоформлення без журналу та із порожньою білою сторінкою. Був конфлікт між моєю власною функцією помічника та функцією постачальника.

Я пропоную в якості вихідної точки запустити artisanкоманди. наприклад:

php artisan cache:clear

Якщо виникла проблема, вона підкаже в терміналі, і у вас є ключ, і ви можете google для вирішення.


0

Порожній екран також трапляється, коли додаток Laravel намагається відобразити занадто багато інформації та обмежує PHP (наприклад, показуючи десятки тисяч записів баз даних на одній сторінці). Найгірше - ви не побачите помилок у журналах Laravel. Можливо, ви також не побачите помилок у журналах PHP FPM. Ви можете виявити помилки в журналах свого сервера http, наприклад, nginx кидає щось подібне FastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of XXX bytes exhausted.

Коротка порада: додайте, ->limit(1000)де 1000ваша межа, на об’єкт запиту.


0

Я зіткнувся з цією проблемою, коли спробував запустити додаток Laravel 5.8 на своєму сервері, завантажуючи з локальної розробки за допомогою Vagrant Homestead. Через деякий час я зрозумів, що піддомен dev на живому сервері, на якому я працював, якимось чином встановлений на PHP 5.6.

cPanel> MultiPHP Manager> Встановити PHP 7.2

зафіксував це для мене. Сподіваюся, це може комусь допомогти.


0

використовувати цей .htaccess для вирішення

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

у моєму випадку проблема BLANK WHITE SCREEN була такою ж простою, як помилка друку або неправильний символ у файлі env. Я реалізовував socialite, тому коли я налаштовував .env облікові дані для Google+ так:

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

Але, .env файл не може використовувати знак '+', тому я повинен зробити це виправлення:

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

Я сподіваюся, що це допоможе вам знайти тупу помилку ...


-2

У моєму випадку перезапуск апашу виправив проблему. для Ubuntu / Debian:

sudo service apache2 restart
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.