我有一个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的了解很少,所以任何建议都会受到赞赏。
答案 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);
}
}