32

在阅读了 Laravel4 beta 发布的公告后,我第一次尝试 Laravel。

我按照这些步骤安装了 composer 和 laravel 以及它需要的所有依赖项。我把 laravel 放在了我的~/public_html目录中——因为我习惯用 Codeigniter 来做,但我认为这里出了点问题。

如果我将浏览器指向http://localhost/~carlo/laravel-develop/,它只会显示目录的内容。

然后,虽然在文件系统上我有一个laravel-develop/public文件夹,但它没有出现在浏览器上。

我发现.htaccess像这样改变:

<IfModule mod_rewrite.c> 
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L] 
</IfModule>

当我尝试访问公用文件夹时导致错误。错误:

ErrorException:警告:file_put_contents(/home/carlo/public_html/laravel-develop/app/config/../storage/meta/services.json):无法打开流:/home/carlo/public_html/laravel-中的权限被拒绝开发/供应商/laravel/framework/src/Illuminate/Filesystem/Filesystem.php 第 77 行

另一个:

/home/carlo/public_html/laravel-develop/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php 第77行

然后是一长串错误。最后一个是:

require_once('/home/carlo/public_html/laravel-develop/start.php') 在 /home/carlo/public_html/laravel-develop/public/index.php 第 53 行

4

14 回答 14

70

尝试storage使用终端更改文件夹的文件夹权限:

chmod -R 777 storage

可以在此处找到有关此问题的更多信息。

于 2013-01-15T21:08:41.850 回答
16

导致您的错误是因为 laravel 无法写入 app/storage 文件夹。其余的只是一个堆栈跟踪。为了使存储文件夹可写, cd 进入您的应用程序文件夹,然后运行:

chmod -R 777 storage
于 2013-01-15T21:33:25.457 回答
11

生产方式,对于不熟悉 Unix 的人来说复杂度适中,但更安全

  1. 进入超级用户模式(sudo -s 或 su)。
  2. 创建组web( groupadd web)
  3. 将您的主要用户添加到组web(假设您的用户是cool_user,所以运行usermod -a -G web cool_user
  4. 将 php-fpm 或 web 服务器用户(如果 php 用作 SAPI 模块)添加到web组(例如,在 CentOS 上 php-fpm 使用apache用户名,所以在大多数情况下这将起作用usermod -a -G web apache:)
  5. 将您的项目根目录组所有者更改为web递归 ( chgrp -R web /path/to/project/root/)
  6. 授予组的递归写入权限(chmod -R g+w /path/to/project/root/
  7. 可选地,要允许您的用户访问所有由apache(或其他)用户创建的文件和文件夹,请通过在项目根目录 ( )上递归设置groupid位,使它们获得与其父文件夹相同的组所有权。chmod -R g+s /path/to/project/root/

瞧!

快速而肮脏的方式,对于那些不关心安全性并希望不惜一切代价使其工作而不安全的人:

  1. 进入超级用户模式(sudo -s 或 su)。
  2. 以递归方式为所有用户授予完全权限(读、写、执行)(chmod -R o=rwx /path/to/project/root/
于 2013-06-30T12:43:16.690 回答
5

就我而言,我通过在文件 /app/config/app.php 中修改默认设置来解决此错误:

'url' => 'http://localhost',

到我的本地自定义虚拟主机主机 url:

'url' => 'http://mydomain.local',

这似乎是解决问题的基本更改(我还修改了存储文件夹,如此处所建议的)

希望这对你们中的一些人有所帮助..

于 2013-04-24T17:57:04.800 回答
3

此外,如果您使用的是 virtualbox/vagrant VM 类型的环境,那么在我的 Mac 上,我需要在主机(mac)系统上发出 chmod,但在我的 Windows 机器上,直接在 VM 上发出 chmod 就可以了.

于 2013-08-16T15:47:54.660 回答
2

您需要添加:选项+FollowSymLinks

<IfModule mod_rewrite.c> 
RewriteEngine on 
Options +FollowSymLinks
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ index.php/$1 [L] 
</IfModule>
于 2013-01-15T19:48:11.087 回答
2

您需要阅读安装文档:

http://laravel.com/docs/installation#configuration

注意这里的位:

Laravel requires one set of permissions to be configured - folders within app/storage require write access by the web server.

该文档中还有其他有用的内容,因此请务必阅读所有内容。

于 2013-10-20T16:17:12.243 回答
2

我遇到了同样的问题,这是我的解决方法:在您的 httpd-vhosts.conf 文件中,您需要将配置添加到您的文件夹中,这就是我的

<VirtualHost *:80>
    ServerAdmin your@mail.com
    DocumentRoot "/home/carlospublic_html"
    ServerName carlos.local
    <Directory "/home/carlos/public_html">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>>
于 2014-05-05T00:59:31.420 回答
1

你的服务器的 webroot 应该指向/public你安装 Laravel 的文件夹。这是index.html文件从 Laravel 初始化的地方返回。

于 2014-05-06T13:03:33.997 回答
0

嘿,我也遇到了这个错误,更改写权限似乎也不起作用。原来我需要更改 apache 的 httpd.conf 文件中的用户和组设置。这是一个很好的教程:Enable Write Permissions for the Native Built-In Apache in Mac OS X Lion

于 2013-03-25T22:04:22.010 回答
0

首先,这里的答案将帮助您获得权限。其次,您可能需要将其添加RewriteBase ~/carlo/public_html/laravel-develop到您的 .htaccess 中,因为您是在主目录之外运行它。

于 2013-01-16T02:53:11.817 回答
0

检查 LR4 的要求,您的本地服务器必须具有这些:PHP >= 5.3.7 MCrypt PHP 扩展

否则,将失败。我也面临这个麻烦,现在正在为我的 XAMPP 寻找更新的 PHP 及其扩展。

于 2013-06-14T23:21:34.567 回答
0

比起将权限更改为 777,我更喜欢这种方法。将 Apache 设置为像你一样运行。

  1. 在终端类型id中获取uid=123(Myname).

  2. 打开 /etc/apache2/httpd.conf 并编辑它以使用您的用户名。

    <IfModule unixd_module>
       User Myname
       Group staff
    </IfModule>
    
  3. 返回终端:sudo apachectl restart

于 2015-05-14T17:45:41.627 回答
-1

几分钟前我遇到了这个问题,使用 sudo chmod -R 777 storage 似乎有助于使 storage/meta/services.json 可写。只是为了补充每个人一直在说的话。这对我有用。

于 2013-06-10T21:48:46.973 回答