2012-05-30 13 views
5

पर विफल रहता है PHP के is_readable() फ़ंक्शन पर कॉल कमांड प्रॉम्प्ट से पठनीय निर्देशिका पर झूठी लौट रहे हैं। मैंने अनुमतियों को सबसे अधिक स्वीकार्य में बदल दिया है और अभी भी कोई भाग्य नहीं है।PHP is_readable() पठनीय सांबा निर्देशिका

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 

साम्बा शेयर के तहत किसी भी निर्देशिका है कि शारीरिक प्राथमिक विभाजन पर नहीं है असफल लगता है।

कॉन्फ़िग मशीन का ब्यौरा जहां 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

'second_share', जैसा कि वास्तव में कुछ अन्य आरोपी सांबा शेयर है, मुख्य सांबा शेयर के नीचे? –

+0

नहीं, यह सांबा शेयर निर्देशिका के अंतर्गत स्थित दूरस्थ मशीन पर एक दूसरा ड्राइव है। किसी कारण से, उस मशीन पर प्राथमिक विभाजन पर भौतिक रूप से स्थित प्रत्येक डीआईआर काम करता है, लेकिन अलग-अलग विभाजनों पर लगाए गए अन्य स्थान नहीं हैं। – moodboom

+0

मार्क बी, मैंने इस बेहतर को स्पष्ट करने के लिए प्रश्न अपडेट किया। – moodboom

उत्तर

1

मुझे इसके लिए कोई आसान जवाब नहीं मिला, इसलिए मैंने समस्या को बेहतर तरीके से ट्रैक करने के लिए एक नया PHP bug ticket बनाया। सभी इनपुट के लिए आपको धन्यवाद!

1

is_readable() फ़ाइल अनुमति निर्धारित करने के लिए बस access सिस्टम कॉल को लपेटता है, इसलिए यह संभवतः एक PHP समस्या नहीं है।

सांबा कॉन्फ़िगरेशन और फ़ाइल अनुमतियों के अनुसार एक बहुत ही संभावित कारण SELINUX हो सकता है। PHP शायद अलग उपयोगकर्ता के रूप में चल रहा है (कोई फर्क नहीं पड़ता कि सीएलआई गीले अपाचे मोड), तो यह हो सकता है कि सेलेनक्स इस उपयोगकर्ता के लिए पहुंच से इंकार कर देता है।

तो जांचें कि क्या सेलिनक्स सक्षम है और इसे अक्षम कर दिया गया है या इसे उचित कॉन्फ़िगर करें।

+0

धन्यवाद सेबेस्टियन। मेरे पास SELINUX सक्षम नहीं है। मैं उदाहरण में "मुझे" उपयोगकर्ता के रूप में कमांड लाइन से PHP परीक्षण चला रहा हूं, इसलिए यह उस मामले में एक अलग उपयोगकर्ता नहीं है। मैं कुछ सी कोड लिखूंगा और देख सकता हूं कि कौन सी पहुंच() मुझे देता है ... – moodboom

+0

पहुंच ठीक काम करने लगती है। कोड: 'cout <<" पहुंच R_OK साझा करें: "<< एक्सेस ("/दूरस्थ/samba_share ", R_OK) << endl; cout << "R_OK स्थानीय एक्सेस करें:" << एक्सेस ("/ रिमोट/samba_share/local_dir", R_OK) << endl; cout << "पहुंच R_OK दूसरा:" << एक्सेस ("/ दूरस्थ/samba_share/second_drive", R_OK) << endl; cout << "पहुंच R_OK RAID:" << एक्सेस ("/ दूरस्थ/samba_share/ext_raid", R_OK) << endl; ' परिणाम: 'पहुँच R_OK साझा करें: 0' ' पहुँच R_OK स्थानीय: 0' 'पहुँच R_OK दूसरा: 0' ' पहुँच R_OK छापे: 0' मुझे लगता है मैं के लिए जेंड इंजन कोड में खुदाई करने के लिए की जरूरत है एक्सेस() कॉल ...? – moodboom

+0

@ सेबेस्टियन: सीएलआई मोड में जब यह बहुत ही असंभव PHP एक अलग उपयोगकर्ता के रूप में चल रहा है - रूट आईडी को उपयोगकर्ता आईडी के बीच बदलने की आवश्यकता होती है। –

संबंधित मुद्दे