Пустой белый экран 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.