PHP unlink () проблема с файлами с несколькими расширениями - PullRequest
1 голос
/ 27 февраля 2020

Я столкнулся с проблемой, с которой я никогда не сталкивался. У меня есть несколько изображений, загруженных в формате 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));
    }
}
...