Вызовы функции is_readable () PHP возвращают 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()
просто обертывает системный вызов доступа, чтобы определить разрешение файла, поэтому это скорее всего не проблема php.
В соответствии с конфигурацией samba и разрешениями файлов очень вероятной причиной может быть SELINUX. PHP, вероятно, работает как другой пользователь (неважно, если CLI wether apache mod), поэтому может быть, что selinux запрещает доступ для этого пользователя.
Поэтому проверьте, включено ли selinux и отключено ли оно, или настройте его соответствующим образом.
Я не нашел для этого простого ответа, поэтому я создал новый биг-код PHP, чтобы лучше отслеживать проблему. Спасибо за весь вход!