Php 如果文件存在,如何获取要删除的文件

Php 如果文件存在,如何获取要删除的文件,php,Php,我试图检查文件名的实例是否存在(尽管它有扩展名),然后将其删除。这是我所拥有的不起作用的东西 $username = $_POST["data"]["username"]; $mask = '../../files/' . $username . '.*'; if (file_exists($mask)) { unlink ($mask); } 有人能告诉我我做错了什么吗?我知道第一行是正确的,因为它正与其他命令一起正确使用。只是对其余的不确定。使用PHP5.2试试: $mask =

我试图检查文件名的实例是否存在(尽管它有扩展名),然后将其删除。这是我所拥有的不起作用的东西

$username  = $_POST["data"]["username"];

$mask = '../../files/' . $username . '.*';
if (file_exists($mask)) 
{
unlink ($mask);
} 
有人能告诉我我做错了什么吗?我知道第一行是正确的,因为它正与其他命令一起正确使用。只是对其余的不确定。使用PHP5.2试试:

$mask = "../../files/".str_replace("/","",$username).".*";
$glob = glob($mask);
if( $glob && count($glob) == 1) {
    unlink($glob[0]);
}
这首先要使您的代码更加安全,这样恶意用户就不能随意删除任何他们喜欢的东西。如果有多个文件匹配,它也拒绝删除内容。根据需要进行调整


但是,恶意用户仍然可以使用您的代码删除。。。嗯,任何人的个人资料。可能需要适当地加以防范;)

注意:如果glob return
false
,它仍然是可计数的,并且与
1
匹配,因此最好使用
空的
@RahilWazir哇,捕捉得好。谢谢如果
str_replace()
也能处理Windows目录分隔符,那就太好了。@user2284703这是为了防止有人输入像
。/../../../etc/之类的用户名。仅仅因为它是隐藏的,并不意味着它是安全的。如果它在任何地方都可以访问,那么恶意用户就可以滥用它
basename($username)
将是摆脱目录分隔符的开始。