Я столкнулся с проблемой, с которой я никогда не сталкивался. У меня есть несколько изображений, загруженных в формате JPG или PNG с дубликатом изображения в формате WebP, например, в этом соглашении об именах файлов:
https://example.com/uploads/memory-day.png
> https://example.com/uploads/memory-day.png.webp
Если я удаляю файл через PHP с использованием функции unlink()
, как обычно, она работает для всего остального , пока не удаляю дублированное изображение PNG. Когда я это делаю, файл WebP также удаляется, и я не вижу, как это происходит - это странная проблема в функции unlink()
с файлом, имеющим двойное расширение? Кажется, я не могу воспроизвести его, если в нем не задействован файл WebP.
Для ясности, вот код PHP, который удаляет файлы (и да, я знаю, что это должен быть оператор подготовки, я еще не обновил):
if(isset($_POST['delete'])) {
$countG = 0;
$err = 0;
foreach($_POST['delFile'] as $actionID) {
$action_id = $conn->real_escape_string($actionID);
$query = $conn->query("SELECT `filename`, `dir` FROM `fileuploads` WHERE `id` = '$action_id'");
$delF = $query->fetch_assoc();
$filenameDel = StripSlashes($delF['filename']);
$filenameDir = StripSlashes($delF['dir']);
if(file_exists($_SERVER['DOCUMENT_ROOT'] . $filenameDir . "/" . $filenameDel)){
if(unlink($_SERVER['DOCUMENT_ROOT'] . $filenameDir . "/" . $filenameDel)) {
if(file_exists($_SERVER['DOCUMENT_ROOT'] . $filenameDir . "/auto_thumbs/" . $filenameDel)) {
unlink($_SERVER['DOCUMENT_ROOT'] . $filenameDir . "/auto_thumbs/" . $filenameDel);
}
$delquery = $conn->query("DELETE FROM `fileuploads` WHERE `id` = '$action_id'");
$countG++;
} else {
$err++;
}
} else {
$err++;
if(!file_exists($_SERVER['DOCUMENT_ROOT'] . $filenameDir . "/" . $filenameDel)) {
//Remove from db if file is not there physically
$delquery = $conn->query("DELETE FROM `fileuploads` WHERE `id` = '$action_id'");
}
}
}
if($countG > 0) {
$green = 1;
$message1 = "$countG File(s) Deleted!";
}
if($err > 0) {
$red = 1;
$message2 = "Error deleting $err files!";
error_log(print_r(error_get_last(), TRUE));
}
}