thickbox中的图像窗口显示奇怪的字符

时间:2011-03-08 01:27:50

标签: php ajax drupal thickbox ubercart

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

JFIF ,, Exif MM (12 i 4NIKONCorporation NIKOND70s , , AdobePhotoshop7.0 2008:08:21 17:13:50 % “0221 ֒ ޒ ,9090900100“ E X 2008:08:19 15:40:17:2008:08:19 15:40 :17 + ASCII ( W H H JFIF H H Adobe_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 

将来自firebug的相同请求复制粘贴到新的浏览器选项卡中会成功打开图像。

从firebug,这些是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

3 个答案:

答案 0 :(得分:2)

看起来这是一个thickbox(Javascript)问题。 PHP和Apache在使用mime识别图像时工作正常。

如果图像URL中有参数,例如。 (http://127.0.0.1/elegancia/?q=system/files/imagecache/product_full/image_1.jpg&random=1299550719133) - 由于厚箱图像识别算法,导致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;

(将“/ preview”替换为“/ thumbnail”,“/ quarter”或您配置图像模块以创建(和命名)各种尺寸的任何内容。

答案 1 :(得分:1)

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

/image.php?foo=bar

我把它改为:

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

请注意,如果您正在使用Apache等网络服务器(默认情况下限制使用path_info),则可能需要使用受影响路径的AcceptPathInfo指令将其打开。

我更喜欢这个解决方案来改变Thickbox源,因为更改可能被更新版本替换的模块意味着可能会丢失修复程序,而更改path_info应该继续适用于任何升级。

答案 2 :(得分: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);