Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Скрипт после скачивания картинки не открывает его, в чем причина?

Александр Шипилов Ученик (91), на голосовании 9 месяцев назад
 require "db.php";

if (isset($_GET['id'])) {
$id = $_GET['id'];

$sql = "SELECT * FROM 3_images WHERE id=?";
$stmt = $db->prepare($sql);
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
$row = $result->fetch_assoc();
$filename = 'upload/' . $row["img"];

if (file_exists($filename)) {
$finfo = finfo_open('jpg', 'jpeg', 'png', 'gif');
$mime_type = finfo_file($finfo, $filename);
finfo_close($finfo);

header('Content-Description: File Transfer');
header('Content-Type: ' . $mime_type);
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($filename));
readfile($filename);
exit;
} else {
echo "The file $filename does not exist.";
}
} else {
echo "No record matches the provided id.";
}
} else {
echo "No id provided.";
}
?>


Голосование за лучший ответ
Андрей Высший разум (460766) 10 месяцев назад
Вот эта строчка:
 $finfo = finfo_open('jpg', 'jpeg', 'png', 'gif'); 
- полный бред.

Вот здесь https://www.php.net/manual/ru/function.finfo-open.php показано, как правильно использовать эту функцию и получать mime-тип файла.

P.S. mime-тип надо анализировать при сохранении изображения на сервере и записывать в базу данных в отдельный столбец 3_images. И получать его (да и размер файла тоже) из базы вместе с именем файла, а не нагружать сервер анализом файла при каждом чтении картинки.
Похожие вопросы