我的论坛是从NT3.5转换到X2.5,结果出现附件图片无法显示的问题,论坛里面发帖3天,有好些人帮助,也查了不少资料都没解决问题。其中有论坛板块的负责人有回复,但是可以看出来完全没有仔细看问题,随随便便回答敷衍下。
于是自己查代码找原因。发现问题为:nt版本 sql server 2005附件表中的isimage字段值转换到x2.5后png,gif类型的值为1,而jpg格式的却为0,但是图片无法显示,将该值修改为1之后能正常显示。
找到问题之后,再去查看转换代码,发现data\nt\dznt3.5sql - 25X\step_6.php中如下代码- $query = $xc->db['source']->query("SELECT * FROM {$source_tablepre}attachments WHERE aid>=$start AND aid<=$end")
- or die("检索数据表 '{$source_tablepre}attachments' 错误!请将表 '{$source_tablepre}attachments' 字段类型为 nText 的改为 Text 类型。");
- while($a = $xc->db['source']->fetch_array($query)) {
- $a = daddslashes(array_change_key_case($a));
- $aid = $a['aid'];
- $tid = $a['tid'];
- $pid = $a['pid'];
- $uid = $a['uid'];
- $downloads = $a['downloads'];
- $atid = (string)$tid;
- $tableid = $atid{strlen($atid)-1};
-
- $filetype = $a['filetype'];
- $dateline = timetounix($a['postdatetime']);
- $filename = $a['attachment'];
- $filesize = $a['filesize'];
- $attachment = str_replace('\\\\', '/', $a['filename']);
- $remote = 0;
- $description = $a['description'];
- $readperm = $a['readperm'];
- $price = $a['attachprice'];
- <font color="#ff0000"> $isimage = in_array($filetype, array('image/pjpeg', 'image/gif', 'image/bmp', 'image/png')) ? 1 : 0;</font>
- $width = $a['width'];
- $thumb = 0;
复制代码 可以看出来 $filetype值来源于数据库的filetype字段的值,下图我们看看sql server中附件表的内容
filetype列的字如果是jpg图片的,存的是image/jpeg,而转换代码中$isimage = in_array($filetype, array('image/pjpeg', 'image/gif', 'image/bmp', 'image/png')) ? 1 : 0; 判断的为 'image/pjpeg',导致转换后 jpg图片该字段都为0,所有就有了图片附件中jpg图片不显示的情况。官方出的转换程序,而且已经是2.5.1版本了,难道从来都没真正测试过就发布出来吗?该问题不知道浪费了多少人的时间,估计到最后也没解决好。希望对后来的朋友有所帮助
|