Здравствуйте, есть база данных на Maria DB, в которых хранятся картинки в поле с типом LONGBLOB. Знаю, что это есть зло, но отойти от этого пока нет возможности. Картинки весом примерно в 1 Мегабайт каждая.
Моя задача создать превьюху к каждой картинке, и чтобы она сохранялась в базу также, а не генерилась "на лету".
Набросал скрипт, который в принципе выполняет то, что нужно, но жор памяти огромен. На ~1600 записей отжирает около 2Гигабайт памяти. Сервер на apache локальный, так что, конечно, памяти можно ещё добавить, но если записей будет раз в десять больше? (а их будет).
Сам скрипт
<?php
include("bd.php");
$query = "SELECT * FROM images"; //
if (!$result = mysqli_query($con, $query)) {
exit(mysqli_error());
}
if(mysqli_num_rows($result) > 0) {
$total = 0;
while($row = mysqli_fetch_assoc($result)){
$data = $row['content'];
$guid = $row['guid'];
$sort = $row['sort'];
$image = imagecreatefromstring($data);
$image = imagescale($image, 300);
// start buffering
ob_start();
imagejpeg($image);
$contents = ob_get_contents();
ob_end_clean();
$contentsthumb = base64_encode($contents);
$total++;
$sqlin = "INSERT INTO images_thumb (guid, content, sort)
VALUES ('$guid', '$contentsthumb', '$sort')";
if (mysqli_query($con, $sqlin)) {
// echo "New record created successfully";
} else {
echo "Error: " . $sqlin . "<br>" . mysqli_error($con);
}
imagedestroy($image);
}
mysqli_free_result($result);
echo "Добавлено записей " . $total;
}
mysqli_close($con);
?>
Бегло загуглив, видел решения, при которых при достижении памяти определенного размера потребления, создается временный файлик с текущей позицией, скрипт останавливается, запускается снова с указанной позиции.
Это единственное решение или кто-то знает более оптимальный вариант?