2012-11-27 15 views
19

मैं दो फ़ाइलें: b.php और test.txtअनुमति नहीं दी - php को अनलिंक

<?php 
$b = "test.txt"; 
unlink($b); 
?> 

और त्रुटि है: [function.unlink] अनलिंक (test.txt):: चेतावनी अनुमति अस्वीकृत

क्यों? b.php और test.txt 777 है और एक ही समूह/लॉगिन

यदि मैं मूल निर्देशिका पर 777 सेट करता हूं तो मैं अनलिंक निष्पादित कर सकता हूं लेकिन मुझे 777 और 755 पर वापस सेट करना होगा?

+1

क्या वे टी में हैं वह वही निर्देशिका है? –

+1

यह हो सकता है कि आपको उस निर्देशिका के लिए लिखने की अनुमति की आवश्यकता हो जो वे PHP कोड चलाते हैं। –

+0

हाँ, एक ही निर्देशिका – eugui

उत्तर

19

आप (b.php चलाते हैं, या तो आप CLI या वेबसर्वर के माध्यम से) निर्देशिका में उस निर्देशिका तक पहुंच लिखने की आवश्यकता है जिसमें फाइलें स्थित हैं। आप निर्देशिका सामग्री को अपडेट कर रहे हैं, इसलिए फ़ाइल तक पहुंच पर्याप्त नहीं है।

ध्यान दें कि यदि आप किसी फ़ाइल या 777 करने के लिए फ़ोल्डर के मोड सेट करने पीएचपी chmod() फ़ंक्शन का उपयोग आप 0777 का उपयोग करना चाहिए यकीन है कि नंबर सही तरीके से किसी ऑक्टल संख्या के रूप में व्याख्या की है बनाने के लिए।

3
// Path relative to where the php file is or absolute server path 
chdir($FilePath); // Comment this out if you are on the same folder 
chown($FileName,465); //Insert an Invalid UserId to set to Nobody Owner; for instance 465 
$do = unlink($FileName); 

if($do=="1"){ 
    echo "The file was deleted successfully."; 
} else { echo "There was an error trying to delete the file."; } 

इसे आजमाएं। आशा करता हूँ की ये काम करेगा।

+1

chown() [function।chown]: ऑपरेशन की अनुमति नहीं है – eugui

+0

यह शायद इसलिए है क्योंकि आपको फ़ाइल के स्वामित्व को बदलने का अधिकार नहीं है। क्या आप यह देखने के लिए फ़ाइल में अनुमतियों को बदलने की कोशिश कर सकते हैं कि यह बदलता है या नहीं? (उदाहरण के लिए chmod ("test.txt", 0666)। आप 666 पर यह देखने के लिए संभवतः कोशिश कर सकते हैं और अनलिंक कर सकते हैं कि क्या होता है। क्या वहां कोई उपयोगकर्ता है जो फ़ाइल का मालिक है? – Ardi

17

आपको पहले fclose($handle); का उपयोग करके फ़ाइल को बंद करने की आवश्यकता होगी क्योंकि यह उपयोग नहीं हो रहा है क्योंकि फ़ाइल उपयोग में है। तो पहले फ़ाइल बंद करें और फिर कोशिश करें।

+0

यह मेरी समस्या हल करता है, धन्यवाद ओ / – heavyrick

0

फ़ाइल अनुमति ठीक है (0777) लेकिन मुझे लगता है कि साझा सर्वर पर, इसलिए आपकी फ़ाइल को सही ढंग से उपयोग करने के लिए; 1. आपकी फ़ाइल

// delete from folder 
$filename = 'test.txt'; 
$ifile = '/newy/made/link/uploads/'. $filename; // this is the actual path to the file you want to delete. 
unlink($_SERVER['DOCUMENT_ROOT'] .$ifile); // use server document root 
// your file will be removed from the folder 

करने के लिए एक सही रास्ता बनाने के छोटे कोड जादू करते हैं और किसी भी चयनित फ़ाइल आप चाहते हैं किसी भी फ़ोल्डर से वास्तविक फ़ाइल पथ प्रदान की निकाल देंगे कलेक्ट है।

0

सभी जवाब है कि अन्य दोस्तों, अगर किसी को जो इस पोस्ट की तलाश में है एक नष्ट करने के लिए एक तरह से की तलाश में है के अलावा "फ़ोल्डर" नहीं एक "फाइल", देखभाल कि फ़ोल्डर php rmdir() function से हटाना होगा लेना चाहिए और अगर यू एक "फ़ोल्डर" unlink() से हटाना चाहते हैं, यू एक गलत चेतावनी संदेश है कि कहते हैं के साथ सामना करना पड़ा होगा "अनुमति अस्वीकृत"

तथापि u फ़ोल्डर mkdir() द्वारा & फ़ाइलें बना सकते हैं लेकिन जिस तरह से यू फ़ोल्डर हटा (rmdir()) है फ़ाइलों को हटाने के तरीके से अलग (unlink())

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