PHP is_readable() 在可读 samba 目录上失败

标签 php samba cifs

调用 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

我已经尝试了所有我能想到的方法来让它工作,但现在我觉得自己很蠢。 :-) 如果这对任何人都有意义,我也可以提供内核配置。感谢您的帮助!

最佳答案

is_readable() 只是包装了 access确定文件权限的系统调用,因此很可能不是 PHP 问题。

根据 samba 配置和文件权限,一个很可能的原因可能是 SELINUX。 PHP 可能以不同的用户身份运行(无论 CLI 是否是 apache mod),所以可能是 selinux 拒绝此用户的访问。

因此检查 selinux 是否启用和禁用它或适当配置它。

关于PHP is_readable() 在可读 samba 目录上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10818770/

相关文章:

php - 为什么使用 mysqli_close()?

PHP 联赛/路线发布请求对象

php - 数据库不更新行

c - 用于 samba 共享的 Linux fopen() 语法

windows - 在 go 中提供 samba 文件的矛盾性能

linux - mkdir : cannot create directory: No such file or directory - cifs windows shared folder

windows - 指向 Samba 共享目录的 HTML 链接,适用于 Internet Explorer 7/8

linux - mount -t cifs 适用于一个版本的 linux 而不是另一个

php - 在 PHP 中从 SQL 数据库创建下拉列表

python - 意外 apt-get remove python 后如何恢复