2012-05-30 8 views
5

Aramalar komut isteminden okunabilen bir dizin üzerinde sahte dönüyor okunabilir samba dizininde başarısız olur. İzinlerin çoğuna izin verdim ve hala şansım yok. PHP is_readable() PHP'nin is_readable() işlevine

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 

şu kod çalıştırma

...

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"; } 

... Sonuçlar ...

share ok 
local ok 
second BAD 
raid BAD 

fiziksel birincil bölüm üzerinde değil samba paylaşımına altında herhangi bir dizinin başarısız gibi görünüyor. şimdi bu çalışma almak için aklıma gelen her şeyi denedim

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 

ve:

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 
uzak makinenin

Yapılandırma ayrıntıları: is_readable() denir makinenin

Yapılandırma ayrıntıları Aptal hissediyorum. :-) Kimseye uygun görünüyorsa, çekirdek konfigürasyonunu sağlayabilirim. Herhangi bir yardım için TEŞEKKÜRLER! Dosya izinlerini belirlemek için access sistem çağrısını sarar ve böylece büyük olasılıkla bir php sorunu olmamasını sağlar.

+0

'second_share'? –

+0

Hayır, uzaktaki makineye samba paylaşım dizininin altında bulunan ikinci bir sürücü. Bir sebepten ötürü, fiziksel olarak o makinedeki ana bölüme yerleştirilmiş her direk çalışır, ancak farklı bölümlere monte edilen başka konumlar yoktur. – moodboom

+0

Marc B, Sorunu daha iyi açıklamak için güncelledim. – moodboom

cevap

1

Bunun için basit bir cevap bulamadık, bu yüzden daha iyi sorunu izini yeni PHP bug ticket yarattı. Tüm girdiler için teşekkürler!

aslında bazı DİĞER ana samba paylaşımına altında, samba payını monte var olduğu gibi,
1

is_readable() Bir çok muhtemel nedeni SELINUX olabilir samba yapılandırma ve dosya izinleri göre

. PHP muhtemelen farklı kullanıcı olarak çalışıyor (CLI isterse apache mod olursa olsun), bu nedenle bu kullanıcı için selinux erişimini reddedebilir.

Yani selinux etkin olup olmadığını kontrol edin ve özürlü bunu veya uygun yapılandırın.

+0

Teşekkürler Sebastian. SELINUX etkin değil. PHP testini komut satırından örnekte "ben" kullanıcısı olarak çalıştırıyorum, yani bu durumda farklı bir kullanıcı değil. Biraz C kodu yazacağım ve erişim() bana ne verdiğini göreceğiz ... – moodboom

+0

erişim iyi çalışıyor gibi görünüyor. code: 'cout << 'erişim R_OK payı:" << erişim ("/ remote/samba_share", R_OK) << endl; cout << "erişim R_OK yerel:" << erişim ("/ remote/samba_share/local_dir", R_OK) << endl; cout << "erişim R_OK saniye:" << erişim ("/ remote/samba_share/second_drive", R_OK) << endl; cout << "erişim R_OK baskısı:" << erişim ("/ remote/samba_share/ext_raid", R_OK) << endl; ' sonucu: 'erişim R_OK payı: Yerel 0' ' erişim R_OK: İkinci 0' 'erişim R_OK: 0' ' erişim R_OK baskını: 0' ben Zend Motoru koduna kazmak gerekiyor galiba erişim() çağrısı ...? – moodboom

+0

@sebastian: CLI modundayken, kullanıcı kimlikleri arasında değişiklik yapmak için kök izinleri gerektiğinde, php farklı bir kullanıcı olarak çalışıyor olabilir. –