Laravel pusty biały ekran

117

Moja witryna laravel działała wcześniej, niedawno zaktualizowałem do Apache 2.4 i PHP 5.5.7.

Teraz, kiedy przechodzę do laravel.mydomain.com, pojawia się biały, pusty ekran, nic w dziennikach błędów apache, trasach itp. Nie powinno być w porządku, tak jak działało wcześniej.

.htaccess ładuje się, ponieważ dostaję 500, kiedy wstawiam nieprawidłową linię do /var/sites/laravel/public/.htaccess.

Oto mój .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]

Oto moja dyrektywa Virtual Host:

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>

A 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
źródło
spróbuj umieścić nową, pustą instalację Laravel w laravel.moja_domena.com - czy to działa?
Laurence,
HMM, próbowałem stworzyć projekt z kompozytorem i najwyraźniej brakuje mi openssl. Czy jest jakiś łatwy sposób na dodanie go później, czy też muszę ponownie skompilować moje PHP z bieżącymi opcjami konfiguracji + --with-openssl?
Mico
1
Miałem problem z pustym ekranem podczas przenoszenia już działającego projektu na serwer pomostowy. Nic mi to nie dało, potem zdecydowałem się zrobić to samo, co sugestia @ the-shift-exchange i stworzyć nową instalację Laravela, po czym dość szybko znalazłem problem; na serwerze pomostowym działała nieaktualna wersja PHP. Laravel wymaga co najmniej PHP w wersji 5.4.0. Pomyślałem, że wspomnę o tym na wypadek, gdyby ktoś inny miał te same kłopoty.
igneozaur,
Sprawdź, czy limit pamięci nie został osiągnięty - spowodowało to WSOD u mnie wcześniej w Laravel 4
Smith
Jeszcze jeden punkt danych - trafiłem w to w aplikacji wdrożonej na Kubernetes, używając NFS do montowania plików internetowych. Ze względu na bardzo niską wydajność NFS wydawało się, że Laravel nie mógł buforować widoków w rozsądnym czasie. PHP-FPM zwracał pustą odpowiedź. Naprawiono przez ręczne usunięcie wszystkich widoków i ponowne ich buforowanie.
Joe Niland

Odpowiedzi:

222

Apache

Czy ta odpowiedź opisuje lub pomaga w Twojej sytuacji? Aktualizacja do Apache 2.4 wiąże się z pewnymi zmianami w konfiguracji Apache.

Laravel

Czy sprawdzasz dzienniki Laravela lub dzienniki Apache?

Od czasu aktualizacji do Laravel 4.1, miałem "błędy" białego ekranu (WSOD), gdy aplikacja nie mogła zapisać w lokalizacji dziennika. Zawsze rozwiązywałem ten problem, udostępniając Apache'owi możliwość zapisu w katalogu aplikacji / pamięci (z możliwością zapisu przez grupę do „danych www”, „apache” lub z możliwością zapisu na całym świecie - to zależy od konfiguracji serwera).

Użytkownik serwera WWW

Na serwerach Ubuntu / Debian Twój PHP może działać jako „www-data” użytkownika. Na serwerach CentOS / RedHat / Fedora PHP może działać jako „apache” użytkownika.

Upewnij się, że Twoje pliki należą do użytkownika, który używa PHP:

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

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

Pamiętaj, że możesz nie działać jako dane www użytkownika lub apache. To zależy od Twojego hostingu i konfiguracji!

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+ (w tym 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
źródło
9
Wygląda na to, że był to problem z pozwoleniem. chmodding katalogu laravel sprawiło, że działało.
Mico
3
@fideloper Ta odpowiedź naprawdę uratowała mi dzień. Otrzymywałem WSOD i nic nie pojawiało się w logach. chmodding aplikacji / pamięci zajęło się tym. Oddaję Ci mój wirtualny kapelusz!
Tim Habersack
Tak, dziękuję za to, że naprawdę mnie tu uratował. Dostawałem X-pad: unikaj błędu przeglądarki w mojej odpowiedzi http i pomyślałem, że to jest to
Simon Bennett
4
Pozwolenie na przechowywanie folderu rozwiązało mój problem. Ale dlaczego laravel nie wyświetla problemu z uprawnieniami w przeglądarce?
Musa
4
To rozwiązało również problem dla mnie ... nigdy nie znalazłbym tego samodzielnie. Zgadzam się, że najlepiej byłoby, gdyby był wyświetlany jakiś komunikat o błędzie zamiast „białego ekranu śmierci”.
dusty909
65

Aktualizacja odpowiedzi programu Fideloper dla Laravel 5 i jego nowej struktury plików to:

$ sudo chmod -R o+w storage/
EddardOmeka
źródło
Sława! Rozwiązano mój problem z L5 na serwerze Ubuntu 14.04.
Dylan Pierce
U mnie też działało na Mac OS X 10.10.3
dave
Pracował dla mnie - CentOS 6.8 (finał)
Mike
26

Spróbuj tego na stronie public / index.php

error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set("display_errors", 1);
CG_DEV
źródło
To było właśnie to, czego potrzebowałem, ponieważ z jakiegoś powodu praca na serwerze (Plesk) nie rejestrowała niczego do dziennika błędów i nic do dziennika laravel, dodanie tego pokazało mi, że tak naprawdę był to brakujący plik, który powodował moje puste Ekran 500, wielkie dzięki!
Sam
Miałem też biały ekran i żadnych błędów. Wszystkie pozwolenia i wszystko było idealne. Ta odpowiedź pomogła mi faktycznie zobaczyć, co się dzieje. Dzięki.
SI
od wczoraj schrzanili ten problem. Poza uprawnieniami do folderów w moim przypadku to sprawdzenie zostało zgłoszone, że serwer nie rozpakował wszystkich folderów w folderze dostawcy!? Co za tajemnica ... Naprawdę dobre podejście Przydatne dla serwerów publicznych bez niskiego dostępu.
CodeToLife
26

Poniższe kroki rozwiązały problem z pustym białym ekranem na moim Laravel 5.

  • Przejdź do folderu głównego Laravel
  • Przyznaj uprawnienia do zapisu bootstrap/cachei storagekatalogom

sudo chmod -R 777 bootstrap / pamięć podręczna

  • Przemianować .env.example na.env
  • Wygeneruj klucz aplikacji za pomocą następującego polecenia w terminalu / wierszu polecenia z katalogu głównego Laravel:

klucz php artisan: generuj

Spowoduje to wygenerowanie klucza szyfrowania i zaktualizowanie wartości APP_KEYw.env pliku

To powinno rozwiązać problem.

Jeśli problem nadal występuje, zaktualizuj config/app.phpza pomocą nowego klucza wygenerowanego z powyższego polecenia generowania klucza rzemieślnika:

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

do

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

Mukesh Chapagain
źródło
10

dla każdego, kto otrzyma pustą stronę nawet po udostępnieniu pamięci masowej do wyświetlania błędów, umieść te dwie linie w pierwszych wierszach pliku public / index.php, aby przynajmniej zobaczyć, co się dzieje. dla mnie ten błąd tam był: Klasa 'PDO' nie została znaleziona w /var/www/***/config/database.php w linii 16

error_reporting(E_ALL);
ini_set('display_errors', 1);
Hassan Gilak
źródło
6

Kiedy byłem nowy w Linuksie, zwykle znajdowałem ten błąd w moim projekcie Laravel. Białe błędy oznaczają błąd, może mieć problem z pozwoleniem lub błąd.

Wystarczy wykonać dwa kroki i będzie działać jak mistrz :)

(1) Udziel pozwolenia. Uruchom te polecenie z katalogu głównego projektu

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

(2) Jeśli sklonowałeś projekt lub ściągnąłeś go z githuba, uruchom

composer install

(3) Skonfiguruj poprawnie plik .env, a projekt będzie działał.

Vikash
źródło
W mojej instalacji brakowało kroku (2). Sklonowałem projekt, myśląc, że ma wszystkie niezbędne pliki w katalogu, aby mógł działać po wyjęciu z pudełka. Nadal miałem kłopoty, ale to był kluczowy krok.
Jonathan Hickman
5

Miałem podobny problem na serwerze CentOS. Używanie php artisan serv i uzyskiwanie do niego dostępu przez port 8000 na komputerze lokalnym działało dobrze, ale nie można było zmusić moich zdalnych maszyn do załadowania określonego widoku. Mogłem w porządku zwrócić ciągi i ładowały się niektóre widoki. Przez chwilę goniłem za swoimi uprawnieniami, zanim w końcu zdałem sobie sprawę, że to problem SELinux. Po prostu ustawiłem to z egzekwowania na liberalne i zadziałało. Mam nadzieję, że pomoże to komuś innemu, który może napotkać ten sam problem.

setenforce permissive
Kamkat86
źródło
Pomogło mi to za każdym razem
Umair Hamid
5

Mam jeszcze jedną opcję, dlaczego może wystąpić problem z pustą stroną. Jeśli jesteś w trybie produkcyjnym i buforowałeś swoje pliki konfiguracyjne przez php artisan (config: cache), spróbuj usunąć plik pamięci podręcznej wykonując:

php artisan config:clear

lub usuń ręcznie (bootstrap / cache / config.php)

Boris Tetřev
źródło
1
Próbowałem wszystkiego innego i to jest ostatnia rzecz, która zadziałała.
DavidHyogo
Okazuje się, że mój plik env był nieprawidłowy. Uruchom to polecenie, daj mi znać.
SvEnjoyPro
4

Uruchomienie tego polecenia rozwiązało to za mnie:

php artisan view:clear

Wydaje mi się, że pusta strona błędu była w jakiś sposób buforowana. Musiałem wyczyścić pamięci podręczne.

Andrzej
źródło
4

W moim przypadku instalowałem laravelwiele razy i jestem pewien, że uprawnienia do zapisu folderu zostały udzielone poprawnie.

Podobnie jak większość odpowiedzi powyżej:

sudo chmod 777 -R storage bootstrap

Błąd polega na tym, że moja konfiguracja nginx pochodzi z oficjalnej dokumentacji .

Zmodyfikowałem nazwę domeny dopiero po skopiowaniu ,, po czym pojawiła się pusta strona. Próbowałem ponownie uruchomić nginxi php-fpm, ale nie działa dla mnie.

Na koniec dodałem tę konfigurację linii, aby rozwiązać problem.

location ~ \.php$ {

    # same as documentation ...

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Mam nadzieję, że mogę pomóc innym.

qskane
źródło
1
Straciłem cały dzień wolny od tego problemu. To odpowiedź, która w końcu mnie uratowała. Żałuję, że nie mogę dać ci więcej niż pozytywnego głosu. Dziękuję Ci!
Miles
3

W obliczu pustego ekranu w Laravel 5.8. Wydaje się, że wszystko jest w porządku zarówno z folderem przechowywania, jak i folderem bootstrap z 777 prawami. Na

php artisan cache:clear

Pokazuje problem, że były to białe spacje w nazwie aplikacji pliku .env

saad
źródło
1

Mam pewne problemy z konfiguracją w maszynie Vagrant. To, co naprawdę działa dla mnie, to wykonanie:

chmod -R o+w app/storage/

z wnętrza maszyny Vagrant.

Źródła: https://laracasts.com/lessons/vagrant-and-laravel

gvsrepins
źródło
1

Inną rzeczą, która może spowodować, że WSOD nie ma słowa kluczowego `` return '', na przykład:

return View::make('yourview');

w przeciwieństwie do

View::make('yourview');

emragins
źródło
1

Czasami dzieje się tak dlatego, że Laravel 5.1 wymaga PHP> = 5.5.9. Aktualizacja php rozwiąże problem.

Kevin
źródło
1

Dziwne dla mnie, ale w moim przypadku musiałem wyczyścić pamięć podręczną laravela, aby rozwiązać problem.

antongorodezkiy
źródło
1

Po wykonaniu tej czynności napotkałem ten sam problem composer update

Próbowałem zainstalować composer required monolog/monolog też ale nie zadziałało.

Następnie usunąłem katalog / vendor, uruchomiłem composer installi działałem normalnie.

w zasadzie musiało przywrócić poprzednią wersję mojego monologu i innych stabilnych pakietów. więc lepiej tego nie robićcomposer update

co zauważyłem porównując oba foldery / vendor i stwierdziłem, że te classespliki /vendor/monolog/monolog/src/Handlerzniknęły po aktualizacji kompozytora.

Amit Shah
źródło
1

Pusty ekran bez błędów może mieć wiele przyczyn. Wielokrotnie napotykałem ten problem, gdy chcę przesłać projekt laravel na współdzielony hosting.

Przyczyna: nieprawidłowa wersja PHP

W moim przypadku problem wynikał z nieprawidłowej wersji php. Miałem wersję php 7.1 na lokalnym komputerze, gdzie podobnie jak w cpanelu hostingu współdzielonego była wersja php 5.6. Zmiana wersji z 5.6 na 7.1 działała dla mnie.

Możesz zmienić wersję php w cpanel z menedżera multiphp dostępnego na stronie głównej cpanel.

Sagar Gautam
źródło
1

Czasami w route.php możesz mieć

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

napisane wcześniej

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

Może to być pusta metoda, Controller::show()gdy zaczynasz tworzyć kontroler od zera. W takim przypadku podczas żądania adresu /addURL otrzymasz pustą, pustą stronę . Dzieje się tak, ponieważ żądanie zostało obsłużone przez/{id} trasę, a jej metoda nic nie zwraca.

Po prostu spróbuj /addwcześniej wytyczyć trasę/{id}

Илья Алисов
źródło
0

Innym problemem z tym samym zachowaniem jest użycie Laravel 3 z PHP 5.5.x. Musisz zmienić nazwę funkcji programu laravel „yield (), ponieważ jest to słowo zastrzeżone w php 5.5

Hernan
źródło
0

Przyczyną może być Middlewareto, że zapomnisz wstawić następujący kod na końcu handlefunkcji

return $next($request);
Farid Movsumov
źródło
0

Pojawiał się również ten sam błąd, kiedy po raz pierwszy uruchamiam laravel + Ubuntu 14.04 Po prostu klikam prawym przyciskiem myszy na folder bootstrap i magazyn >>> właściwości >>> uprawnienia >> Inne dostęp >>> zmień to na "Tworzenie i usuwanie plików" Zmień zezwolenie na załączone pliki

Dziękuję Ci

user1846871
źródło
0

Mam to z forów Laravel, ale jeśli niedawno zaktualizowałeś wersje Laravela ORAZ wersje PHP ORAZ korzystasz z nginx, upewnij się, że zmieniłeś plik konfiguracyjny nginx, aby odzwierciedlał nową wersję PHP. Na przykład:

W pliku konfiguracyjnym witryny nginx (tutaj: / etc / nginx / sites-available) zmień

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

do

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

Ben Wilson
źródło
0

Mam ten sam problem. Już zmieniłem folder chmod na folder przechowywania. wypełnić ustawienia bazy danych w .env, ale nie rozwiązało problemu. Użyłem Laravela 5.5 i PHP 5.6, aby to naprawić, przeszedłem do (cpanel-> PHP Selector) i przeszedłem na PHP 7.1 I sprawa jest załatwiona.

Abed Putra
źródło
0

W normalnych przypadkach błędy powinny być rejestrowane, chyba że

Skrypt nie może zapisać do pliku dziennika

  • sprawdź ścieżkę
  • uprawnienia

Lub wystąpił błąd w dziennikach serwera aplikacji wyższego poziomu, takich jak Appache || Nginx

Lub to limity zasobów Jak ustawienia ini PHP

memory_limit
max_input_time
max_execution_time

Lub limity systemu operacyjnego i tak dalej

Bdwey
źródło
0

Oprócz problemów z uprawnieniami w folderze przechowywania i pamięci podręcznej oraz problemów z wersją php, mogą istnieć inne powody wyświetlania pustej strony bez żadnego komunikatu o błędzie.

Na przykład otrzymałem komunikat o błędzie redeclare bez żadnego dziennika iz pustą białą stroną. Wystąpił konflikt między moją funkcją pomocniczą a funkcją sprzedawcy.

Proponuję jako punkt wyjścia uruchomić artisanpolecenia. na przykład:

php artisan cache:clear

Jeśli wystąpił problem, pojawi się monit w terminalu i masz wskazówkę i możesz wyszukać w Google rozwiązanie.

Khalil Laleh
źródło
0

Pusty ekran występuje również, gdy aplikacja Laravel próbuje wyświetlić zbyt dużo informacji i pojawiają się limity PHP (na przykład wyświetlanie dziesiątek tysięcy rekordów bazy danych na jednej stronie). Najgorsze jest to, że w logach Laravela nie zobaczysz żadnych błędów. Prawdopodobnie nie zobaczysz również żadnych błędów w dziennikach PHP FPM. Możesz znaleźć błędy w dziennikach serwera http, na przykład nginx zgłasza coś takiego jakFastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of XXX bytes exhausted .

Krótka wskazówka: dodaj, ->limit(1000)gdzie 1000jest twój limit, w obiekcie zapytania.

f055
źródło
0

Napotkałem ten problem, kiedy próbowałem uruchomić aplikację Laravel 5.8 na moim serwerze, przesyłając z lokalnego rozwoju za pomocą Vagrant Homestead. Po chwili zorientowałem się, że subdomena dev na serwerze live, na którym pracowałem, była w jakiś sposób ustawiona na PHP 5.6.

cPanel> MultiPHP Manager> Ustaw na PHP 7.2

naprawiłem to dla mnie. Mam nadzieję, że to może komuś pomóc.

Inigo
źródło
0

użyj tego .htaccess do rozwiązania

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
źródło
0

w moim przypadku problem z PUSTYM BIAŁYM EKRANEM był tak prosty, jak literówka lub zły znak w pliku env. Wdrażałem Socialite, więc kiedy konfigurowałem dane logowania .env dla Google+ w następujący sposób:

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

Ale plik .env nie może używać znaku „+”, więc muszę wprowadzić tę korektę:

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

Mam nadzieję, że pomoże ci to znaleźć głupi błąd ...

Absolutkarlos
źródło
-2

W moim przypadku ponowne uruchomienie Apache rozwiązało problem. dla Ubuntu / Debian:

sudo service apache2 restart
Khairulnizam Dahari
źródło