Layar putih kosong Laravel

117

Situs laravel saya berfungsi sebelumnya, saya baru saja meningkatkan ke Apache 2.4 dan PHP 5.5.7.

Sekarang saya mendapatkan layar kosong putih ketika saya pergi ke laravel.mydomain.com, tidak ada apa pun di log kesalahan apache, rute, dan lain-lain yang seharusnya baik-baik saja seperti sebelumnya.

.htaccess sedang dimuat karena saya mendapatkan 500 ketika saya memasukkan baris yang tidak valid ke /var/sites/laravel/public/.htaccess.

Berikut ini .htaccess saya:

$ 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]

Inilah arahan host virtual saya:

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>

Dan 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
sumber
coba dan letakkan instalasi baru Laravel kosong di laravel.mydomain.com - apakah itu berfungsi?
Laurence
HMM, saya mencoba membuat proyek dengan komposer dan saya tampak kehilangan openssl. Apakah ada cara mudah untuk menambahkannya setelahnya atau apakah saya perlu mengkompilasi ulang PHP saya dengan opsi konfigurasi saat ini + --with-openssl?
Mico
1
Saya mengalami masalah layar kosong ini saat memindahkan proyek yang sudah bekerja ke server pementasan. Saya tidak mendapatkan apa-apa dengan itu lalu saya memutuskan untuk melakukan hal yang sama seperti saran @ the-shift-exchange dan membuat instalasi baru Laravel, kemudian saya menemukan masalahnya dengan cukup cepat; server pementasan menjalankan versi PHP yang sudah ketinggalan zaman. Laravel membutuhkan setidaknya PHP v5.4.0. Kupikir aku akan menyebutkannya jika ada orang lain yang memiliki masalah yang sama.
igneosaur
Periksa batas memori tidak tercapai - ini telah menyebabkan WSOD untuk saya sebelumnya di Laravel 4
Smith
Hanya titik data lain - Saya menemukan ini pada aplikasi yang diterapkan ke Kubernetes, menggunakan NFS untuk memasang file web. Karena kinerja NFS yang sangat lambat, tampaknya Laravel gagal men-cache view dalam waktu yang wajar. PHP-FPM mengembalikan respons kosong. Diperbaiki dengan secara manual menghapus semua tampilan dan melakukan cache ulang.
Joe Niland

Jawaban:

222

Apache

Apakah jawaban ini menjelaskan atau membantu situasi Anda? Mengupgrade ke Apache 2.4 disertai dengan beberapa perubahan dalam konfigurasi Apache.

Laravel

Apakah Anda memeriksa log Laravel atau log Apache?

Sejak memutakhirkan ke Laravel 4.1, saya mengalami "kesalahan" layar putih (WSOD) ketika aplikasi tidak dapat menulis ke lokasi log. Saya selalu menyelesaikan ini dengan membuat direktori app / storage dapat ditulis oleh Apache (baik grup dapat ditulis ke "www-data", "apache" atau world-writable - itu tergantung pada penyiapan server Anda.

Pengguna Server Web

Di server Ubuntu / Debian, PHP Anda mungkin dijalankan sebagai pengguna "www-data". Pada server CentOS / RedHat / Fedora, PHP Anda mungkin dijalankan sebagai pengguna "apache".

Pastikan file Anda dimiliki oleh pengguna yang menjalankan PHP:

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

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

Perhatikan bahwa Anda mungkin tidak menjalankan sebagai www-data atau apache. Itu tergantung pada hosting dan penyiapan Anda!

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+ (termasuk 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
sumber
9
Sepertinya itu masalah izin. chmodding direktori laravel membuatnya berfungsi.
Mico
3
@fideloper Jawaban ini benar-benar menyelamatkan hari saya. Mendapatkan WSOD, dan tidak ada yang muncul di log di mana pun. chmodding aplikasi / penyimpanan mengurusnya. Saya memberikan topi virtual saya kepada Anda!
Tim Habersack
Ya terima kasih untuk ini benar-benar menyelamatkan saya di sini. Saya mendapatkan X-pad: hindari bug browser di tanggapan http saya dan saya pikir itu
Simon Bennett
4
Izin pada folder penyimpanan memecahkan masalah saya seperti itu. Tetapi mengapa laravel tidak menunjukkan masalah izin di browser?
Musa
4
Ini memperbaiki masalah saya juga .... tidak akan pernah menemukan ini sendirian. Saya setuju akan lebih baik jika ada semacam pesan kesalahan yang ditampilkan daripada "layar putih kematian".
dusty909
65

Pembaruan untuk jawaban fideloper untuk Laravel 5 dan struktur file barunya adalah:

$ sudo chmod -R o+w storage/
EddardOmeka
sumber
Pujian! Memecahkan masalah saya untuk L5 di server ubuntu 14.04.
Dylan Pierce
Bekerja untuk saya juga, di Mac OS X 10.10.3
dave
Bekerja untuk saya - CentOS 6.8 (Final)
Mike
26

Coba ini, di halaman public / index.php

error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set("display_errors", 1);
CG_DEV
sumber
Ini sebenarnya yang saya butuhkan karena untuk beberapa alasan pada pekerjaan server memiliki (Plesk) itu tidak mencatat apa pun ke log kesalahan dan tidak ada apa pun ke log laravel, menambahkan ini menunjukkan kepada saya bahwa itu sebenarnya file yang hilang yang menyebabkan saya kosong 500 layar, terima kasih banyak!
Sam
Saya juga memiliki layar putih dan tidak ada kesalahan sama sekali. Semua izin dan semuanya sempurna. Jawaban ini membantu saya untuk benar-benar melihat apa yang sedang terjadi. Terima kasih.
SI
telah mengacaukan masalah ini sejak kemarin. Di luar izin folder dalam kasus saya, pemeriksaan ini dilaporkan bahwa server belum mengekstrak semua folder di dalam folder vendor!? Sungguh misteri .... Benar-benar pendekatan yang baik. Berguna untuk server publik tanpa akses rendah.
CodeToLife
26

Langkah-langkah berikut memecahkan masalah layar putih kosong di Laravel 5 saya.

  • Buka folder root Laravel Anda
  • Berikan izin menulis ke direktori bootstrap/cachedanstorage

sudo chmod -R 777 bootstrap / penyimpanan cache

  • Ganti nama .env.examplemenjadi.env
  • Hasilkan kunci aplikasi dengan perintah berikut di terminal / command-prompt dari Laravel root:

kunci tukang php: menghasilkan

Ini akan menghasilkan kunci enkripsi dan memperbarui nilai file APP_KEYdalam.env

Ini seharusnya menyelesaikan masalah.

Jika masalah masih ada, perbarui config/app.phpdengan kunci baru yang dihasilkan dari perintah menghasilkan kunci artisan di atas:

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

untuk

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

Mukesh Chapagain
sumber
10

bagi siapa saja yang mendapatkan halaman kosong bahkan setelah membuat penyimpanan dapat diakses untuk menampilkan kesalahan, letakkan dua baris ini di baris pertama public / index.php untuk melihat apa yang terjadi setidaknya. bagi saya kesalahan ini ada di sana: Kelas 'PDO' tidak ditemukan di /var/www/***/config/database.php di baris 16

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

Ketika saya baru mengenal Linux, saya biasanya menemukan kesalahan ini dengan Proyek Laravel saya. Kesalahan putih berarti kesalahan, Mungkin ada beberapa masalah izin atau kesalahan.

Anda hanya perlu mengikuti dua langkah, dan akan bekerja seperti juara :)

(1) Beri izin. Jalankan perintah ini dari direktori root proyek Anda

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

(2) Jika Anda mengkloning proyek atau menarik dari github lalu jalankan

composer install

(3) Konfigurasikan file .env Anda dengan benar, dan proyek Anda akan berfungsi.

Vikash
sumber
Langkah (2) hilang dari instalasi saya. Saya telah mengkloning proyek dengan mengira proyek itu memiliki semua file yang diperlukan dalam direktori agar dapat bekerja di luar kotak. Saya masih mengalami kesulitan, tetapi ini adalah langkah penting.
Jonathan Hickman
5

Saya berjuang dengan masalah serupa di server CentOS. Menggunakan php artisan serv dan mengaksesnya melalui port 8000 pada mesin lokal bekerja dengan baik tetapi tidak dapat membuat mesin remote saya memuat tampilan tertentu. Saya bisa mengembalikan string dengan baik, dan beberapa tampilan sedang dimuat. Mengejar izin saya untuk beberapa saat sebelum akhirnya saya menyadari bahwa itu adalah masalah SELinux. Saya hanya mengaturnya dari menegakkan menjadi permisif dan berhasil. Harapan yang membantu orang lain di luar sana yang mungkin mengalami masalah yang sama.

setenforce permissive
Kamkat86
sumber
Ini membantu saya setiap saat
Umair Hamid
5

Saya juga memiliki satu opsi lagi mengapa masalah halaman kosong dapat terjadi. Jika Anda dalam mode produksi dan jika Anda menyimpan file konfigurasi Anda dengan php artisan (config: cache), coba hapus file cache yang menjalankan:

php artisan config:clear

atau hapus secara manual (bootstrap / cache / config.php)

Boris Tetřev
sumber
1
Saya mencoba yang lainnya dan ini adalah hal terakhir yang berhasil untuk saya.
DavidHyogo
Ternyata file env saya tidak valid, menjalankan perintah ini beri tahu saya.
SvEnjoyPro
4

Menjalankan perintah ini menyelesaikannya untuk saya:

php artisan view:clear

Saya kira halaman kesalahan kosong adalah beberapa cara cache. Harus menghapus cache.

Andrew
sumber
4

Dalam kasus saya, saya telah menginstal laravelberkali-kali, dan saya yakin bahwa izin menulis folder telah diberikan dengan benar.

Seperti kebanyakan jawaban di atas:

sudo chmod 777 -R storage bootstrap

Kesalahannya adalah konfigurasi nginx saya berasal dari dokumentasi resmi .

Saya hanya mengubah nama domain setelah menyalin, lalu saya mendapat halaman kosong. Saya mencoba memulai ulang nginxdan php-fpm, tetapi tidak berhasil untuk saya.

Akhirnya, saya menambahkan konfigurasi baris ini untuk menyelesaikan masalah.

location ~ \.php$ {

    # same as documentation ...

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Saya harap saya bisa membantu orang lain.

qskane
sumber
1
Saya kehilangan satu hari penuh untuk masalah ini. Inilah jawaban yang akhirnya menyelamatkan saya. Saya berharap bisa memberi Anda lebih dari sekadar suara positif. Terima kasih!
Miles
3

Menghadapi layar kosong di Laravel 5.8. Semuanya tampak baik-baik saja dengan penyimpanan dan folder bootstrap yang diberi 777 hak. Di

php artisan cache:clear

Ini menunjukkan masalah itu adalah Ruang Putih di Nama Aplikasi dari file .env

saad
sumber
1

Saya memiliki beberapa masalah untuk memasangnya di mesin Vagrant. Yang benar-benar berhasil bagi saya adalah mengeksekusi:

chmod -R o+w app/storage/

dari dalam mesin gelandangan.

Referensi: https://laracasts.com/lessons/vagrant-and-laravel

gvsrepins
sumber
1

Hal lain yang dapat menyebabkan WSOD kehilangan kata kunci 'kembali', seperti:

return View::make('yourview');

sebagai lawan

View::make('yourview');

emragins
sumber
1

Terkadang karena laravel 5.1 membutuhkan PHP> = 5.5.9. Perbarui php akan menyelesaikan masalah.

Kevin
sumber
1

Aneh bagi saya, tetapi dalam kasus saya, saya harus menghapus cache laravel untuk menyelesaikan masalah.

antongorodezkiy
sumber
1

Saya juga menghadapi masalah yang sama setelah melakukannya composer update

Saya mencoba menginstal composer required monolog/monologjuga tetapi tidak berhasil.

Kemudian saya menghapus direktori / vendor dan menjalankan composer installdan bekerja seperti biasa.

pada dasarnya itu pasti telah mengembalikan monolog saya dan versi paket stabil lainnya kembali ke sebelumnya. jadi lebih baik tidakcomposer update

apa yang saya perhatikan membandingkan kedua folder / vendor dan menemukan classesfile - file di bawah /vendor/monolog/monolog/src/Handlerhilang setelah komposer diperbarui.

Amit Shah
sumber
1

Mungkin ada banyak alasan di balik layar kosong tanpa kesalahan. Saya telah menghadapi masalah ini berkali-kali setiap kali saya ingin mengunggah proyek laravel di shared hosting.

Alasan: Versi PHP Salah

Dalam kasus saya, masalahnya adalah karena versi php yang salah. Saya punya versi php 7.1 di komputer lokal sedangkan di shared hosting cpanel ada versi php 5.6. Mengganti versi dari 5.6 ke 7.1 berhasil untuk saya.

Anda dapat mengubah versi php di cpanel dari multiphp manager yang tersedia di halaman muka cpanel.

Sagar Gautam
sumber
1

Terkadang di route.php yang mungkin Anda miliki

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

ditulis sebelumnya

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

Ini bisa menjadi metode kosong Controller::show()ketika Anda mulai mengembangkan pengontrol Anda dari awal. Dalam hal ini Anda akan mendapatkan halaman kosong kosong saat meminta /addurl. Itu terjadi karena permintaan ditangani oleh /{id}rute, dan metodenya tidak mengembalikan apa-apa.

Coba saja tempatkan /addrute sebelumnya/{id}

Илья Алисов
sumber
0

Masalah lain dengan perilaku yang sama adalah menggunakan Laravel 3 dengan PHP 5.5.x. Anda harus mengubah beberapa nama fungsi laravel "yield () karena merupakan kata yang sudah dipesan di php 5.5

Hernan
sumber
0

Alasannya bisa Middlewarejika Anda lupa meletakkan kode berikut di akhir handlefungsi

return $next($request);
Farid Movsumov
sumber
0

Saya juga mendapatkan kesalahan yang sama ketika saya memulai pertama kali di laravel + Ubuntu 14.04 Saya cukup klik kanan pada bootstrap dan folder penyimpanan >>> properti >>> izin >> Akses Orang Lain >>> ubah ke "Buat dan hapus file" Ubah izin untuk file tertutup

Terima kasih

pengguna1846871
sumber
0

Dapatkan ini dari forum Laravel, tetapi jika Anda baru saja meningkatkan versi Laravel DAN versi PHP DAN menjalankan nginx, pastikan Anda telah mengubah file konfigurasi nginx Anda untuk mencerminkan versi PHP yang baru. Misalnya:

Di file konfigurasi situs nginx Anda (di sini: / etc / nginx / sites-available), ubah

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

untuk

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

Ben Wilson
sumber
0

Saya memiliki masalah yang sama. Saya sudah mengubah folder chmod untuk folder Storage. mengisi pengaturan database di .env, tetapi tidak memperbaiki masalah. Saya menggunakan Laravel 5.5 dan saya menggunakan PHP 5.6, untuk memperbaikinya saya pergi ke (cpanel-> PHP Selector) dan saya mengubah ke PHP 7.1 Dan masalah selesai.

Abed Putra
sumber
0

Pada kasus normal, kesalahan harus dicatat kecuali

Skrip tidak dapat menulis ke file log

  • periksa jalurnya
  • izin

Atau kesalahan terjadi pada log server aplikasi pemeriksaan tingkat yang lebih tinggi seperti Appache || Nginx

Atau itu batasan sumber daya Seperti pengaturan ini PHP

memory_limit
max_input_time
max_execution_time

Atau batas OS dan sebagainya

Bdwey
sumber
0

Selain masalah Izin dalam penyimpanan dan folder cache dan masalah versi php, mungkin ada alasan lain untuk menampilkan halaman kosong tanpa pesan kesalahan.

Misalnya, saya mendapat pesan kesalahan deklarasikan ulang tanpa log apa pun dan dengan halaman putih kosong. Ada konflik antara fungsi pembantu saya sendiri dan fungsi vendor.

Saya sarankan sebagai titik awal , jalankan artisanperintah. sebagai contoh:

php artisan cache:clear

Jika ada masalah, itu akan diminta di terminal dan Anda punya Petunjuk dan Anda dapat mencari solusinya di Google.

Khalil Laleh
sumber
0

Layar kosong juga terjadi ketika aplikasi Laravel Anda mencoba menampilkan terlalu banyak informasi dan batasan PHP mulai berlaku (misalnya menampilkan puluhan ribu rekaman database pada satu halaman). Bagian terburuknya adalah, Anda tidak akan melihat kesalahan apa pun di log Laravel. Anda mungkin tidak akan melihat kesalahan apa pun di log PHP FPM juga. Anda mungkin menemukan kesalahan di log server http Anda, misalnya nginx melempar sesuatu sepertiFastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of XXX bytes exhausted .

Tip singkat: tambahkan di ->limit(1000)mana 1000batas Anda, pada objek kueri Anda.

f055
sumber
0

Saya mengalami masalah ini ketika saya mencoba menjalankan aplikasi Laravel 5.8 di server saya, mengunggah dari pengembangan lokal menggunakan Vagrant Homestead. Setelah beberapa saat saya menemukan bahwa subdomain dev di server langsung yang saya jalankan entah bagaimana diatur ke PHP 5.6.

cPanel> MultiPHP Manager> Setel ke PHP 7.2

perbaiki ini untukku. Semoga ini bisa membantu seseorang.

Inigo
sumber
0

gunakan .htaccess ini untuk menyelesaikannya

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
sumber
0

dalam kasus saya, masalah LAYAR KOSONG PUTIH sesederhana kesalahan ketik atau karakter yang salah pada file env. Saya menerapkan sosialita, jadi ketika saya menyiapkan kredensial .env untuk Google+ seperti ini:

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

Namun, file .env tidak dapat menggunakan tanda '+', jadi saya harus melakukan koreksi ini:

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

Saya harap ini membantu Anda menemukan kesalahan bodoh ...

Absolutkarlos
sumber
-2

Dalam kasus saya, memulai ulang apache memperbaiki masalah. untuk Ubuntu / Debian:

sudo service apache2 restart
Khairulnizam Dahari
sumber