1

我想在 php 中编写一个代码,该代码转到目录“上传”,看看是否是我的数据库中不存在的文件,如果找到则删除该文件。

$like = scandir(upload);
$myFile1 = upload; 
$myFile1 .= '/'; 
$myFile1 .= $like; 


$rs = mysql_query('SELECT url from blog');
while(list($url) = mysql_fetch_row($rs))
{
if($like != $url){
unlink($myFile1);
}

}

它给我写了一个错误警告:unlink(upload/Array) [function.unlink]:

4

1 回答 1

2

scandir返回一个文件数组;您需要逐步检查该数组,以单独检查每个数组:

$like = scandir('upload');

foreach ($like as $thisFile) {
    $rs = mysql_query("SELECT url FROM blog WHERE url='$thisFile'");
    if (! mysql_num_rows($rs)) {
if($thisFile != "." and $thisFile != ".."){
         unlink ('upload/' . $thisFile);
}

    }
}

您正在检查该目录中的每个文件以查看它是否在blog表中有条目;如果没有,则将其传递给取消链接。我没有测试过这段代码,但它应该能让你了解它是如何运行的。

几点注意事项:

  1. 如果目录中有目录怎么办?您应该添加一些检查以跳过它们。不要忘记你将拥有./../在那里。

  2. 如果 of 中有一个条目blog..\..\..\..\etc\passwd​​么办?您应该添加一些检查以确保这$thisFile不是您不想删除的内容。

  3. 这是使用mysql;这已被弃用,您应该考虑迁移到查询mysqliPDO查询。然后,您还可以将查询转换为准备好的语句,这将有助于它更有效地运行。

于 2013-04-09T16:47:30.503 回答