使用php删除文件的按钮

时间:2013-03-06 14:17:26

标签: php loops delete-file

我有一个php循环,显示目录中的所有文件:

<?php

    // Define the full path to your folder from root
    $filepath =  'castlewp/cv/'; // The place the files will be uploaded to.
    $path = $_SERVER['DOCUMENT_ROOT'] . $filepath;

    // Open the folder
    $dir_handle = @opendir($path) or die("Unable to open $path");

    // Loop through the files
    while ($file = readdir($dir_handle)) {

    if($file == "." || $file == ".." || $file == "index.php" || $file == ".htaccess" || $file == ".htpasswd" )

        continue;
        echo "<li><a href=\"$file\">$file</a></li>";

    }
    // Close
    closedir($dir_handle);
?>

我正在尝试找到一种方法,在每个文件旁边添加一个按钮来删除文件。我一直在使用php unlink,但到目前为止我只能在一个人访问脚本时删除所有文件,这不是我想要的。

据我所知,这是一个相当简单的事情,但我对PHP的了解很少,所以任何建议都会受到赞赏。

3 个答案:

答案 0 :(得分:1)

尝试,注意:您必须修复li标记中的网址以匹配您的网址

<?php
// Define the full path to your folder from root
$filepath =  'castlewp/cv/'; // The place the files will be uploaded to.
$path = $_SERVER['DOCUMENT_ROOT'] . $filepath;

// check if a file is send via GET variable
if (isset($_GET['file'])) {
$fullpath = $path.$file;
// check if file exists
if(file_exists($fullpath)) {
    unlink($fullpath);  
} else {
    // add some error handling here
} 
}

// Open the folder
$dir_handle = @opendir($path) or die("Unable to open $path");

// Loop through the files
while ($file = readdir($dir_handle)) {

if($file == "." || $file == ".." || $file == "index.php" || $file == ".htaccess" || $file == ".htpasswd" )

    continue;
    echo "<li><a href=\"yoururl?file=$file\">$file</a></li>";

}
// Close
closedir($dir_handle);

&GT;

答案 1 :(得分:1)

创建另一个脚本并通过GET参数将文件名传递给它,并在当前文件中添加如下内容:

if($file == "." || $file == ".." || $file == "index.php" || $file == ".htaccess" || $file == ".htpasswd" )

    continue;
    echo "<li><a href=\"$file\">$file</a></li>";
    echo "<a href=\"delete.php?f={$file}\">Delete</a>";

然后在你的delete.php文件中复制一些现有代码并修改它以删除文件:

$filepath =  'castlewp/cv/'; // The place the files will be uploaded to.
$path = $_SERVER['DOCUMENT_ROOT'] . $filepath;
if(empty($_GET['f']))
  exit();
$file = str_replace(array('/', '..'), '', $_GET['f']);
$filePath = realpath($path.$file);
if($filePath !== FALSE)
  unlink($filePath);

以此为例。你仍然需要添加一些安全性,但我认为这是一个起点。

答案 2 :(得分:1)

首先:正确格式化代码。我建议你使用间距和/或额外的括号来使你的代码更具可读性。 continue语句是唯一在满足if条件时执行的语句,但您的源格式不会这样认为。

您忘记了列表中的<ul><ol>标记。检查W3C标准列表。

一个简单的实现基于带有提交按钮的元素。这是简单的HTML。在表单中插入

  • 元素,每个元素都带有“删除”按钮。指定表单的目标。

    生成此(或类似)html:

    <form action="myfilemanager.php" method="post" name"=formfilemanager">
        <ul>
          <li>filename1.dat <input type="submit" name="filename1.dat" value="delete"/></li>
          <li>filename2.dat <input type="submit" name="filename2.dat" value="delete"/></li>
          ....
        </ul>
    </form>
    

    当你按下filename2.dat的“删除”按钮时,你会在$ _POST global上找到一些参数:

    filename2.dat=delete
    

    如果像这样循环$ _POST数组

    foreach($_POST as $k=>$v) {
        if($v=='delete') { 
          // $k contains the file name to delete
          // SANITIZE you input, remove '..','%', whatever
          $k=str_replace(array('%','|','/','..'),'',$k);
          unlink($filepath.$k);
        }
    }