调用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
我已经尝试了一切我能想到的工作,现在我感到愚蠢。 :-)如果这似乎与任何人相关,我也可以提供内核配置。感谢任何帮助!
答案 0 :(得分:1)
is_readable()
只包装access系统调用以确定文件权限,因此很可能不是php问题。
根据samba配置和文件权限,一个很可能的原因可能是SELINUX。 PHP可能作为不同的用户运行(无论CLI是否使用apache mod),所以可能就是这样 selinux拒绝该用户访问。
因此,检查selinux是否已启用并禁用它或配置它是否合适。
答案 1 :(得分:1)
我没有找到一个简单的答案,所以我创建了一个新的PHP bug ticket来更好地追踪问题。感谢所有的投入!