Aobodo.Com

October 29, 2008

PHP读取MSSQLSERVER数据库image字段,突破4096限制

Filed under: keyboard's joy — Tags: , — admin @ 10:44 pm

以前的程序是把图片通过ASP以二进制的格式存储到MSSQLSERVER中的,现在需要用PHP把它显示出来,

  1. $id = $_GET['id'];
  2.     $conn = dbo_connect();
  3.     $query = "select f.Data from Files f,Products p where p.PhotoSN=f.SN and p.ID=$id";
  4.     $result = mssql_query($query, $conn);
  5.     if (mssql_num_rows($result)) {
  6.         $row = mssql_fetch_assoc($result);
  7.         if (!empty($row['Data'])) {
  8.             echo $row['Data'];
  9.         }
  10.     }
  11.     mssql_close($conn);

但是读取出来的图片都只有开头一小部分,其它部分是空白,全选以后看到的图片大小似乎也是正常的,就是有一部分显示不出来,好一个纳闷。质量高的图片显示的部分还要小,质量低的或者图片尺寸小的就要显示的多一些,看样子是读取的数据大小是一致的。后来一看$row['Data']的长度,果然清一色的4096,原来如此。
上网查资料,费了好大劲,才看到一句有价值的话“是配置错了”。配置错了?难道PHP读取MSSQL的image数据还有大小限制?赶紧打开php.ini,搜索image,没有相关的,搜索4096,还没有相关的,不会吧?!哈哈,原来是已经搜索到文件末尾,还在向下搜索,难怪没有。赶紧改方向,找到了!但是无关,再搜,OK,终于找到了:

  1. ; Valid range 0 - 2147483647Default = 4096.
  2. ;mssql.textlimit = 4096
  3.  
  4. ; Valid range 0 - 2147483647Default = 4096.
  5. ;mssql.textsize = 4096

原来如此,把mssql.textlimit和mssql.textsize后面的值都改成最大,2147483647,然后再把前面的分号去掉,保存,重启IIS。再去看刚才的程序显示出来的图片,成了,全部显示!
真亲啊!GOOD!

Powered by WordPress, Design by Jena