PHP glob/scandir和Linux软链接/权限

PHP glob/scandir和Linux软链接/权限,php,apache,permissions,symlink,Php,Apache,Permissions,Symlink,我想写一个简单的在线音乐播放器来改进我的编程 我有一台运行CentOS 6.5的服务器,带有一个包含我所有文件的外部硬盘。我已将存储分区装入/mnt/storage,我的音乐位于/mnt/storage/cascornelissen/Muziek,具有以下权限: drwxrwxr-x 19 cascornelissen ftpusers 4096 Nov 4 14:43 Muziek 然后我有一个简单的httpd web服务器,在/var/www/html/melodi中托管该项

我想写一个简单的在线音乐播放器来改进我的编程

我有一台运行CentOS 6.5的服务器,带有一个包含我所有文件的外部硬盘。我已将存储分区装入
/mnt/storage
,我的音乐位于
/mnt/storage/cascornelissen/Muziek
,具有以下权限:

drwxrwxr-x 19 cascornelissen ftpusers       4096 Nov  4 14:43 Muziek
然后我有一个简单的httpd web服务器,在
/var/www/html/melodi
中托管该项目,它包含一个到前面提到的Muziek目录的软链接:

lrwxrwxrwx 1 root           ftpusers   34 Jan 26 22:31 music -> /mnt/storage/cascornelissen/Muziek
我想使用PHP的
glob
列出所有返回空数组的文件。因此,我尝试了
scandir(“音乐”)
,但它返回以下错误:

Warning: scandir(music): failed to open dir: Permission denied in /var/www/html/melodi/index.php on line 42
有关如何解决此权限问题的任何想法?

请尝试以下方法:

chmod ugo+x /mnt /mnt/storage /mnt/storage/cascornelissen
路径的某些部分可能不允许Apache用户进入。允许进入目录意味着向目录添加
x
executepermissions

解释

# 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

之前不会读取任何文件,您是否使用了symlink?对不起,您的确切意思是什么?太棒了,成功了!请你再详细解释一下好吗?apache是否要求
/Muziek
的每个父级都具有执行权限?将在回答中添加解释