PHP:删除具有任何扩展名的文件?

PHP:删除具有任何扩展名的文件?,php,file,Php,File,当用户上传一张照片时,它会检查他们是否已经有一张照片;如果他们这样做了,我希望它删除旧的(可以有任何扩展),然后把新的。有没有一种方法可以在不从数据库获取旧扩展的情况下实现这一点?当前代码: $del = $members->prepare("insert into profiles(userid, path, width, height, type, rtu, ext) values(?, ?, ?, ?, ?, ?, ?)

当用户上传一张照片时,它会检查他们是否已经有一张照片;如果他们这样做了,我希望它删除旧的(可以有任何扩展),然后把新的。有没有一种方法可以在不从数据库获取旧扩展的情况下实现这一点?当前代码:

        $del = $members->prepare("insert into profiles(userid, path, width, height, type, rtu, ext) values(?, ?, ?, ?, ?, ?, ?) 
                                    ON DUPLICATE KEY UPDATE path = ?, width = ?, height = ?, type = ?, rtu = ?, ext = ?, time = NOW()");
        $del->bind_param('sssssssssssss', $_SESSION['token'], $title, $file_info[0], $file_info[1], $file_info[2], $rh, $extension, 
        $title, $file_info[0], $file_info[1], $file_info[2], $rh, $extension);

        $del->execute();

        $new_file_name = "bb-x".$_SESSION['token'].".".$extension;

        if ($del->affected_rows > 0) {

            unlink('profiles/bb-x62'<any extension>);
        }

        $move_file = move_uploaded_file($file['tmp_name'], $upload_image_to_folder.$new_file_name);
$del=$members->prepare(“插入到配置文件(用户ID、路径、宽度、高度、类型、rtu、ext)值(?,,,,,,,,,?)
在重复键上更新路径=?,宽度=?,高度=?,类型=?,rtu=?,外部=?,时间=现在();
$del->bind_参数('sss',$会话['token'],$title,$file_信息[0],$file_信息[1],$file_信息[2],$rh,$extension,
$title、$file\u info[0]、$file\u info[1]、$file\u info[2]、$rh、$extension);
$del->execute();
$new_file_name=“bb-x”。$\u会话['token']..”$extension;
如果($del->受影响的行>0){
取消链接(“配置文件/bb-x62”);
}
$move_file=move_upload_file($file['tmp_name'],$upload_image_to_folder.$new_file_name);

您可以从受影响目录中的服务器获取文件列表,并在其中搜索具有相同文件名的条目,直到点和扩展名。从服务器数据中获取完整文件名并删除该文件。删除一个非常相似的文件名有一定的风险,但您可以进行内部检查,以确定除了扩展名以外的文件名是否相同

听起来从数据库中获取完整文件名可能会比较省事,并且可以在服务器上加载…

而不是
取消链接('profiles/bb-x62')

使用以下两行:

$file_pattern = "profiles/bb-x62.*" // Assuming your files are named like profiles/bb-x62.foo, profiles/bb-x62.bar, etc.
array_map( "unlink", glob( $file_pattern ) );

这应该可以解决问题。

+1这并不是问题的真正目的,但这显然是一种更明智的方法。PHP的内置glob()函数做了类似的事情(),这就是我在回答中的建议。如果你想根据用户输入非常小心地删除文件,那将是一种等待发生的攻击。在数据库中查找文件要安全得多。答案中的用户输入在哪里?我是否也应该使用此类事务,比如在移动文件的末尾(如果它像idk那样工作)