2011-02-10 13 views
9

हटाना मैं PHP का उपयोग कर सर्वर से फ़ाइल को हटाने का एक तरीका ढूंढ रहा हूं। मूल रूप से मैं इस तरह से एक पृष्ठ पर सूचीबद्ध मेरी फ़ाइलें:एक सर्वर फ़ाइल

<ul> 
    <li><a href="delete_file.php?file=uploads/file_01.jpg">Delete File 01</a></li> 
    <li><a href="delete_file.php?file=uploads/file_02.jpg">Delete File 02</a></li> 
    <li><a href="delete_file.php?file=uploads/file_03.jpg">Delete File 03</a></li> 
</ul> 

समस्या मुझे यकीन है कि कैसे मेरे delete_file.php फ़ाइल काम करने के लिए प्राप्त करने के लिए नहीं कर रहा हूँ है। मेरा मानना ​​है कि यह कुछ इस तरह की जरूरत है:

<?php 
    $path="uploads/file_01.jpg"; 
    if(unlink($path)) echo "File Deleted"; 
?> 

... लेकिन मुझे यकीन है कि $ पथ फ़ाइल मैं नष्ट करने के लिए पर क्लिक किया था करने के लिए बदलने के लिए पाने के लिए नहीं कर रहा हूँ।

+0

आप $ _GET चाहते हटाना हटा दिया जाएगा किसी भी फाइल में शामिल होंगे परिभाषित [ 'फ़ाइल'], और यह पागल है क्योंकि मैं यूआरएल में एक फाइल जोड़ सकता हूं और इसे हटा देता हूं। –

+11

क्या होगा अगर कोई 'delete_file.php? File = delete_file.php' पास करे? – zerkms

उत्तर

16

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

एक आधार निर्देशिका कि कि

$base_directory = '/home/myuser/'; 

फिर फ़ाइल

if(unlink($base_directory.$_GET['file'])) 
    echo "File Deleted."; 
+1

निर्देशिका ट्रैवर्सल को अस्वीकार करने का एक अच्छा विचार हो सकता है। – drudge

+0

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

+0

क्या होगा अगर कोई इस यूआरएल को पास करता है: '/delete_file.php?file = ../../etc/passwd' – drudge

2
<?php 
    $file_to_delete = $_GET['file']; 
    if (is_file($file_to_delete)){ 
    echo (unlink($file_to_delete) ? "File Deleted" : "Problem deleting file"; 

    } 
?> 

मैं झूठ नहीं जा रहा हूँ, जाँच से अगर यह एक फ़ाइल है अन्य $ _GET [ 'फ़ाइल'] को साफ़ करने में एक बेहतर तरीका पता नहीं है। यदि यह वैध तरीका नहीं है, तो विशेषज्ञों का ध्यान रखें। (शायद present in this SO topic दिशानिर्देशों का पालन करें?)

+0

स्वच्छता की मात्रा जिसे आप स्वयं को बचाने के लिए करना चाहते हैं, किसी भी अंतिम उपयोगकर्ता को दी गई कार्यक्षमता के साथ हास्यास्पद होगा। तो मैं इसे ओपी में छोड़ दूंगा :-) – Patrick

+3

व्यक्ति को '../../someotherfile जैसे कुछ दर्ज करने से रोकने के लिए [' basename() '] (http://php.net/basename) से साफ़ करें '। – Jonah

+0

एक और छोटा प्रोबोलेम, आप 'echo' कहां से' '' '' 'भूल गए हैं, लेकिन अन्य सभी ठीक है –

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