异常处理程序中的错误。-Laravel


118

这是与Laravel安装相关的问题。我有一个面向公众的Unix服务器设置:

<VirtualHost *:80>
ServerAdmin webmaster@mydomain.org
DocumentRoot "/var/www/mydomain"
ServerName mydomain.org
ServerAlias www.mydomain.org
ErrorLog "/var/log/mydomain.org-error_log"
CustomLog "/var/log/mydomain.org-access_log" common
</VirtualHost>

我可以将包含/ var / www / mydomain,即http://mydomain.org/test.php的文档提供给test.php,其中包含:

<?php echo 'test';

工作良好。

在bash中,通过Composer安装Laravel并查看文件:

# ls /var/www/mydomain/my-laravel-project

.gitattributes  CONTRIBUTING.md artisan         composer.json   phpunit.xml readme.md       vendor
.gitignore      app             bootstrap       composer.lock   public          server.php

所以当我浏览到:

http://mydomain.org/my-laravel-project/public/

为什么我的申请报告:

Error in exception handler. 

在浏览器中-在空白屏幕上?我期望看到Laravel启动画面。

此外,日志文件也不会显示任何内容。


PHP版本?您能否检查服务器登录/var/log并查看服务器必须说的内容(如有)。
杰森·刘易斯

3
Laravel的错误登录app/storage/logs怎么办?并且所有存储目录​​都是可写的吗?
杰森·刘易斯

1
@Jason就像您说的-这是存储目录。一个chmod -R 757在存储上,我可以进入启动画面。+1,谢谢。
Cookie

Answers:


246

较安全的选择是将存储目录组更改为Web服务器组(通常为apachewww-data,但这在不同的操作系统之间可能有所不同),并将目录的权限保留为775

chgrp -R www-data app/storage

或与chown

chown -R :www-data app/storage

然后确保目录权限为775

chmod -R 775 app/storage

Laravel网站

Laravel可能需要配置一组权限:应用程序/存储中的文件夹需要Web服务器进行写访问。


14
通常,将组所有者更改为Web服务器更安全,而不是授予“世界”对文件的完全访问权限。目录默认为775,这样就足够了。chgrp命令-R阿帕奇应用程序/存储
hlev

5
在Mac上,上述命令无效。但是,此命令可以:(sudo chown -R _www app/storage如果需要,请用您的Apache服务器名称替换_www)
Leo Galleguillos 2014年

4
然后,我必须给予小组写许可chmod -R g+w app/storage
Daniel AA Pelsmaeker 2014年

谢谢,我发现这很有帮助。但是,当您尝试运行“ php artisan migration ...”时,稍后会产生问题-因为“ / app / storage /”文件夹为您提供“权限被拒绝”错误-并且您将所有权限修复为所有者“ www-data”,直到出现“ /bootstrap/compiled.php”权限错误。将其设置为所有者“ www-data”还是全部设置为0777是个好主意吗?
peedeeaay 2014年

3
(y),感谢更改!chmod 777毁了这么多孩子的童年:)
MA Hossain Tonu

17

Laravel 5.2

chmod -R 777存储

较旧的Laravel chmod 777应用/存储/ *

请注意,如果您拥有一台被合理锁定的专用服务器,除了您自己的用户帐户之外,没有其他用户帐户,那么777应该不会比其他任何事物带来更多的安全风险。恶意用户必须拥有其他漏洞才能利用它,在这一点上,无论如何,777许可可能尚无定论。但是,如果您与不信任的其他用户位于共享服务器上,则需要研究更复杂的权限或检查托管服务提供商是否已提供隔离。

他们应该将其真正放入快速入门文档中,并提供各种设置的示例。由于会自动创建更多目录,因此您可能还必须在首次加载后再次运行它。在日志中查找写入错误。

另外,您的DocumentRoot应该是/ path / to / laravel-project / public


4
同意,或者更好的是更详细的错误消息
homerjam 2014年

3
他们应该告诉你去www.domain.com/project/public因为这不是运行Laravel应用程序的正确方法。您应该将Web服务器设置为服务public / *,仅此而已,public / index.php是整个应用程序的唯一入口点。您可以使用Apache轻松地做到这一点。如果您使用的是nginx,那么您可能知道自己在做什么。而且,如果您使用的是便宜的cPanel主机(我表示慰问),则也很容易设置网络根目录以指向公众。
borfast 2014年

11
严重暗示777只是最明显的违反安全原则的行为……
ftrotter 2014年

1
我知道它已经使用一年了,但是777是执行此操作的最坏方法,它破坏了所有安全规则,如@ftrotter所说。
扎克·格里森


1

潮流已经很久了,但是对于“异常处理程序中的错误”,我仍然有另一条建议。

当我运行“ php artisan”时,我就遇到了这种情况,这是一种评估您的环境是否正常运行的好方法。

我运行它并给了我那个错误,直到我编辑了项目根目录中的artisan文件并添加了try catch语句后,我才能查明问题所在:

try {
    $artisan = Illuminate\Console\Application::start($app);
}
catch (Exception $e)
{
    dd($e->getMessage());
}

在这一点上,我终于看到了一个启发性的信息:

string(41) "Connection refused [tcp://127.0.0.1:6379]"

在我的情况下,这是一个错误的redis配置,但在您的情况下,可能是任何东西。

我希望这对某人有帮助,或者至少下次我到达这里时,我会找到自己的答案。


谢谢。我用这个发现了我的问题-它印了could not find driver。然后我发现我已经安装了php-mysql,而这php7.0-mysql是必需的。此链接还帮我- digitalocean.com/community/tutorials/...
Udayraj德希穆克

0

解决此问题的最短方法是从sudo开始手工艺。这将为技术人员提供所需的所有权限,也不会造成任何安全问题。

因此,代替手工艺者可以使用:

$ php artisan serve

尝试使用:

$ sudo php artisan serve 

因此您无需进行任何权限更改


-5

我有同样的问题,我只是使用chmod命令行将权限从目录app / storage更改为775


5
当前接受的答案中已经指出了这一点(并且需要该答案中的有关正确设置目录组的信息才能成为完全正确的答案。)
Matt Gibson 2014年
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.