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 chownsudo -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