mysql — проблемы с PHP / SQL при загрузке файла / документа

У меня есть некоторые проблемы с файлом, загруженным в мою базу данных.
Я загружаю свой файл (doc, img, …) в свою базу данных, которая выглядит так:

CREATE TABLE IF NOT EXISTS `pj` (
id bigint(20) NOT NULL AUTO_INCREMENT,
name varchar(30) NOT NULL,
type varchar(30) NOT NULL,
size int(11) NOT NULL,
content mediumblob NOT NULL,
id_demande int(100) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `FK_pj_id_demande` (`id_demande`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

И я загружаю, используя этот код PHP:

if($_FILES['userfile']['size'] > 0)
{
$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];

$fp      = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);

if(!get_magic_quotes_gpc())
{
$fileName = addslashes($fileName);
}

$query = "INSERT INTO pj (name, type, size, content, id_demande) VALUES ('$fileName', '$fileType', '$fileSize', '$content', $queryID)";
$resultQ =mysqli_query($con, $query);

}

И после загрузки я использую это:

$sqlPJ = "SELECT name, type, size, content FROM pj WHERE id_demande = 1";
$queryPJ = $db->prepare($sqlPJ);
$queryPJ->execute();
$resultPJ = $queryPJ->fetchAll( PDO::FETCH_ASSOC );

foreach($resultPJ as $rowPJ){
$size = $rowPJ['size'];
$type = $rowPJ['type'];
$name = $rowPJ['name'];
header("Content-length: $size");
header("Content-type: $type");
header("Content-Disposition: attachment; filename=$name");
echo $rowPJ['content'];
}

После этого мой браузер спрашивает меня, хочу ли я открыть его с помощью Office Word (это файл doc), но текст в нем выглядит так:

введите описание изображения здесь

Что я делаю неправильно ?

PS: используется этот урок помочь мне !

1

Решение

В fread измените ‘r’ на ‘rb’, чтобы получить «двоичный» режим. Это позволит избежать искажения CR и LF в Windows.

Для дальнейшей проверки — посмотрите, сколько байтов в файле и в среднем блоке (используя LENGTH ()). Если они не совпадают, значит что-то не так.

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector