我正在尝试将图像或任何其他媒体类型上传到我的 wordpress 应用程序,但出现此错误:
Unable to create directory /home/admin/video/wp-content/uploads/2012/07. Is its parent directory writable by the server?
即使我确定父目录是可写的。它实际上有 777 个权限。可能是什么问题?
谢谢你。
问题是......可由谁或什么写?您可能需要使整个“上传”目录可由 PHP(又名 Web 服务器)写入。通常,apache 和其他服务器默认使用 user-group www-data
,但它可能会有所不同。检查您的 apache 或 lighttpd(或其他)配置文件以查看它运行的用户和用户组。通常这些都在/etc/apache
或/etc/lighttpd
等等。然后,使上传目录递归地写入该组。
使用 777 权限是一个非常糟糕的主意。您总是希望让最少的人访问任何给定目录。所以,这里有一个关于文件权限的简短讨论......
drwxrwxrwx 20 connermcd staff 680 Jul 25 20:38 img
-rw-r--r-- 1 admin www-data 18530 Jul 26 21:46 example
权限字符串的第一个字符表示类型。在这种情况下,img
是一个目录并且example
是一个文件。这也可能是l
符号链接(除其他外)。字符串 ( ) 的其余字符rwxrwxrwx
定义权限。如您所见,它是“读、写、执行”的重复三重奏。第一个三元组代表文件或目录所有者的权限。所有者显示在第三列中(例如,用于 img 和 admin 的 connermcd)。第二个三元组表示文件或目录组的权限(例如 img 和 www-data 的人员)。最后一个三元组表示任何人的权限(即使是您授予临时访问服务器或黑客的权限的人,提示提示)。
每个“读、写、执行”三元组都可以用一个数字表示。我很容易想到rwxrwxrwx
as 421421421
。如果对您有帮助,这是两个的倍数加起来为 7 的唯一方法。所以,4代表读,2代表写,1代表执行。如果将这些加在一起,则可以用三个数字表示一个三元组。所以chmod 777 img
真正做的是给每个人“读、写和执行”的权限。它也只是为该目录设置这些权限,而不是它下面的目录。要递归地执行此操作,您可以使用-R
标志 -- chmod -R
。
在您的情况下,您只想使上传文件夹及其所有子目录可供您的服务器运行的用户组使用。在大多数情况下,这是www-data
,所以我将使用它作为示例。您可能希望将项目文件设置为用户所有,以使它们更易于移动、编辑等。因此假设您是文件的所有者(用于chown
设置)并且它们属于www-data
组(用于chgrp
设置)。在这种情况下,我们希望授予所有者完全权限和组读取和写入权限,并且我们希望递归地执行此操作。因此,转到上传文件夹的父目录并执行chmod -R 760 uploads
.
您还可以查看“设置->媒体”是否正确,然后查看“上传文件”部分。
“在此文件夹中存储上传”中指示的文件夹(和所有子文件夹)必须具有 755 权限。