Попытка загрузить Blob через PHP / MySQL

Это тот, который я просто не могу понять: я успешно создал функцию загрузки на веб-странице для загрузки файлов в базу данных MySQL. Когда я иду на сервер и открываю их через phpMyAdmin, все они выглядят отлично … txt, jpg, pdf и т. Д.

Тем не менее, после того, как я собрал эту вещь (ниже), чтобы загрузить ее, у меня возникает странная проблема: все текстовые документы (и все другие типы файлов после изменения расширения на «txt») содержат HTML-код самой страницы , а затем оригинальный контент!

Кроме того, разные браузеры отображаются по-разному после POST. При попытке загрузить txt-файл IE покажет правильные данные в ECHO на самой странице (без загрузки) с сообщением об ошибке непосредственно перед ним:

Предупреждение: Заголовок может содержать не более одного заголовка, обнаружена новая строка. в C: \ wamp \ www \ ace \ dmain.php в строке 82.

Строка 82 – это заголовок («Content-length …»

Ни Firefox, ни Chrome ничего не показывают. Они просто позволяют мне скачать его.

Вот код:

<?php if (isset($_POST['downloadid'])) { $fileid = $_POST['downloadid']; try { $sql = "SELECT * FROM `datastore` WHERE `id` = '".$fileid."'"; $results = $pdo->query($sql);echo $sql; while ($row = $results->fetch()) { $filename = $row['filename']; $mimetype = $row['mimetype']; $filedata = $row['filedata']; header("Content-length: strlen($filedata)"); header("Content-type: $mimetype"); header("Content-disposition: download; filename=$filename"); //disposition of download forces a download echo $filedata; // die(); } //of While } //try catch (PDOException $e) { $error = '<br>Database ERROR fetching requested file.'; echo $error; die(); } //catch } //isset ?> 

Эта:

 header("Content-length: strlen($filedata)"); 

Не собираюсь производить то, что вы ожидаете. Если вы посмотрите на заголовки в wirehark или другой метод для просмотра запроса, вы увидите, что он не содержит целого числа.

Используйте это вместо этого:

 header("Content-length: ".strlen($filedata)); 

После агонизации над исправлением его на месте (то есть на той же странице с остальной частью html и кода) я решил переместить его на специальную страницу PHP. После этого он работал нормально.

Спасибо за комментарии!

вот хороший пример и полный источник