// Сброс указателя результатов запроса перед новой итерацией
$result->data_seek(0);
Привет. При каждой итерации цикла foreach он сбрасывает указатель результатов запроса $result->data_seek(0), что приводит к повторной обработке всех строк результата запроса. Это приводит к удалению всех файлов, так как они поочередно не находятся в базе данных на каждой итерации.
Попробуй по другому.
// Параметры подключения к базе данных
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "username";
$conn = new mysqli($servername, $username, $password, $dbname);
// Проверка подключения к базе данных
if ($conn->connect_error) {
die("Ошибка подключения к базе данных: " . $conn->connect_error);
}
// Выполнение запроса к базе данных для получения списка всех файлов
$sql = "SELECT img_images FROM img_ads";
$result = $conn->query($sql);
// Получение списка файлов из базы данных
$filesInDatabase = array();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
$filesInDatabase[] = $row['img_images'];
}
}
// Получение списка файлов в папке
$imagesFolder = "media/images/";
$files = glob($imagesFolder . "*.webp");
// Проход по каждому файлу в папке
foreach ($files as $file) {
// Проверка, существует ли файл в базе данных
$filename = basename($file);
if (!in_array($filename, $filesInDatabase)) {
if (unlink($file)) {
echo "Файл удален: " . $file . "<br>";
// Запись результатов в файл log.txt
file_put_contents("log/log.txt", "Удален файл: " . $file . PHP_EOL, FILE_APPEND);
} else {
echo "Не удалось удалить файл: " . $file . "<br>";
// Запись результатов в файл log.txt
file_put_contents("log/log.txt", "Не удалось удалить файл: " . $file . PHP_EOL, FILE_APPEND);
}
}
}
// Закрытие подключения к базе данных
$conn->close();