【发布时间】:2012-05-30 14:52:03
【问题描述】:
对 PHP 的 is_readable() 函数的调用在可从命令提示符读取的目录上返回 false。我已将权限更改为最允许,但仍然没有运气。
ls -lad /remote/samba_share
drwxrwxr-x 13 me users 0 May 29 15:49 /remote/samba_share
ls -la /remote/samba_share
drwxr-xr-x 4 me users 0 May 8 14:19 /remote/samba_share/local_dir
drwxr-xr-x 16 me users 0 May 14 19:49 /remote/samba_share/second_drive
drwxrwxrwx 12 me users 0 May 30 09:42 /remote/samba_share/ext_raid
运行以下代码...
if (is_readable('/remote/samba_share' )){ echo "share ok\n"; } else { echo "share BAD\n"; }
if (is_readable('/remote/samba_share/local_dir' )){ echo "local ok\n"; } else { echo "local BAD\n"; }
if (is_readable('/remote/samba_share/second_drive' )){ echo "second ok\n"; } else { echo "second BAD\n"; }
if (is_readable('/remote/samba_share/ext_raid' )){ echo "raid ok\n"; } else { echo "raid BAD\n"; }
...导致...
share ok
local ok
second BAD
raid BAD
任何不在物理主分区上的 samba 共享目录似乎都失败了。
调用 is_readable() 的机器的配置详情:
php -v
PHP 5.3.11-pl0-gentoo (cli) (built: May 5 2012 16:48:35)
php.ini:
safe_mode = Off
safe_mode_gid = On # (tried either way, shouldn't matter)
;open_basedir =
/etc/fstab entry:
//remote_machine/samba_share /remote/samba_share cifs iocharset=utf8,credentials=/blahblah/samba_credentials,uid=me,gid=users,file_mode=0777,dir_mode=0777,auto 0 0
eix samba
[I] net-fs/samba
Installed versions: 3.5.15!t
远程机器的配置细节:
eix samba
[I] net-fs/samba
Installed versions: 3.5.15!t
/etc/samba/smb.conf:
[samba_share]
path = /samba_share/
public = yes
writable = yes
; printable = yes
browseable = yes
create mask = 0777
create mode = 0777
directory mode = 0777
我已经尝试了所有我能想到的方法来让它发挥作用,但现在我感到很愚蠢。 :-) 如果这似乎与任何人相关,我也可以提供内核配置。感谢您的帮助!
【问题讨论】:
-
'second_share',因为那实际上是一些 OTHER 挂载的 samba 共享,位于主 samba 共享下方?
-
不,它是安装在远程机器上的第二个驱动器,位于 samba 共享目录下。出于某种原因,物理上位于该机器主分区上的每个目录都可以正常工作,但安装在不同分区上的其他位置则不能。
-
Marc B,我更新了问题以更好地澄清这一点。
-
我现在有一个解决方法。我可以在直接共享 ext_raid 挂载点的远程机器上设置一个 samba 共享,并且 is_readable() 返回 true。在这一点上,这对我来说似乎是一个 PHP 错误。 is_readable() 似乎不能容忍 samba 共享路径中的跨分区。
-
如果其他人能够在这里验证我的结论,我将接受他们的回答并提交 PHP 错误报告。谢谢!