Пустой белый экран 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 - тогда она будет работать?
— Лоуренс

ХММ, я пытался создать проект с композитором, и мне, похоже, не хватает openssl. Есть ли простой способ добавить его позже или мне нужно перекомпилировать мой PHP с текущими параметрами конфигурации + --with-openssl?
— Mico

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

Убедитесь, что лимит памяти не достигнут - это вызывало у меня WSOD раньше в Laravel 4
— Смит

Еще одна точка данных - я затронул ее в приложении, развернутом в Kubernetes, с использованием NFS для монтирования веб-файлов. Из-за очень низкой производительности NFS казалось, что Laravel не может кэшировать представления в разумные сроки. PHP-FPM возвращал пустой ответ. Исправлено путем ручного удаления всех представлений и их повторного кэширования.
— Джо Ниланд

Ответы:


222

апаш

Имеет ли этот ответ описать или помочь вашей ситуации? Обновление до Apache 2.4 связано с некоторыми изменениями в конфигурации Apache.

Laravel

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

После обновления до Laravel 4.1 у меня были «ошибки» белого экрана (WSOD), когда приложение не могло записывать данные в место журнала. Я всегда решал эту проблему, делая каталог app / storage доступным для записи Apache (либо для группы с возможностью записи в «www-data», «apache», либо для всех - это зависит от настроек вашего сервера.

Пользователь веб-сервера

На серверах Ubuntu / Debian ваш PHP может работать как пользовательские «www-data». На серверах CentOS / RedHat / Fedora ваш PHP может работать как пользователь "apache".

Убедитесь, что ваши файлы принадлежат пользователю, на котором запущен 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 заставил его работать.
— Mico

3
@fideloper Этот ответ действительно спас мне день. Получал WSOD, и нигде ничего не отображалось в журналах. chmodding приложение / хранилище позаботилось об этом. Я снимаю перед вами мою виртуальную шляпу!
— Тим Хаберсак

Да, спасибо за то, что это действительно спасло меня здесь. Я получал X-pad: избегайте ошибок браузера в моем http-ответе, и я думал, что это именно так
— Саймон Беннетт

4
Разрешение на папку хранилища решило мою проблему. Но почему laravel не показывает проблему с разрешением в браузере?
— Муса

4
Это устранило проблему и для меня ... я бы никогда не нашел это самостоятельно. Я согласен, что было бы лучше, если бы отображалось какое-то сообщение об ошибке, а не «белый экран смерти».
— dusty909 06

65

Обновление ответа fideloper для Laravel 5 и его новой файловой структуры:

$ sudo chmod -R o+w storage/

Престижность! Решил мою проблему для L5 на сервере ubuntu 14.04.
— Дилан Пирс

Работал для меня , как хорошо, на Mac OS X 10.10.3
— Дэйв

Сработал для меня - CentOS 6.8 (Final)
— Майк

26

Попробуйте это на странице public / index.php

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

На самом деле это было то, что мне было нужно, потому что по какой-то причине на сервере (Plesk) ничего не записывалось в журнал ошибок и ничего в журнал laravel, добавление этого показало мне, что на самом деле это отсутствующий файл, из-за которого у меня пусто Экран 500, спасибо большое!
— Сэм,

У меня тоже был белый экран и никаких ошибок. Все разрешения и все было идеально. Этот ответ помог мне понять, что происходит. Спасибо.
— SI

испортили эту проблему со вчерашнего дня. В моем случае, помимо разрешения папок, было сообщено, что сервер извлек не все папки внутри папки поставщика !? Какая загадка .... Действительно хороший подход. Полезно для публичных серверов без низкого доступа.
— CodeToLife

26

Следующие шаги решили проблему с пустым белым экраном на моем Laravel 5.

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

sudo chmod -R 777 начальная загрузка / кеш-хранилище

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

php artisan key: генерировать

Это сгенерирует ключ шифрования и обновит значение APP_KEYв .envфайле

Это должно решить проблему.

Если проблема все еще существует, обновите config/app.phpего новым ключом, сгенерированным с помощью приведенной выше команды генерации ключей мастера:

'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 artisan serv и доступ к нему через порт 8000 на локальном компьютере работали нормально, но не могли заставить мои удаленные машины загрузить конкретное представление. Я мог вернуть строки нормально, и некоторые представления загружались. Некоторое время я гнался за разрешениями, пока наконец не понял, что это проблема SELinux. Я просто установил его из принудительного в разрешительный, и это сработало. Надеюсь, что это поможет кому-то еще, кто может столкнуться с той же проблемой.

setenforce permissive

Это помогало мне каждый раз
— Умайр Хамид

5

У меня также есть еще один вариант, почему может возникнуть проблема с пустой страницей. Если вы находитесь в производственном режиме и если вы кэшировали свои файлы конфигурации с помощью php artisan (config: cache), попробуйте удалить файл кеша, выполнив:

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

Это показывает , что проблема именно Пробелы в App Имя .env файла



1

Еще одна вещь, которая может привести к тому, что в WSOD отсутствует ключевое слово return, например:

return View::make('yourview');

в отличие от

View::make('yourview');


1

Иногда это связано с тем, что для laravel 5.1 требуется PHP> = 5.5.9. Обновление php решит проблему.


1

Странно для меня, но в моем случае мне пришлось очистить кеш laravel, чтобы решить проблему.


1

Я также столкнулся с той же проблемой после выполнения composer update

Я composer required monolog/monologтоже пытался установить, но не получилось.

Затем я удалил каталог / vendor и начал composer installработать как обычно.

в основном он должен был вернуть мой монолог и другие стабильные версии пакетов к предыдущей. так что лучше неcomposer update

то, что я заметил, сравнивая обе папки / vendor, и обнаружил, что эти 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 / sites-available) измените

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

в

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


0

У меня такая же проблема. Я уже меняю папку chmod на папку Storage. заполните настройки базы данных в .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

в моем случае проблема с ПУСТОЙ БЕЛЫМ ЭКРАНОМ была такой же простой, как опечатка или неправильный символ в файле 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'

Надеюсь, это поможет вам найти тупую ошибку ...


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.