Apache 无法写入路径
Apache can't write to path
概览
我正在使用 Laravel 4.2 图片上传功能。我在 Homestead 上设置了它,但最近我删除了 Nginx 并改为使用 Apache 为网站提供服务(由于需要使用服务器发送的事件)。
在我从 Nginx 迁移到 Apache 之前,文件上传功能运行良好。它在 Apache 的临时服务器上也能正常工作。
错误
我正在使用 Intervention 图片库来处理图片上传。当我尝试上传文件时,我的 laravel.log
文件中出现以下内容:
Can't write image data to path (/home/vagrant/projects/projectname/public/assets/pics/profile/photos/f55f0ae2-2d1a-4fdd-b9be-39d8a509baa3.jpg)
我试过的
我以为这只是一个简单的权限错误。我已经将 chmod
我的 asset
目录更改为 0777
,将目录所有者更改为 www-data
,创建一个名为 web
的新组 www-data
并将所有者组更改为该组(基本上 this answer 中的所有内容以及更多)但它仍然不起作用。
该目录肯定存在,正如我提到的,它在迁移到 Apache 之前有效(我不完全确定它是否相关,但看起来很有可能)。
我的/var/log/apache2/error.log
也是空的。
暂存服务器工作正常,但我不想在配置生产服务器时遇到同样的问题。我想解决这个问题并进一步了解它,以便将来遇到它时我可以解决它。为什么会发生这种情况,我可以做些什么来进一步修复 it/debug?
示例文件夹权限
drwxr-xr-x 1 vagrant vagrant 272 Jan 26 11:07 assets/pics
drwxr-xr-x 1 vagrant vagrant 170 Jan 26 10:11 assets/pics/defaults
drwxr-xr-x 1 vagrant vagrant 714 Jan 26 14:10 assets/pics/forums
drwxr-xr-x 1 vagrant vagrant 646 Jan 26 14:10 assets/pics/forums/thumbs
drwxr-xr-x 1 vagrant vagrant 170 Jan 20 18:02 assets/pics/gallery
drwxr-xr-x 1 vagrant vagrant 3026 Jan 26 13:24 assets/pics/messages
drwxr-xr-x 1 vagrant vagrant 2992 Jan 26 13:24 assets/pics/messages/thumbs
drwxr-xr-x 1 vagrant vagrant 136 Jan 8 17:27 assets/pics/profile
drwxr-xr-x 1 vagrant vagrant 136 Feb 10 14:48 assets/pics/profile/photos
drwxr-xr-x 1 vagrant vagrant 102 Feb 10 14:51 assets/pics/profile/photos/thumbs
出于某种原因 owner/group 仍然是 vagrant
,即使我 chown
他们也是如此。我试过 sudo chown
和 sudo -s
.
尝试修改您的 Vagrantfile
以在 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
块结束之前包含此行:
config.vm.synced_folder "/path/to/laravel/app", "/home/vagrant/projects/projectname", :owner => "www-data", :group => "www-data", :mount_options => ["dmode=775", "fmode=664"]
字符串 "/path/to/laravel/app"
必须指向您在 Vagrant 机器外工作的目录。这应该强制文件所有者和权限成为您为所有项目文件指定的所有者和权限(因此它们不会被 vagrant 覆盖)。进行更改后,您需要重新启动 VM。
你 chown
过得怎么样?应该是
chown USERNAME GROUP -R /path/to/file
概览
我正在使用 Laravel 4.2 图片上传功能。我在 Homestead 上设置了它,但最近我删除了 Nginx 并改为使用 Apache 为网站提供服务(由于需要使用服务器发送的事件)。
在我从 Nginx 迁移到 Apache 之前,文件上传功能运行良好。它在 Apache 的临时服务器上也能正常工作。
错误
我正在使用 Intervention 图片库来处理图片上传。当我尝试上传文件时,我的 laravel.log
文件中出现以下内容:
Can't write image data to path (/home/vagrant/projects/projectname/public/assets/pics/profile/photos/f55f0ae2-2d1a-4fdd-b9be-39d8a509baa3.jpg)
我试过的
我以为这只是一个简单的权限错误。我已经将 chmod
我的 asset
目录更改为 0777
,将目录所有者更改为 www-data
,创建一个名为 web
的新组 www-data
并将所有者组更改为该组(基本上 this answer 中的所有内容以及更多)但它仍然不起作用。
该目录肯定存在,正如我提到的,它在迁移到 Apache 之前有效(我不完全确定它是否相关,但看起来很有可能)。
我的/var/log/apache2/error.log
也是空的。
暂存服务器工作正常,但我不想在配置生产服务器时遇到同样的问题。我想解决这个问题并进一步了解它,以便将来遇到它时我可以解决它。为什么会发生这种情况,我可以做些什么来进一步修复 it/debug?
示例文件夹权限
drwxr-xr-x 1 vagrant vagrant 272 Jan 26 11:07 assets/pics
drwxr-xr-x 1 vagrant vagrant 170 Jan 26 10:11 assets/pics/defaults
drwxr-xr-x 1 vagrant vagrant 714 Jan 26 14:10 assets/pics/forums
drwxr-xr-x 1 vagrant vagrant 646 Jan 26 14:10 assets/pics/forums/thumbs
drwxr-xr-x 1 vagrant vagrant 170 Jan 20 18:02 assets/pics/gallery
drwxr-xr-x 1 vagrant vagrant 3026 Jan 26 13:24 assets/pics/messages
drwxr-xr-x 1 vagrant vagrant 2992 Jan 26 13:24 assets/pics/messages/thumbs
drwxr-xr-x 1 vagrant vagrant 136 Jan 8 17:27 assets/pics/profile
drwxr-xr-x 1 vagrant vagrant 136 Feb 10 14:48 assets/pics/profile/photos
drwxr-xr-x 1 vagrant vagrant 102 Feb 10 14:51 assets/pics/profile/photos/thumbs
出于某种原因 owner/group 仍然是 vagrant
,即使我 chown
他们也是如此。我试过 sudo chown
和 sudo -s
.
尝试修改您的 Vagrantfile
以在 Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
块结束之前包含此行:
config.vm.synced_folder "/path/to/laravel/app", "/home/vagrant/projects/projectname", :owner => "www-data", :group => "www-data", :mount_options => ["dmode=775", "fmode=664"]
字符串 "/path/to/laravel/app"
必须指向您在 Vagrant 机器外工作的目录。这应该强制文件所有者和权限成为您为所有项目文件指定的所有者和权限(因此它们不会被 vagrant 覆盖)。进行更改后,您需要重新启动 VM。
你 chown
过得怎么样?应该是
chown USERNAME GROUP -R /path/to/file