2011-02-10 28 views
9

Tôi đang tìm cách xóa tệp khỏi máy chủ bằng cách sử dụng PHP. Về cơ bản tôi có tác phẩm của tôi được liệt kê trên một trang theo cách này:Xóa tệp máy chủ

<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> 

Vấn đề là tôi không chắc chắn làm thế nào để có được file delete_file.php của tôi để làm việc. Tôi tin rằng nó cần phải là một cái gì đó như thế này:

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

... nhưng tôi không chắc chắn làm thế nào để có được đường dẫn $ để thay đổi tập tin tôi đã bấm vào để xóa.

+0

bạn muốn $ _GET [ 'file'], và điều này thật điên rồ khi tôi có thể thêm một tệp vào url và xóa nó đi. –

+11

Nếu ai đó vượt qua 'delete_file.php? File = delete_file.php' thì sao? – zerkms

Trả lời

16

trong khi bạn phải hết sức cẩn thận với khả năng xóa tệp của người dùng, tôi sẽ cung cấp cho bạn đủ dây để treo mình

xác định một thư mục cơ sở sẽ chứa bất kỳ tập tin đó sẽ bị xóa

$base_directory = '/home/myuser/'; 

Sau đó, xóa các tập tin

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

Có thể là một ý tưởng hay để không cho phép truyền tải thư mục. – drudge

+0

Cảm ơn vì điều đó. Làm việc một điều trị. Bạn có nghĩa là không cho phép duyệt thư mục? – PHPnoob

+0

nếu ai đó chuyển URL này: '/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"; 

    } 
?> 

Tôi sẽ không nói dối, không biết cách tốt hơn để vệ sinh $ _GET ['tệp'] ngoài kiểm tra xem đó có phải là tệp hay không. Nếu đây không phải là cách hợp lệ, các chuyên gia vui lòng tham gia. (Có thể thực hiện theo các hướng dẫn present in this SO topic?)

+0

mức độ khử trùng mà bạn sẽ phải làm để bảo vệ bản thân sẽ vô lý với chức năng này được cung cấp cho bất kỳ người dùng cuối nào. Vì vậy, tôi sẽ để lại cho OP :-) – Patrick

+3

Làm sạch nó với ['basename()'] (http://php.net/basename) để giữ cho người đó nhập một cái gì đó như '../../someotherfile '. – Jonah

+0

một prbolem nhỏ khác, bạn đã quên ')' trước ';' trên dòng có 'echo', nhưng mọi thứ khác là tốt –

Các vấn đề liên quan