Как можно сжать изображение BLOB-объекта при получении в базу данных? - PullRequest
1 голос
/ 05 октября 2019

Я использую следующий код для загрузки изображения в мою базу данных:

<form>
<input type="file" name="image">
<input type="submit name="upload">
</form>
<?php
$mysqli=new mysqli("localhost","root","","mydb");

  if (isset($_POST['upload'])) {
    $photo = addslashes(file_get_contents($_FILES["image"]["tmp_name"]));

    $result=$mysqli->query("INSERT INTO images_tbl(image) VALUES('$photo')");

?>

и получаю фотографию таким образом:

<?php
$result=$mysqli->query("SELECT image FROM image_tbl");
    while ($test=mysqli_fetch_array($result)) {
        $getphoto = $test['image'];
    }
     echo'<img src="data:image/jpeg;base64,'.base64_encode($getphoto).'" style="width: 40px; 40px;" class="w3-round" draggable="false" /> ';
?>

Когда я загружаю большое изображение, оно загружаетисходный размер файла. Я хочу оптимизировать свой сайт. Есть ли способ сжать изображения, когда я получаю их в базу данных, чтобы они быстрее загружались на сайт?

1 Ответ

0 голосов
/ 06 октября 2019

Я бы предложил не добавлять изображения в базу данных. По крайней мере, не база данных MySQL. Вместо этого попробуйте сохранить изображения в файловой системе и сохранить только путь к файловой системе в базе данных. Попробуйте переименовать файлы в длинные уникальные случайные имена и сохранить их вместе с исходным именем файла в базе данных.

Используя PHP, вы можете обслуживать свои файлы, используя их оригинальные имена:

header('Content-Type: image/jpeg');
header('Content-disposition: attachment; filename="'.$filenameOriginal."\n");
readfile($filenameStorage);

MySQL isотличная обработка текста, большие двоичные данные - это отдельная история. Вы также должны спросить себя, что вы получаете, храня изображения в базе данных.

О сжатии. Изображения обычно сжимаются довольно хорошо, поэтому дальнейшее сжатие их для хранения базы данных, как правило, неосуществимо.

Я также настоятельно рекомендую вам ознакомиться с подготовленными выражениями для MySQL. https://www.php.net/manual/en/mysqli.quickstart.prepared-statements.php

Это позволяет вам использовать такие запросы, как:

INSERT INTO images_tbl(image) VALUES(?)

Знак вопроса означает переменную, которую вы передаете в MySQL как двоичный файл с отдельной функцией. Это предотвращает атаки с использованием SQL-инъекций, которые определенно не будут добавлены addlashes ().

https://www.php.net/manual/en/mysqli-stmt.bind-param.php

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...