2014-01-30 5 views
1

Я работаю над формой, которая позволяет пользователю загружать выбранный файл в базу данных. Чтобы проверить и убедиться, что загрузка выполнена успешно, я пытаюсь просмотреть загруженный файл.Проблемы с отображением файла, загруженного в MSSQL с использованием PHP

Когда файл является текстовым файлом, мой код работает правильно, и я могу видеть загруженные данные. Однако, когда это изображение, у меня проблемы. В одном случае изображение частично отображается (например, верхние 15% его - см. Снимок экрана), а остальное пустое. partial image

В другом случае я получаю сообщение «Изображение« мой 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); 
+0

Включить отчет об ошибках PHP. Сохраните изображение на диск. Переименуйте его в * .txt. Откройте его с помощью текстового редактора. Прокрутите до конца. Вы видите сообщение об ошибке любого типа? –

+0

^У MSSQL есть способ открыть поле в шестнадцатеричном представлении, как я себе представляю? См. Этот вопрос все время. Людям просто нужно прекратить сохранять изображения в базе данных. Что такое '$ data ['hex']'? результат 'unpack()?' – ficuscr

+0

Alvaro: в файле нет ошибок (мне также пришлось изменить заголовок с помощью $ type to text/plain, чтобы получить файл). Ficuscr: $ data ['hex'] является результатом unpack() уже. Вот как это назначено: $ tmpName = $ _FILES ['userfile'] ['tmp_name']; $ datastring = file_get_contents ($ tmpName); $ data = unpack ("H * hex", $ datastring); –

ответ

1

Я решил эту проблему (как с дисплеем частичного изображения, и ошибка об изображении, содержащего ошибки) путем добавления этого:

ini_set("odbc.defaultlrl", "100K"); 

перед тем, как сделать ставку. Он переопределяет предел передачи по умолчанию 4096, установленный в php.ini.

0

проблема с ограничением памяти, Вот почему содержимое изображения не полностью загружено.

установить php.ini

попробуйте этот код н ваша страница PHP вы использовали как display.php

ini_set ('memory_limit', '1024M');

ini_set ("mssql.textlimit", "2147483647");

Смежные вопросы