当用户上传照片时,会检查是否已有照片;如果他们这样做,我希望它删除旧的(可能有任何扩展名),然后把新的。有没有办法在没有从数据库中获取旧扩展的情况下执行此操作?目前的代码:
$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);
答案 0 :(得分:10)
而不是unlink('profiles/bb-x62'<any extension>);
使用以下两行:
$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 :(得分:1)
您可以从受影响目录中的服务器获取文件列表,并在其中搜索具有相同文件名的条目,直到点和扩展名。从服务器数据中获取完整文件名并删除该文件。删除一个非常相似的文件名有一些风险,但你可以建立检查以确定文件名是相同的,除了扩展名。
听起来像从数据库中获取完整的文件名可能会减少麻烦并加载服务器......