2013-04-09 64 views
0

我想在php中编写代码 转到目录“上传”,看看是否存在不存在于我的分区 中的文件,如果找到该文件,请将其删除。如何删除不存在显示在db中的文件

$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); 
} 

} 

其写我eror 警告:取消关联(上传/阵列)[function.unlink]:

+1

您能否将您的代码添加到问题中? – andrewsi 2013-04-09 16:15:25

+0

随着你指定的内容..使用Cronjob,这是所有你从我得到,直到你指定的代码,你已经尝试过,什么是行不通的+所有的例子 – 2013-04-09 16:16:04

+0

'我写我的代码,并在我的网站它给我这个错误'什么错误? – 2013-04-09 16:18:49

回答

0

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. 如果..\..\..\..\etc\passwdblog中有条目,该怎么办?您应该添加一些检查以确保$thisFile不是您不想删除的内容。

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

+0

1.我没有在目录中的目录2.谢谢你,但我仍然需要在你的代码$ thisFile中的一些东西,我想也许在你的代码之前/之后添加{}。 – TheQuestionerMan 2013-04-09 18:05:39

+0

@ user2262606 - 您将始终在目录中具有'.'和'..' - 它们是指向当前目录及其父目录的指针。我不确定你的第二点意味着什么,恐怕。 – andrewsi 2013-04-09 18:07:10

+0

好吧tnx其工作我只是改变$像= scandir('上传'); foreach($ like as thisFile){ $ rs = mysql_query(“SELECT URL FROM blog WHERE url ='$ thisFile'”);如果(!mysql_num_rows($ rs)){ if($ thisFile!=“。”and $ thisFile!=“..”){ unlink('upload /')。$ thisFile); } } } – TheQuestionerMan 2013-04-09 18:24:13

相关问题