Laravel黑屏


117

我的laravel网站之前一直在工作,最近我升级到Apache 2.4和PHP 5.5.7。

现在,当我进入laravel.mydomain.com时,我得到了一个白色的空白屏幕,apache错误日志,路由等中的任何内容都应该像以前一样正常。

当我在/var/sites/laravel/public/.htaccess中插入无效行时,得到500,.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.mydomain.com中放一个空白的Laravel新安装-那样工作吗?
劳伦斯(Laurence)2013年

嗯,我试图用作曲家创建项目,但我似乎缺少了openssl。之后有什么简单的方法可以添加它,还是需要使用当前的配置选项+ --with-openssl重新编译PHP?
Mico 2013年

1
将已经正常工作的项目移到暂存服务器上时出现黑屏问题。我一无所获,于是我决定按照@ the-shift-exchange的建议做同样的事情,并重新安装Laravel,然后我很快就发现了问题。登台服务器运行的是过时的PHP版本。Laravel至少需要PHP v5.4.0。以为我会提到它,以防万一其他人遇到同样的麻烦。
igneosaur

检查未达到内存限制-在Laravel 4
Smith

只是另一个数据点-我在一个部署到Kubernetes的应用程序中使用NFS挂载Web文件时遇到了这一点。由于NFS性能非常慢,Laravel似乎未能在合理的时间内缓存视图。PHP-FPM返回空响应。通过手动删除所有视图并重新缓存它们来解决。
乔·尼兰

Answers:


222

阿帕奇

这个答案是否描述或帮助了您的情况?升级到Apache 2.4会对Apache配置进行一些更改。

拉拉韦尔

您在查看Laravel的日志还是Apache的日志?

自从升级到Laravel 4.1之后,当应用程序无法写入日志位置时,我遇到了白屏“错误”(WSOD)。我总是通过使app / storage目录可由Apache写入(组可写入“ www-data”,“ apache”或世界可写入)来解决此问题,这取决于您的服务器设置。

Web服务器用户

在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
好像是权限问题。修改laravel目录使其工作。
Mico 2013年

3
@fideloper这个答案确实挽救了我的一天。正在获得WSOD,并且任何地方的日志中都没有任何内容。修改应用程序/存储就可以了。我给你戴上虚拟帽子!
Tim Habersack 2013年

是的,谢谢你,这确实在这里救了我。我正在使用X-pad:在我的http响应中避免浏览器错误,我认为那是
Simon Bennett

4
对存储文件夹的许可解决了我的此类问题。但是,为什么laravel在浏览器上不显示权限问题?
Musa 2014年

4
这也为我解决了这个问题。。。我同意,最好是显示某种错误消息,而不是“死亡白屏”。
dusty909

65

fideloper对Laravel 5及其新文件结构的回答的更新为:

$ sudo chmod -R o+w storage/

荣誉!解决了我在ubuntu 14.04服务器上的L5的问题。
迪伦·皮尔斯

在Mac OS X 10.10.3上也为我工作过
dave

为我工作-CentOS 6.8(最终版)
Mike

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/cachestorage目录授予写权限

sudo chmod -R 777引导程序/缓存存储

  • 重命名.env.example.env
  • 从Laravel根目录在终端/命令提示符中使用以下命令生成应用程序密钥:

PHP的工匠键:生成

这将生成加密密钥和更新的值APP_KEY.env文件

这应该可以解决问题。

如果问题仍然存在,请config/app.php使用从上述artisan key generate命令生成的新密钥进行更新:

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

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


10

对于即使在使存储可访问以显示错误后仍获得空白页的任何人,请将这两行放在public / index.php的第一行,至少可以看看发生了什么。对我来说这个错误在那里:在第16行的/var/www/***/config/database.php中找不到类'PDO'

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

每次都对我有帮助
Umair Hamid

5

我还有一个选择,为什么可能会出现空白页问题。如果您处于生产模式,并且通过php artisan(config:cache)缓存了配置文件,请尝试删除执行的缓存文件:

php artisan config:clear

或手动将其删除(bootstrap / cache / config.php)


1
我尝试了其他所有方法,这是对我有用的最后一件事。
DavidHyogo '19

原来我的环境文件无效,运行此命令会让我知道。
SvEnjoyPro

4

运行此命令为我解决了问题:

php artisan view:clear

我猜一个空白的错误页面是如何被缓存的。不得不清除缓存。


4

就我而言,我已经安装了laravel很多次,并且可以肯定已经正确授予了文件夹写权限。

像上面的大多数答案一样:

sudo chmod 777 -R storage bootstrap

错误是我的nginx配置来自官方文档

复制后,我只修改了域名,然后得到了空白页。我试图重新启动nginxphp-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

这说明了什么问题它是白色空间.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文件夹并发现composer更新后找不到这些classes文件/vendor/monolog/monolog/src/Handler


1

黑屏背后可能有很多原因没有错误。每当我要在共享托管中上传laravel项目时,我就多次遇到此问题。

原因:错误的PHP版本

就我而言,问题是由于不正确的php版本。我在本地计算机上有php 7.1版本,在共享主机面板中,有php 5.6版本。将版本从5.6切换到7.1对我来说很有效。

您可以通过cpanel主页上的multiphp管理器更改cpanel中的php版本。


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

当我第一次在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文件上的字符错误。我正在实施社交名媛,因此在为Google+设置.env凭据时,如下所示:

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'

我希望这能帮助您找到一个愚蠢的错误...


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.