我正在处理一个允许用户将所选文件上传到数据库的表单。要测试并确保上传成功,我正在尝试查看上传的文件。
当文件是文本文件时,我的代码正常工作,我可以看到上传的数据。 然而,当它是一张图像时,我遇到了麻烦。在一种情况下,图像部分显示(例如,前15% - 见屏幕截图),其余为空白。
在另一种情况下,我收到消息“图像”我的php文件“无法显示,因为它包含错误”。
数据库字段是varbinary(max)。部分显示的文件是filesize 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 :(得分:1)
我通过添加以下内容解决了这个问题(包括部分图像显示和关于包含错误的图像的错误):
ini_set("odbc.defaultlrl", "100K");
在我建立连接之前。它会覆盖php.ini中设置的默认传输限制4096。
答案 1 :(得分:0)
会有内存限制问题, 这就是为什么图像内容没有完全加载。
设置你的php.ini
在您使用的php页面中尝试此代码,如display.php
ini_set('memory_limit','1024M');
ini_set(“mssql.textlimit”,“2147483647”);