我正在尝试编写一个简单的在线音乐播放器来改进我的编程。
我有一台运行CentOS 6.5的服务器,外部硬盘包含我的所有文件。我将存储分区装入/mnt/storage
,我的音乐位于/mnt/storage/cascornelissen/Muziek
,其中包含以下权限:
drwxrwxr-x 19 cascornelissen ftpusers 4096 Nov 4 14:43 Muziek
然后我有一个简单的httpd网络服务器,在/var/www/html/melodi
中托管项目,它构成了前面提到的Muziek目录的软链接:
lrwxrwxrwx 1 root ftpusers 34 Jan 26 22:31 music -> /mnt/storage/cascornelissen/Muziek
我想使用PHP的glob
列出所有文件,但返回一个空数组。所以我尝试scandir("music")
,但它返回以下错误:
Warning: scandir(music): failed to open dir: Permission denied in /var/www/html/melodi/index.php on line 42
有关如何修复此权限问题的任何想法?
答案 0 :(得分:5)
试试这个:
chmod ugo+x /mnt /mnt/storage /mnt/storage/cascornelissen
您的路径的某些部分可能不允许您的Apache用户进入。允许进入目录意味着将x
或execute permissions
添加到目录。
<强>解释强>
# create path a/b
mkdir -p a/b
ls a/b # this works
# now remove all permissions for a
chmod 000 a
ls a/b # ls: cannot access a/b: Permission denied
# but why, we should still have permission for b??
# Now, lets add x permission for a:
chmod ugo+x a
ls a/b # works again
ls a # ls: cannot open directory a: Permission denied
# So, we cannot list contents of a, but we can
# access a/b *through* a
因此,对于目录,execute permission
或x
意味着我们可以访问其下方的路径,即使我们无法读取目录本身的内容。在您的情况下,Apache需要“遍历” /mnt/storage/cascornelissen
的权限,即使它在到达Muziek
之前不会读取任何文件。