PHP के माध्यम से किसी फ़ाइल को कैसे हटाएं?


174

यदि PHP किसी अन्य निर्देशिका में है तो मैं अपने सर्वर से एक फ़ाइल को कैसे हटा सकता हूँ?

यहाँ मेरा पेज लेआउट है:

  • projects/backend/removeProjectData.php (यह फ़ाइल डेटाबेस के लिए मेरी सभी प्रविष्टियाँ हटा देती है और संबंधित फ़ाइल को भी हटा देना चाहिए)
  • public_files/22.pdf (वह स्थान जहाँ फ़ाइल स्थित है।)

मैं unlinkफ़ंक्शन का उपयोग कर रहा हूं :

unlink('../../public_files/' . $fileName);

लेकिन यह हमेशा मुझे एक त्रुटि देता है कि फ़ाइल मौजूद नहीं है। कोई विचार?


2
<pre> निरपेक्ष पथ का उपयोग करें </ pre>
पावुनकुमार

1
यदि आप वास्तविक पथ का उपयोग करके जांच नहीं करते हैं, तो आपको "प्राप्त" होने की संभावना है। और ".." गैर-फ़ाइलें भी, क्योंकि फ़ाइल में त्रुटियां नहीं होती हैं
DrogoNevets

1
लेकिन सावधान रहें, यदि आपकी फ़ाइल में कई फ़ाइल नाम / सिमलिंक हैं, तो यह वास्तव में आपकी फ़ाइल को हटा नहीं सकता है! अधिक जानकारी के लिए इस सूत्र को देखें: stackoverflow.com/q/17548906/1114320
सालीक

जवाबों:


228

निम्नलिखित मदद करनी चाहिए

  • realpath - निरपेक्ष निरपेक्ष नाम वापसी
  • is_writable - बताता है कि क्या फ़ाइल नाम लिखने योग्य है
  • unlink - फाइल डिलीट करता है

Realpath के माध्यम से अपने फ़ाइलपथ को चलाएं, फिर जांचें कि क्या वापस लौटाया गया पथ लिखित है और यदि ऐसा है तो उसे अनलिंक करें।


7
मुझे आश्चर्य है कि w3shools यह कैसे कर रहा है? w3schools.com/php/func_filesystem_delete.asp
Fr0zenFyr

3
@Gordon मैं माफी चाहता हूँ .. मैंने गलत शब्द का इस्तेमाल किया जिससे बहुत फर्क पड़ता है .. मैं मानता हूँ कि यह मूर्खतापूर्ण था .. लेकिन मैंने जो कोशिश की उसका मतलब कोडिंग उदाहरण अधिक उपयोगी होगा .. अगर मुझे तीन अन्य लिंक पर जाने की आवश्यकता है आपके उत्तर को समझने के लिए यह बहुत उपयोगी है? .. गलत शब्द के लिए फिर से प्रयास करें .. मैं अंग्रेजी बोलने वाले देश से नहीं हूं ... हालांकि यह एक बहाना नहीं हो सकता ...
ऋतब्रत गौतम

13
@RitabrataGautam "अगर मुझे आपके उत्तर को समझने के लिए तीन अन्य लिंक पर जाने की आवश्यकता है तो क्या यह बहुत उपयोगी है?" - हाँ यही है। क्योंकि लिंक पर जाने के बाद आप समझ गए होंगे कि यह कैसे काम करता है। अगर मैं आपको सिर्फ कोड देता हूं, तो आप समझ नहीं पाएंगे लेकिन सिर्फ कॉपी और पेस्ट करें। तब आपने क्या सीखा? कुछ भी तो नहीं। इसके अलावा, उस के लिए कोड बहुत तुच्छ है।
गॉर्डन

1
@Gordon .. मैं सहमत हूँ .. आपके विचार सम्मान की मांग करते हैं .. आपने इसे # 185K अर्जित किया है .. सिर्फ दो त्वरित प्रश्न ... 1> यदि मैं आपके उत्तर को पूर्ण मानता हूं तो यहां कई मध्यस्थ यह कहते हैं कि आपको कुछ कोड भी प्रदान करना चाहिए ... न केवल लिंक (यह कई डाउन वोट का कारण बनता है) ... 2> यह बेहतर नहीं होगा अगर यू कुछ कोड डालते हैं। अब जिनके पास सीखने की प्रवृत्ति है, वे निश्चित रूप से उन लिंक पर जाएंगे और जिनके पास नहीं है कि वे फिर से तैयार कोड प्राप्त करने के लिए Google पर जाएंगे।
ऋतब्रत गौतम

2
उत्तर मेरे लिए काफी आगे सीधा लग रहा था: लेकिन कोड उदाहरण जो आप चाहते थे: $ path = realpath ('../../ public_files /'। $ fileName); अगर (is_writable ($ पथ)) {अनलिंक ($ पथ);}
me_

102
$files = [
    './first.jpg',
    './second.jpg',
    './third.jpg'
];

foreach ($files as $file) {
    if (file_exists($file)) {
        unlink($file);
    } else {
        // File not found.
    }
}

11
file_existsफ़ंक्शन का उपयोग करने के लिए अप-वोट किया गया । अन्यथा आप एक त्रुटि प्राप्त करने जा रहे हैं यदि फ़ाइल मौजूद नहीं है।
Mahdi

17

फ़ाइल पर सबसे पहले अपनी अनुमतियों की जांच करें, यह सुनिश्चित करने के लिए कि आप) इसे अपनी स्क्रिप्ट से देख सकते हैं, और b) इसे हटाने में सक्षम हैं।

आप उस निर्देशिका से गणना की गई पथ का उपयोग कर सकते हैं जिस पर आप वर्तमान में स्क्रिप्ट चला रहे हैं, जैसे:

unlink(dirname(__FILE__) . "/../../public_files/" . $filename);

(PHP 5.3 में मेरा मानना ​​है कि आप __DIR__इसके बजाय स्थिरांक का उपयोग कर सकते हैं dirname()लेकिन मैंने अभी तक इसका उपयोग नहीं किया है)


मैंने अनुमतियों की जाँच की और मैं पहले फ़ाइल को देख नहीं पा रहा था, लेकिन अब सब कुछ रियलपैथ के लिए धन्यवाद का काम करता है। सलाह के लिए धन्यवाद
केन

7

आप फ़ाइल का उपयोग करके हटा सकते हैं

unlink($Your_file_path);

लेकिन अगर आप http पथ से किसी फ़ाइल को हटा रहे हैं तो यह अनलिंक उचित काम नहीं है। आपको एक फ़ाइल पथ सही देना होगा।


4

AIO समाधान, सब कुछ संभालता है, यह मेरा काम नहीं है लेकिन मैंने सिर्फ अपने आप को बेहतर किया है। का आनंद लें!

/**
 * Unlink a file, which handles symlinks.
 * @see https://github.com/luyadev/luya/blob/master/core/helpers/FileHelper.php
 * @param string $filename The file path to the file to delete.
 * @return boolean Whether the file has been removed or not.
 */
function unlinkFile ( $filename ) {
    // try to force symlinks
    if ( is_link ($filename) ) {
        $sym = @readlink ($filename);
        if ( $sym ) {
            return is_writable ($filename) && @unlink ($filename);
        }
    }

    // try to use real path
    if ( realpath ($filename) && realpath ($filename) !== $filename ) {
        return is_writable ($filename) && @unlink (realpath ($filename));
    }

    // default unlink
    return is_writable ($filename) && @unlink ($filename);
}

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

: एक कक्षा में अपने एक सार्वजनिक स्थैतिक समारोह, अनलिंक एक वैध समारोह नाम है, तो 3v4l.org/MgA2l
नादार

हाँ, लेकिन वर्तमान परिदृश्य में, स्टैंडअलोन एक बेहतर विकल्प है।
जुनैद अटारी

1

मुझे पता है कि यह सवाल थोड़ा पुराना है, लेकिन यह कुछ सरल है जो मेरे प्रोजेक्ट पर काम कर रही छवियों को हटाने के लिए मेरे लिए बहुत अच्छा काम करता है।

unlink(dirname(__FILE__) . "/img/tasks/" . 'image.jpg');

dirname(__FILE__)अनुभाग अपनी परियोजना के लिए आधार पथ बाहर प्रिंट करता है। /img/tasks/मेरी आधार पथ से दो फ़ोल्डर्स नीचे हैं। और अंत में, मेरी छवि है जिसे मैं हटाना चाहता हूं जिसे आप अपनी आवश्यकता के अनुसार बना सकते हैं।

इसके साथ मुझे अपने सर्वर पर अपनी फ़ाइलों को प्राप्त करने और उन्हें हटाने में कोई समस्या नहीं हुई है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.