2011-03-08 63 views
0

我在ubuntu上使用ubercart/drupal 6上的thickbox。问题是我把网站从Windows机器移到Ubuntu。路径和权限排序和网站的所有问题都运行良好。 我现在遇到的唯一问题是当我点击产品图像时,thickbox应该显示预览弹出窗口。相反,它会在弹出窗口中显示奇怪的字符。这些字符的复制/粘贴:thickbox中的图像窗口显示奇怪的字符

JIFIF ,, Exif MM (12 i 4NIKONCORPORATION NIKOND70s , , AdobePhotoshop7.0 2008:08:21 17:13 :50%“0221 ֒ ޒ  , 90 90 900100 “ E X 2008:08:19 15:40:17 2008: 08:19 15:40:17 + ASCII ( W HHJFIFHHAdobe_CM Adobe d 7“ 3 !1AQa。 。 。 。和更多类似的字符

图像上传正确,我可以在sites/default/files /下看到它们。即使是缩略图也会生成。这些缩略图也出现在网站上。同样右键单击缩略图并在新选项卡中打开,可以正确显示整个图像。

此外,ThickBox的发送对图像的AJAX GET请求,看起来像这样的URL:

http://127.0.0.1/elegancia/?q=system/files/imagecache/product_full/image_1.jpg&random=1299550719133 

复制粘贴从萤火虫相同的请求,到一个新的浏览器选项卡中成功打开图像。

从萤火虫,这些都为AJAX请求的请求响应头:

Response Headers 
view source 
Date Tue, 08 Mar 2011 02:18:39 GMT 
Server Apache/2.2.16 (Ubuntu) 
X-Powered-By PHP/5.3.3-1ubuntu9.3 
Expires Tue, 22 Mar 2011 02:18:39 GMT 
Last-Modified Tue, 08 Mar 2011 01:21:47 GMT 
Cache-Control max-age=1209600, private, must-revalidate 
Content-Length 111831 
Etag "4dfe0f3d345781ac89aae5c2a10361ad" 
Keep-Alive timeout=15, max=92 
Connection Keep-Alive 
Content-Type image/jpeg 

Request Headers 
view source 
Host 127.0.0.1 
User-Agent Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.9.2.15) Gecko/20110303 Ubuntu/10.10 (maverick) Firefox/3.6.15 
Accept text/html, */* 
Accept-Language en-gb,en;q=0.5 
Accept-Encoding gzip,deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive 115 
Connection keep-alive 
X-Requested-With XMLHttpRequest 
Referer http://127.0.0.1/elegancia/ 
Cookie SESS7a3e11dd748683d65ee6f3c6a918aa02=bijhrr4tl66t42majfs3702a06; has_js=1 
+0

这些图像是否与PHP一起提供?看起来它可能是一个标题问题。 – Jacob 2011-03-08 01:38:48

+0

检查标题并插入上面的原始问题中。看起来更像是一个JavaScript问题当我复制粘贴到一个新的浏览器窗口时,由ajax用来获取图片的PHP URL工作正常(显示整个图片)。第一部分为 – sysasa 2011-03-08 02:49:05

回答

2

看起来像是一个thickbox(Javascript)问题。当使用MIME识别图像时,PHP和Apache可以很好地工作。

如果图片网址中有参数,例如。 (http://127.0.0.1/elegancia/?q=system/files/imagecache/product_full/image_1。jpg & random = 1299550719133) - 导致Thickbox显示无意义字符,而不是由于thickbox图像识别算法。 不以图像扩展名结尾的网址会使thickbox javascript将图像视为另一个不是图像的MIME类型。

要解决问题,需要修改/modules/thickbox/thinkbox.js的第53行,在选项列表中添加“|| urlType =='/ preview'”以使thickbox.js相信其核心是Drupal编码的图像链接实际上是一个图像而不是冒名顶替者。

假设你的图像大小为 “预览”,变线53:

if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images 

这样:

if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp' || urlType == '/preview'){//code to show images 

此外,修改第50行到这一点:

var urlString = /\.jpg|\.jpeg|\.png|\.gif|\.bmp|\/preview/g; 

(用“/预览”代替“/ thumbnail”,“/ quarter”或任何你配置你的图像模块来创建(和命名)各种尺寸。

+0

我有一次与Thickbox相同的问题。请注意,Thickbox不再进行维护,其作者建议使用一些替代方法(请参阅http://jquery.com/demo/thickbox/)。 – 2011-03-08 21:00:40

+0

哦。谢谢你的信息。不知道这件事。我现在可能会去为lightbox/2的Drupal。 – sysasa 2011-03-08 21:05:35

+0

有关类似的替换,请参阅http://stellapower.net/node/30 – sysasa 2011-03-08 21:09:25

0

的浏览器渲染的文件作为文本,当它应该把它作为一个JPEG图像。您需要发送'Content-Type:image/jpeg'标头来告诉浏览器如何呈现内容。检查您的Web服务器配置。

对于Apache,httpd.conf文件应该有这样的台词:

LoadModule mime_magic_module modules/mod_mime_magic.so 
LoadModule mime_module modules/mod_mime.so 

... 

TypesConfig /etc/mime.types 

,然后在/etc/mime.types:

image/jpeg   jpeg jpg jpe 

这一切都适用的是文件直接由Web服务器提供服务。如果您可以在浏览器中输入URL并查看图像,那么这都不是问题。


如果文件是由脚本提供的,那么您需要确保头文件是由脚本发送的。在PHP中:

header('Content-type: image/jpeg'); 
echo file_get_contents($image_path); 
+0

,在/ etc/apache2/mods-enabled /下创建了/etc/apache2/mods_available/mime.load和mime_magic.load的链接以启用它们。在第二部分中,/etc/mime.types已经包含了上述行。这个文件是由apache指向的。重新启动Apache但问题仍然存在。 – sysasa 2011-03-08 02:17:13

1

我发现的另一个解决方案是在URL中添加一个path_info以指定图像类型。例如,我的网址以前是:

/image.php?foo=bar

我把它改为:

/image.php/image.gif?foo=bar

注如果您使用的是像Apache这样的网络服务器,默认情况下会限制使用path_info,您可能需要使用受影响路径的AcceptPathInfo指令将其打开。

我更喜欢此解决方案来更改Thickbox源代码,因为更改可能被更新版本替换的模块意味着可能会丢失修复程序,而修改path_info应该可以继续在任何升级中运行。