Я работаю над формой, которая позволяет пользователю загружать выбранный файл в базу данных. Чтобы проверить и убедиться, что загрузка выполнена успешно, я пытаюсь просмотреть загруженный файл.Проблемы с отображением файла, загруженного в MSSQL с использованием PHP
Когда файл является текстовым файлом, мой код работает правильно, и я могу видеть загруженные данные. Однако, когда это изображение, у меня проблемы. В одном случае изображение частично отображается (например, верхние 15% его - см. Снимок экрана), а остальное пустое.
В другом случае я получаю сообщение «Изображение« мой php-файл »не может отображаться, потому что он содержит ошибки».
Поле базы данных является varbinary (max). Файл, который частично отображается, - это размер файла 74403 (байт), а тот, который дает ошибку, - 168801. Перед загрузкой я проверяю размер файла ($ _FILES ['userfile'] ['size']), чтобы убедиться, что он меньше 10000000 байт. Таким образом, я не считаю, что моя проблема связана с усечением файлов при загрузке.
здесь соответствующий код загрузки и вид:
$sql = "INSERT INTO Database.dbo.Table (name, filetype, filesize, insertdatetime, image) OUTPUT INSERTED.ID VALUES ('$filename','$filetype','$filesize',getdate(),0x".$data['hex'].");";
// insert the image
$result = odbc_exec($connect,$sql) or die("".odbc_errormsg());
$id = odbc_result($result,"ID");
$sql_view = sprintf("SELECT image,filetype FROM Database.dbo.Table WHERE id=%s;",$id);
$result2=odbc_exec($connect,$sql_view) or die("".odbc_errormsg());
$type = odbc_result($result2, "filetype");
header("Content-type: $type");
echo odbc_result($result2, "image");
odbc_close($connect);
Включить отчет об ошибках PHP. Сохраните изображение на диск. Переименуйте его в * .txt. Откройте его с помощью текстового редактора. Прокрутите до конца. Вы видите сообщение об ошибке любого типа? –
^У MSSQL есть способ открыть поле в шестнадцатеричном представлении, как я себе представляю? См. Этот вопрос все время. Людям просто нужно прекратить сохранять изображения в базе данных. Что такое '$ data ['hex']'? результат 'unpack()?' – ficuscr
Alvaro: в файле нет ошибок (мне также пришлось изменить заголовок с помощью $ type to text/plain, чтобы получить файл). Ficuscr: $ data ['hex'] является результатом unpack() уже. Вот как это назначено: $ tmpName = $ _FILES ['userfile'] ['tmp_name']; $ datastring = file_get_contents ($ tmpName); $ data = unpack ("H * hex", $ datastring); –