Laravel空白的白色屏幕

时间:2013-12-19 09:54:38

标签: php apache frameworks laravel laravel-4

我的laravel网站之前正在运行,我最近升级到Apache 2.4和PHP 5.5.7。

现在,当我去laravel.mydomain.com时,我得到一个白色的空白屏幕,apache错误日志,路线等等都不应该像以前一样好。

当我向/var/sites/laravel/public/.htaccess插入无效行时,

.htaccess正在加载,因为我得到500.

继承人我的.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

33 个答案:

答案 0 :(得分:215)

的Apache

this answer是否描述或帮助您的情况?升级到Apache 2.4会带来Apache配置的一些变化。

Laravel

你在检查Laravel的日志还是Apache的日志?

自升级到Laravel 4.1以来,当应用程序无法写入日志位置时,我遇到了白屏“错误”(WSOD)。我总是通过使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

# 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

答案 1 :(得分:63)

对于Laidevel 5及其新文件结构的fideloper答案的更新是:

$ sudo chmod -R o+w storage/

答案 2 :(得分:23)

以下步骤解决了Laravel 5上的空白屏问题。

  • 转到Laravel根文件夹
  • 授予storage.env.example目录
  • 的写入权限
  

sudo chmod -R 777 bootstrap / cache storage

  • .env重命名为APP_KEY
  • 使用以下命令在Laravel root的终端/命令提示符中生成应用程序密钥:
  

php artisan key:generate

这将生成加密密钥并更新.env文件中config/app.php的值

这应该可以解决问题。

如果问题仍然存在,请使用上述artisan key generate命令生成的新密钥更新'key' => env('APP_KEY', 'SomeRandomString'),

  

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

     

     

rfFuncs$SummaryFunction <- twoClassSummary ctrl_rfe <- rfeControl(method = "cv", number = 5, verbose = TRUE, functions = rfFuncs, allowParallel = F) rf_rfe <- rfe(select(trainData, -target), trainData$target, sizes = seq(1, ncol(trainData), 100), metric='ROC', rfeControl = ctrl_rfe)

答案 3 :(得分:22)

在public / index.php页面中试试这个

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

答案 4 :(得分:7)

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

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

答案 5 :(得分:6)

当我刚接触Linux时。我经常在Laravel Project中发现这个错误。 白色错误表示错误,可能存在一些权限问题或错误。

你只需要遵循两个步骤,就像冠军一样工作:)

(1)给予许可。从项目的根目录运行这些命令

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

(2)如果您克隆了项目或从github拉出,则运行

composer install

(3)正确配置.env文件,您的项目将有效。

答案 6 :(得分:4)

我在CentOS服务器上遇到类似的问题。使用php artisan serv并通过本地机器上的端口8000访问它工作正常但无法让我的远程机器加载特定视图。我可以很好地返回字符串,并且正在加载一些视图。在我终于意识到这是SELinux问题之前,在权限上追了我一会儿。我只是将它从强制设置为允许而且有效。希望能帮助那些可能遇到同样问题的其他人。

setenforce permissive

答案 7 :(得分:3)

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

php artisan config:clear

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

答案 8 :(得分:2)

对于我来说,我已经安装了laravel很多次,并且我确信已经正确地授予了文件夹写权限。

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

sudo chmod 777 -R storage bootstrap

错误是我的nginx配置来自official documentation

我仅在复制后修改了域名,然后出现空白页。 我尝试重新启动nginxphp-fpm,但对我不起作用。

最后,我添加了此线路配置来解决该问题。

location ~ \.php$ {

    # same as documentation ...

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

希望我能帮助别人。

答案 9 :(得分:1)

有时它是因为laravel 5.1需要PHP&gt; = 5.5.9。更新php将解决问题。

答案 10 :(得分:1)

有时可能在route.php中

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

之前写过

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

当您从头开始开发控制器时,它可以是空方法Controller::show()。在这种情况下,您将在请求/add网址时获得空白页。发生这种情况是因为请求是通过/{id}路由处理的,并且其方法未返回任何内容。

只需将/add路线放在/{id}之前

答案 11 :(得分:1)

它显示问题是.env文件的应用程序名称中的空格

答案 12 :(得分:1)

可能导致WSOD的另一件事是错过了&#39; return&#39;关键字,如:

return View::make('yourview');

而不是

View::make('yourview');

答案 13 :(得分:1)

对我来说很奇怪,但就我而言,我必须清除laravel的缓存以解决问题。

答案 14 :(得分:1)

我在Vagrant机器上设置它有一些问题。对我来说真正有用的是执行:

chmod -R o+w app/storage/

来自Vagrant机器内部。

参考:https://laracasts.com/lessons/vagrant-and-laravel

答案 15 :(得分:1)

我做完composer update

后也遇到了同样的问题

我也尝试安装composer required monolog/monolog,但是没有用。

然后,我删除了/ vendor目录并运行composer install并按常规工作。

基本上,它必须已将我的独白和其他稳定软件包的版本还原到以前的版本。最好不要composer update

我注意到比较/ vendor文件夹,发现作曲家更新后classes下的/vendor/monolog/monolog/src/Handler个文件丢失了。

答案 16 :(得分:1)

确保您的 .env 文件中没有拼写错误。这就是我出现空白屏幕的原因。

屏幕、日志文件或 nginx 日志都没有记录任何内容。只是一个空白屏幕。

答案 17 :(得分:0)

在我的情况下,

空白屏幕问题很简单,就像环境文件中的错字或错误字符一样简单。 我正在实施社交名流,因此在为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'

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

答案 18 :(得分:0)

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

原因:错误的PHP版本

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

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

答案 19 :(得分:0)

面对Laravel 5.8中的黑屏。赋予777权限的存储和引导文件夹都看起来不错。在

php artisan cache:clear

它显示出问题,原因是 .env 文件的应用名称中的空格

答案 20 :(得分: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>

答案 21 :(得分:0)

当我尝试在服务器上运行Laravel 5.8应用程序时遇到了这个问题,该应用程序是使用Vagrant Homestead从本地开发文件上传的。一段时间后,我发现正在运行的实时服务器上的dev子域以某种方式设置为PHP 5.6。

cPanel> MultiPHP Manager>设置为PHP 7.2

为我修复了此问题。希望这可以对某人有所帮助。

答案 22 :(得分:0)

从Laravel论坛得到这个,但如果您最近升级了Laravel版本和PHP版本并运行nginx,请确保您已更改nginx配置文件以反映新的PHP版本。例如:

在您的nginx网站配置文件中(此处:/ etc / nginx / sites-available),更改

% create slider uicontrol('Parent',f,... 'Style','slider','Callback',{@sliderCallback,AX_main},... 'Units','normalized','Position',[0.05 0.05 0.9 0.05], ... 'HandleVisibility', 'off');

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

答案 23 :(得分: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是您的限制。

答案 24 :(得分:0)

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

php artisan view:clear

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

答案 25 :(得分:0)

除了存储和缓存文件夹中的权限问题以及php版本问题外,还有其他原因可以显示空白页而不显示任何错误消息。

例如,我有一条 redeclare 错误消息,没有任何日志,白页为空白。 我自己的助手功能和供应商功能之间存在冲突。

我建议作为起点,运行artisan命令。例如:

php artisan cache:clear

如果有问题,它将在终端中提示,并且您有线索,您可以在Google上找到解决方案。

答案 26 :(得分:0)

正常情况下,应记录错误除非

脚本无法写入日志文件

  • 检查它的路径
  • 权限

或者在Appache ||等更高级别的检查应用服务器日志上发生错误nginx的

或者是资源限制 像PHP ini设置一样

memory_limit
max_input_time
max_execution_time

或OS限制等等

答案 27 :(得分:0)

我有同样的问题。我已经为Storage文件夹更改了chmod文件夹。填写.env中的数据库设置,但没有解决问题。 我使用了Laravel 5.5并且使用了PHP 5.6来修复它,我去了(cpanel-&gt; PHP Selector)并且我改为PHP 7.1并且问题已经完成。

答案 28 :(得分:0)

当我第一次在laravel + Ubuntu 14.04上开始时,我也遇到了同样的错误 我只需右键单击bootstrap和存储文件夹&gt;&gt;&gt;属性&gt;&gt;&gt;权限&gt;&gt;其他访问&gt;&gt;&gt;将其更改为&#34;创建和删除文件&#34;更改附加文件的权限

谢谢

答案 29 :(得分:0)

如果您忘记将以下代码放在Middleware函数

的末尾,则原因可以是handle
return $next($request);

答案 30 :(得分:0)

具有相同行为的其他问题是使用Laravel 3和PHP 5.5.x.你必须改变一些laravel函数的名称“yield(),因为它是php 5.5中的保留字

答案 31 :(得分:-2)

此更改适用于我的localhost Ubuntu服务器14.xx设置

# Apply all permission to the laravel 5.x site folders     
$ sudo chmod -R 777 mysite

还对网站上可用的httpd设置Apache2 settings

进行了更改

添加设置:

Options +Indexes +FollowSymLinks +MultiViews
Require all granted

答案 32 :(得分:-2)

在我的情况下,重启apache修复了问题。 对于Ubuntu / Debian:

sudo service apache2 restart