Màn hình trắng trống Laravel


117

Trang web laravel của tôi đã hoạt động trước đây, gần đây tôi đã nâng cấp lên Apache 2.4 và PHP 5.5.7.

Bây giờ tôi nhận được một màn hình trống màu trắng khi tôi truy cập laravel.mydomain.com, không có gì trong nhật ký lỗi apache, các tuyến đường, v.v. sẽ ổn như trước đây.

.htaccess đang tải vì tôi nhận được 500 khi tôi chèn một dòng không hợp lệ vào /var/sites/laravel/public/.htaccess.

Đây là .htaccess của tôi:

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

Đây là chỉ thị máy chủ ảo của tôi:

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>

Và 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

thử và đặt một bản cài đặt mới trống của Laravel trong laravel.mydomain.com - sau đó nó có hoạt động không?
Laurence

HMM, tôi đã cố gắng tạo dự án với nhà soạn nhạc và tôi dường như thiếu openssl. Có cách nào dễ dàng để thêm nó sau đó không hoặc tôi có cần phải biên dịch lại PHP của mình với các tùy chọn cấu hình hiện tại + --with-openssl không?
Mico

1
Tôi gặp sự cố màn hình trống này khi di chuyển một dự án đang hoạt động lên máy chủ dàn. Tôi không đi đến đâu với nó, sau đó tôi quyết định làm giống như đề xuất của @ the-shift-exchange và tạo một bản cài đặt mới của Laravel, sau đó tôi phát hiện ra vấn đề khá nhanh chóng; máy chủ dàn đang chạy phiên bản PHP lỗi thời. Laravel yêu cầu ít nhất PHP v5.4.0. Tôi nghĩ rằng tôi sẽ đề cập đến nó nếu bất kỳ ai khác gặp rắc rối tương tự.
igneosaur

Kiểm tra giới hạn bộ nhớ không bị đánh - điều này đã gây ra WSOD cho tôi trước đây trong Laravel 4
Smith

Chỉ là một điểm dữ liệu khác - tôi nhấn điểm này trên một ứng dụng được triển khai cho Kubernetes, sử dụng NFS để gắn kết các tệp web. Do hiệu suất NFS rất chậm, có vẻ như Laravel đã không thể lưu vào bộ nhớ cache các chế độ xem trong một khoảng thời gian hợp lý. PHP-FPM trả về một phản hồi trống. Đã khắc phục bằng cách xóa thủ công tất cả các chế độ xem và lưu vào bộ nhớ đệm chúng.
Joe Niland

Câu trả lời:


222

Apache

Liệu câu trả lời này mô tả hoặc giúp tình hình của bạn? Nâng cấp lên Apache 2.4 đi kèm với một số thay đổi trong cấu hình Apache.

Laravel

Bạn đang kiểm tra nhật ký của Laravel hay nhật ký của Apache?

Kể từ khi nâng cấp lên Laravel 4.1, tôi đã gặp "lỗi" màn hình trắng (WSOD) khi ứng dụng không thể ghi vào vị trí nhật ký. Tôi đã luôn giải quyết vấn đề này bằng cách làm cho thư mục ứng dụng / lưu trữ có thể ghi được bởi Apache (có thể ghi nhóm thành "www-data", "apache" hoặc world-write - điều đó phụ thuộc vào thiết lập máy chủ của bạn.

Người dùng máy chủ web

Trên máy chủ Ubuntu / Debian, PHP của bạn có thể đang chạy dưới dạng người dùng "www-data". Trên máy chủ CentOS / RedHat / Fedora, PHP của bạn có thể đang chạy với tư cách người dùng "apache".

Đảm bảo rằng các tệp của bạn thuộc sở hữu của người dùng đang chạy PHP:

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

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

Lưu ý rằng bạn có thể không chạy với tư cách người dùng www-data hoặc apache. Nó phụ thuộc vào lưu trữ và thiết lập của bạn!

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+ (bao gồm 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
Có vẻ như đó là một vấn đề về quyền. chmodding thư mục laravel đã làm cho nó hoạt động.
Mico

3
@fideloper Câu trả lời này thực sự đã cứu một ngày của tôi. Đang nhận được WSOD và không có gì hiển thị trong nhật ký ở bất kỳ đâu. chmodding ứng dụng / bộ nhớ đã chăm sóc nó. Tôi ngả mũ trước bạn!
Tim Habersack

Vâng, cảm ơn vì điều này đã thực sự cứu tôi ở đây. Tôi đã nhận được một X-pad: tránh trình duyệt lỗi trong phản ứng http tôi và tôi nghĩ rằng nó là
Simon Bennett

4
Quyền trên thư mục lưu trữ đã giải quyết được vấn đề như vậy của tôi. Nhưng tại sao laravel không hiển thị sự cố quyền trên trình duyệt?
Musa

4
Điều này đã khắc phục sự cố cho tôi .... tôi sẽ không bao giờ tìm thấy điều này một mình. Tôi đồng ý rằng sẽ là tốt nhất nếu có một số loại thông báo lỗi hiển thị hơn là "màn hình trắng chết chóc".
đầy bụi 909

65

Bản cập nhật cho câu trả lời của fideloper cho Laravel 5 và cấu trúc tệp mới của nó là:

$ sudo chmod -R o+w storage/

Thanh danh! Đã khắc phục sự cố của tôi cho L5 trên máy chủ ubuntu 14.04.
Dylan Pierce

Làm việc cho tôi là tốt, trên Mac OS X 10.10.3
dave

Làm việc cho tôi - CentOS 6.8 (Cuối cùng)
Mike

26

Hãy thử điều này, trong trang public / index.php

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

Đây thực sự là những gì tôi cần vì vì một số lý do trên máy chủ làm việc (Plesk) nó không ghi bất kỳ thứ gì vào nhật ký lỗi và không có gì vào nhật ký laravel, thêm điều này cho tôi thấy rằng đó thực sự là một tệp bị thiếu gây ra lỗi trống của tôi. Màn hình 500, cảm ơn rất nhiều!
Sam

Tôi cũng có màn hình trắng và không có lỗi nào cả. Mọi sự cho phép và mọi thứ đều hoàn hảo. Câu trả lời này đã giúp tôi thực sự nhìn thấy những gì đang xảy ra. Cảm ơn.
SI

đã lộn xộn với vấn đề này kể từ ngày hôm qua. Ngoài quyền của các thư mục trong trường hợp của tôi, lần kiểm tra này được báo cáo rằng máy chủ chưa giải nén tất cả các thư mục bên trong thư mục của nhà cung cấp !? Thật là một bí ẩn .... Thực sự là một cách tiếp cận tốt. Hữu ích cho các máy chủ công cộng mà không có truy cập thấp.
CodeToLife

26

Các bước sau đã giải quyết vấn đề màn hình trắng trống trên Laravel 5 của tôi.

  • Chuyển đến thư mục gốc Laravel của bạn
  • Cấp quyền ghi bootstrap/cachevà các storagethư mục

sudo chmod -R 777 bootstrap / bộ nhớ đệm lưu trữ

  • Đổi tên .env.examplethành.env
  • Tạo khóa ứng dụng bằng lệnh sau trong terminal / command-prompt từ gốc Laravel:

khóa nghệ nhân php: tạo

Điều này sẽ tạo ra các khóa mã hóa và cập nhật giá trị của APP_KEYtrong .envtập tin

Điều này sẽ giải quyết vấn đề.

Nếu sự cố vẫn tồn tại, hãy cập nhật config/app.phpbằng khóa mới được tạo từ lệnh tạo khóa thủ công ở trên:

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

đến

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


10

đối với bất kỳ ai nhận được trang trống ngay cả sau khi có thể truy cập bộ nhớ để hiển thị lỗi, hãy đặt hai dòng này ở dòng đầu tiên của public / index.php để xem ít nhất điều gì đang xảy ra. đối với tôi lỗi này đã xảy ra: Không tìm thấy lớp 'PDO' trong /var/www/***/config/database.php trên dòng 16

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

6

Khi tôi mới làm quen với Linux, tôi thường thấy lỗi này với Dự án Laravel của mình. Lỗi màu trắng có nghĩa là lỗi, Nó có thể có một số vấn đề về quyền hoặc lỗi.

Bạn chỉ cần làm theo hai bước và sẽ hoạt động như nhà vô địch :)

(1) Cho phép. Chạy lệnh này từ thư mục gốc của dự án của bạn

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

(2) Nếu bạn nhân bản dự án hoặc kéo từ github thì hãy chạy

composer install

(3) Định cấu hình tệp .env của bạn đúng cách và dự án của bạn sẽ hoạt động.


Bước (2) bị thiếu trong cài đặt của tôi. Tôi đã nhân bản dự án vì nghĩ rằng nó có tất cả các tệp cần thiết trong thư mục để nó hoạt động hiệu quả. Tôi vẫn gặp khó khăn, nhưng đây là một bước quan trọng.
Jonathan Hickman

5

Tôi đang gặp sự cố tương tự trên máy chủ CentOS. Sử dụng dịch vụ của php Artian và truy cập nó qua cổng 8000 trên máy cục bộ hoạt động tốt nhưng không thể khiến các máy từ xa của tôi tải một chế độ xem cụ thể. Tôi có thể trả lại các chuỗi tốt và một số chế độ xem đang tải. Đuổi theo quyền của tôi trong một thời gian trước khi cuối cùng tôi nhận ra đó là vấn đề của SELinux. Tôi vừa đặt nó từ thực thi thành cho phép và nó đã hoạt động. Hy vọng điều đó sẽ giúp những người khác có thể gặp phải vấn đề tương tự.

setenforce permissive

Điều này đã giúp tôi mỗi khi
Umair Hamid

5

Tôi cũng có một tùy chọn nữa tại sao vấn đề trang trống có thể xảy ra. Nếu bạn đang ở chế độ sản xuất và nếu bạn đã lưu vào bộ đệm các tệp cấu hình của mình bằng php artist (config: cache), hãy thử xóa tệp bộ đệm đang thực thi:

php artisan config:clear

hoặc xóa thủ công (bootstrap / cache / config.php)


1
Tôi đã thử mọi thứ khác và đây là điều cuối cùng hiệu quả với tôi.
DavidHyogo

Hóa ra tệp env của tôi không hợp lệ, chạy lệnh này cho tôi biết.
SvEnjoyPro

4

Chạy lệnh này đã giải quyết cho tôi:

php artisan view:clear

Tôi đoán một trang lỗi trống là một số cách được lưu vào bộ nhớ cache. Đã phải xóa bộ nhớ đệm.


4

Trong trường hợp của tôi, tôi đã cài đặt laravelnhiều lần và tôi chắc chắn rằng quyền ghi thư mục đã được cấp chính xác.

Giống như hầu hết các câu trả lời ở trên:

sudo chmod 777 -R storage bootstrap

Sai lầm là cấu hình nginx của tôi đến từ tài liệu chính thức .

Tôi chỉ sửa đổi tên miền sau khi sao chép , thì tôi nhận được một trang trống. Tôi đã cố gắng khởi động lại nginxphp-fpm, nhưng không làm việc cho tôi.

Cuối cùng, tôi đã thêm cấu hình dòng này để giải quyết vấn đề.

location ~ \.php$ {

    # same as documentation ...

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Tôi hy vọng tôi có thể giúp những người khác.


1
Tôi đã mất cả ngày nghỉ cho vấn đề này. Đây là câu trả lời cuối cùng đã cứu tôi. Tôi ước tôi có thể cung cấp cho bạn nhiều hơn một phiếu bầu. Cảm ơn bạn!
Miles

3

Đối mặt với màn hình trống trong Laravel 5.8. Mọi thứ có vẻ ổn với cả thư mục lưu trữ và bootstrap được cấp 777 quyền. Trên

php artisan cache:clear

Nó cho thấy vấn đề đó là khoảng trắng trong Tên ứng dụng của tệp .env



1

Một điều khác có thể khiến WSOD thiếu từ khóa 'return', như trong:

return View::make('yourview');

như trái ngược với

View::make('yourview');


1

Đôi khi là do laravel 5.1 yêu cầu PHP> = 5.5.9. Cập nhật php sẽ giải quyết được vấn đề.


1

Thật kỳ lạ đối với tôi, nhưng trong trường hợp của tôi, tôi phải xóa bộ nhớ cache của laravel để giải quyết vấn đề.


1

Tôi cũng gặp phải vấn đề tương tự sau khi làm composer update

Tôi cũng đã thử cài đặt composer required monolog/monolognhưng không hoạt động.

Sau đó, tôi xóa thư mục / nhà cung cấp và chạy composer installvà hoạt động như bình thường.

về cơ bản, nó phải hoàn nguyên độc thoại của tôi và phiên bản gói ổn định khác về trước. tốt hơn là không nêncomposer update

những gì tôi nhận thấy so sánh cả hai thư mục / nhà cung cấp và tìm thấy những classestệp trong /vendor/monolog/monolog/src/Handlerđó bị thiếu sau khi cập nhật trình soạn nhạc.


1

Có thể có rất nhiều lý do đằng sau màn hình trống không có lỗi. Tôi đã gặp phải vấn đề này nhiều lần bất cứ khi nào tôi muốn tải lên dự án laravel trong chia sẻ lưu trữ.

Lý do: Phiên bản PHP không chính xác

Trong trường hợp của tôi, vấn đề là do phiên bản php không chính xác. Tôi đã có phiên bản php 7.1 trong máy tính cục bộ trong đó như trong cpanel lưu trữ chia sẻ, có phiên bản php 5.6. Tôi đã chuyển đổi phiên bản từ 5.6 lên 7.1.

Bạn có thể thay đổi phiên bản php trong cpanel từ trình quản lý multiphp có sẵn trong trang chủ cpanel.


1

Đôi khi trong route.php, bạn có thể có

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

được viết trước

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

Nó có thể là phương pháp trống Controller::show()khi bạn bắt đầu phát triển bộ điều khiển của mình từ đầu. Trong trường hợp này, bạn sẽ nhận được trang trống trống khi yêu cầu /addurl. Nó xảy ra vì yêu cầu được xử lý theo /{id}tuyến và phương thức của nó không trả về kết quả nào.

Chỉ cần cố gắng đặt /addtuyến đường trước/{id}


0

Vấn đề khác với hành vi tương tự là sử dụng Laravel 3 với PHP 5.5.x. Bạn phải thay đổi một số tên của hàm laravel "output () vì là một từ dành riêng trong php 5.5


0

Lý do có thể là Middlewarenếu bạn quên đặt mã sau vào cuối handlehàm

return $next($request);

0

Tôi cũng gặp lỗi tương tự khi khởi động lần đầu trên laravel + Ubuntu 14.04 Tôi chỉ cần nhấp chuột phải vào bootstrap và thư mục lưu trữ >>> thuộc tính >>> quyền >> Người khác Truy cập >>> thay đổi thành "Tạo và xóa tệp". quyền cho các tệp đính kèm

Cảm ơn bạn


0

Nhận được thông tin này từ diễn đàn Laravel, nhưng nếu gần đây bạn đã nâng cấp phiên bản Laravel VÀ phiên bản PHP VÀ đang chạy nginx, hãy đảm bảo rằng bạn đã thay đổi tệp cấu hình nginx của mình để phản ánh phiên bản PHP mới. Ví dụ:

Trong tệp cấu hình trang nginx của bạn (tại đây: / etc / nginx / sites-available), hãy thay đổi

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

đến

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


0

Tôi có cùng một vấn đề. Tôi đã thay đổi thư mục chmod cho thư mục Lưu trữ. điền cài đặt cơ sở dữ liệu vào .env, nhưng không khắc phục được sự cố. Tôi đã sử dụng Laravel 5.5 và tôi đã sử dụng PHP 5.6, để sửa nó, tôi đã truy cập (cpanel-> PHP Selector) và tôi đã đổi sang PHP 7.1 Và vấn đề đã được thực hiện.


0

Trong trường hợp bình thường, các lỗi nên được ghi lại Trừ khi

Tập lệnh không thể ghi vào tệp nhật ký

  • kiểm tra đường dẫn của nó
  • sự cho phép

Hoặc lỗi xảy ra trên các bản ghi máy chủ ứng dụng kiểm tra cấp cao hơn như Appache || Nginx

Hoặc đó là giới hạn tài nguyên Như cài đặt PHP ini

memory_limit
max_input_time
max_execution_time

Hoặc giới hạn hệ điều hành, v.v.


0

Ngoài vấn đề Quyền trong thư mục lưu trữ và bộ nhớ cache và các vấn đề về phiên bản php, có thể có một số lý do khác để hiển thị trang trống mà không có bất kỳ thông báo lỗi nào.

Ví dụ: tôi gặp thông báo lỗi khai báo lại mà không có bất kỳ nhật ký nào và với trang trắng trống. Có xung đột giữa chức năng trợ giúp của riêng tôi và chức năng của nhà cung cấp.

Tôi đề nghị như một điểm bắt đầu , chạy artisanlệnh. ví dụ:

php artisan cache:clear

Nếu có sự cố, nó sẽ được nhắc trong thiết bị đầu cuối và bạn đã có một Đầu mối và bạn có thể google để tìm giải pháp.


0

Màn hình trống cũng xảy ra khi ứng dụng Laravel của bạn cố gắng hiển thị quá nhiều thông tin và các giới hạn PHP phát sinh (ví dụ: hiển thị hàng chục nghìn bản ghi cơ sở dữ liệu trên một trang). Phần tệ nhất là bạn sẽ không thấy bất kỳ lỗi nào trong nhật ký Laravel. Có thể bạn cũng sẽ không thấy bất kỳ lỗi nào trong các bản ghi PHP FPM. Bạn có thể tìm thấy lỗi trong nhật ký máy chủ http của mình, ví dụ: nginx ném một cái gì đó như thế FastCGI sent in stderr: "PHP message: PHP Fatal error: Allowed memory size of XXX bytes exhausted.

Mẹo ngắn: thêm ->limit(1000)đâu 1000là giới hạn của bạn vào đối tượng truy vấn của bạn.


0

Tôi gặp sự cố này khi cố chạy ứng dụng Laravel 5.8 trên máy chủ của mình, tải lên từ phát triển cục bộ bằng Vagrant Homestead. Sau một thời gian, tôi phát hiện ra rằng miền phụ dev trên máy chủ trực tiếp mà tôi đang chạy bằng cách nào đó được đặt thành PHP 5.6.

cPanel> MultiPHP Manager> Đặt thành PHP 7.2

đã sửa điều này cho tôi. Hy vọng điều này có thể giúp một ai đó.


0

sử dụng .htaccess này để giải quyết

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

trong trường hợp của tôi, sự cố BLANK WHITE SCREEN chỉ đơn giản là lỗi đánh máy hoặc sai ký tự trên tệp env. Tôi đang triển khai trang web xã hội, vì vậy khi tôi thiết lập thông tin đăng nhập .env cho Google+ như thế này:

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

Tuy nhiên, tệp .env không thể sử dụng dấu '+', vì vậy tôi phải thực hiện chỉnh sửa này:

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

Tôi hy vọng điều này sẽ giúp bạn tìm ra một lỗi ngớ ngẩn ...


-2

Trong trường hợp của tôi, khởi động lại apache đã khắc phục sự cố. cho Ubuntu / Debian:

sudo service apache2 restart
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.