Вывод большого двоичного объекта из mysql

У меня странная проблема с PHP/MySQL.

Я загрузил в BLOB документ Word. Это успешно, и если (скажем, с помощью SQLYog) я открою и сохраню BLOB в виде файла, он отлично откроется в Open Writer.

Однако в ту минуту, когда я пытаюсь вывести данные через PHP, я получаю поврежденный документ.

Я использую следующее для вывода:

header('Content-length: '.$file['FileSize']);
header('Content-Type: '.$file['FileSize']);
header('Content-Disposition:attachment; filename="'.$file['FileName'].'"');
echo $file['Content'];

Любая помощь будет здорово.

Спасибо

Антоний


person user1924004    schedule 17.04.2013    source источник
comment
Я думаю, что ваш тип контента неверен...   -  person René Höhle    schedule 17.04.2013
comment
для этого не потребуется плагин для браузера?   -  person verbumSapienti    schedule 17.04.2013
comment
@verbumSapienti: Для простой загрузки файла не требуется плагин, нет.   -  person David    schedule 17.04.2013
comment
Вы пытаетесь запустить файл PHP как загрузку или вывести содержимое на страницу? Для последнего вам понадобится какой-то плагин, первый возможен только через PHP.   -  person MatthewMcGovern    schedule 17.04.2013


Ответы (1)


Что вы пытаетесь сделать здесь?:

header('Content-Type: '.$file['FileSize']);

Тип содержимого должен указывать тип файла (или, в строгих терминах HTTP, тело ответа), а не его размер. Я полагаю, что для документа Word тип содержимого будет следующим:

"application/ms-word"
person David    schedule 17.04.2013
comment
Я делаю успехи. Похоже, что в начале вывода из PHP добавлено дополнительное пустое пространство, которого нет в оригинале или при сохранении из MySQL. Не уверен, почему, и обрезка не исправит это, поэтому продолжайте расследование. - person user1924004; 17.04.2013
comment
@user1924004 user1924004: В файле PHP есть что-то большее, чем 4 строки, показанные в вопросе? echo не заменяет весь ответ содержимым файла, поэтому остальная часть файла PHP может где-то искажать ответ пробельным символом. Является ли повреждение только несколькими дополнительными символами или весь двоичный ответ неверен? Может быть, попробовать что-то другое, кроме echo? fwrite возможно? - person David; 17.04.2013
comment
Я сделал эхо «привет, мир», и по какой-то причине перед этим тоже появляются пробелы! - person user1924004; 17.04.2013
comment
ПОЧИНИЛ ЭТО!! У меня были пробелы после моего последнего ?› в контроллере. Кто на земле знает, почему это должно мигрировать в представление, но удалило это, и вуаля. Пробелы были моей проблемой. Спасибо всем за ответы и извините, что это не официальный ответ — у меня осталось 7 часов! - person user1924004; 17.04.2013