Добрый день всем. Подсобите пожалуйста с вопросом, который пока не могу решить, поиск в интернете особо не дал ответа. Итак есть файлы, которые хранятся в БД MS SQL, в бинарном виде (поле blob). Задача простая, вывести для каждой статьи соответствующее приложение/приложения средствами php. Итак код, который дает мне какой-то результат.
try {
$db = new PDO("odbc:Driver={SQL Server Native Client 11.0};Server=SERVER;Database=mydb; Uid=user;Pwd=1admiN; charset=UTF-8");
$sql = $db->query("SELECT TOP 1 id, name, ext, file FROM blob_files );
$row = $sql->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOExeption $e){
print "error". $e-> getMessage(). "<br/>";
die();
}
foreach ($row as $key => $value) {
$filename = $value[name];
$f = fopen($filename, "w") or die ('Ошибка!');
$file = fwrite($f, $value[file]);
//header("Content-Disposition: attacment; filename=$filename;");
header ("Location: " $filename);
exit(); }
Когда файл скачивается (размер вроде соответствует), но при открытии файла, например .doc, в ворде отображаются сначала пустые первые 5 строк, а потом весь бинарный код, в виде текста.
Нашел в сети пример где вместо функции fopen(), используют функцию file_put_content().
Этой функцией получилось избавиться от первых пяти пустых строк, но увы файл также открывается как текст. Также пробовал все режимы для fopen(), не помогло.
Также на просторах вычитал, что MS SQL передает бинарные данные в кодировке ANSI и если надо передавать данные для UTF8, то писать при подключении надо в какой кодировке следует открывать соединение, но я в этом не разобрался, тем более, что название файлов на кириллице на скачку дает корректно, при этом если сделать var_dump($row)- результат выборки данных из БД, то там где русскоязычные названии, рисует знаки вопроса в ромбе )).
Короче вокруг одни вопросы, а ответа пока не видно, хотя задачка тревиальная. Скажу что проделывая дома, то же самое на MySQL, все работает как надо, в примитивном виде и даже если задать на выборку не 1 строки а 5, то скачивает все 5 файлов, а вот такой фокус на MS SQL не проходит.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости