2013-03-02 6 views
5

मुझे एक चित्र अपलोड करने वाली स्क्रिप्ट के साथ समस्याएं आ रही हैं।php chmod() अनुमतियों को बदल नहीं रहा

मुझे पता है कि सैकड़ों प्रश्न हैं, लेकिन मुझे वह नहीं मिला जो मेरे लिए काम करेगा।

$upload_dir = "images/postcards/"; 
chmod($upload_dir, 777); 
if (is_writable($upload_dir)) { 
    echo 'The file is writable'; 
} else { 
    echo 'The file is not writable'; 
} 

यह हमेशा रिटर्न उस फ़ाइल है "लिखने योग्य नहीं"

मैं 0777 और -rwxrwxrwx करने के लिए chmod स्थापित करने की कोशिश की। लेकिन परिणाम हमेशा एक ही था। कोई विचार?

+1

दशमलव '777' के मामले में यह गलत है। आपको हमेशा '0' चेक के साथ उपसर्ग करना चाहिए [chmod] (http://php.net/manual/en/function.chmod.php)। –

उत्तर

9

निर्देशिका को स्क्रिप्ट का उपयोग करने वाले उपयोगकर्ता के स्वामित्व में होना चाहिए (आमतौर पर www-data, apache या httpd यदि आप अपाचे/* NIX सेटअप में स्क्रिप्ट चला रहे हैं)। कोई उपयोगकर्ता उन निर्देशिकाओं पर 777 अनुमतियां सेट नहीं कर सकता है, जिनके पास यह स्वामित्व नहीं है।

) manual chmod (पर टिप्पणी देखें:

वर्तमान उपयोगकर्ता उपयोगकर्ता जिसके तहत पीएचपी चलाता है। यह शायद नहीं है जो आप सामान्य शेल या एफ़टीपी एक्सेस के लिए उपयोग करते हैं। मोड बदल सकता है केवल उपयोगकर्ता द्वारा अधिकांश सिस्टम पर फ़ाइल का मालिक है।

+0

बिंदु के साथ सहमत 'निर्देशिका उपयोगकर्ता के स्वामित्व में होना चाहिए'। त्रुटि रिपोर्टिंग चीज़ के लिए –

2

पहले, अपने कोड के शीर्ष पर दो पंक्ति जोड़कर खुला पीएचपी error_report, अगर वहाँ chmod से आ रही एक त्रुटि है देखें:

ini_set('display_errors', true); 
error_reporting(E_ALL); 

, सुनिश्चित करें कि आपके वेबसर्वर कि निर्देशिका करने की अनुमति है को मेरा अनुमान है कि वेबसेवर की अनुमति नहीं है।

+0

ओएमजी बहुत बहुत धन्यवाद। मैं PHP के लिए त्रुटि रिपोर्टिंग प्राप्त करने के लिए क्रोम लॉगर जैसी चीजों को स्थापित करने की कोशिश कर दीवार के खिलाफ अपने सिर को झुका रहा था। – user124384

0

मैं पहले से ही एक ही समस्या आप इस कोड से फ़ाइल की अनुमति को बदल सकते हैं था:

<?php 
$ftp_details['ftp_user_name'] = 'your ftp username'; 
$ftp_details['ftp_user_pass'] = 'your ftp password'; 
$ftp_details['ftp_root'] = '/public_html/'; 
$ftp_details['ftp_server'] = 'ftp' . $_SERVER['HTTP_HOST']; 
function ftp_chmod($path, $mod, $ftp_details) { 
    extract($ftp_details); 
    $conn_id = ftp_connect($ftp_server); 
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

// try to chmod $path directory 
    if (ftp_site($conn_id, 'CHMOD ' . $mod . ' ' . $ftp_root . $path) !== false) { 
    $success = true; 
    } 
    else { 
    $success = false; 
    } 

    ftp_close($conn_id); 
    return $success; 
} 
?> 

मैं इस कोड नहीं चला लेकिन मुझे लगता है यह ठीक है और यह आपकी मदद करेगा। मुझे बताएं कि आपकी समस्याएं हल हो गई हैं या नहीं।

0

मुझे chmod का उपयोग करके समान परेशानी हो रही थी, हालांकि फ़ाइल अपाचे द्वारा स्वामित्व में थी: apache (webserver उपयोगकर्ता)। मेरे मामले में SELinux रास्ते में आ गया था, उसे अक्षम करना यह स्पष्ट कर दिया:

sudo setenforce 0

और chmod काम करता है। अब इस मामले के लिए SELinux अपवाद बनाने का तरीका जानने के लिए ... (और निश्चित रूप से SELinux को सक्षम करना न भूलें)

+0

इसे और अधिक व्यापक बनाने के लिए अपने उत्तर में सुधार करें। –

+0

यह मेरे विशिष्ट मामले के लिए सबसे अच्छा जवाब है क्योंकि मेरे पास फ़ाइल के लिए सही उपयोगकर्ता और समूह सेट था। सर्वर कॉन्फ़िगरेशन के विषय पर भी, मैंने यह भी पाया कि मेरे वेबसर्वर के लिए एक नया 'उमास्क' सेट करना सबसे अच्छा विकल्प था: http://serverfault.com/a/384922/185510 – RibeiroBreno

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