Окно изображения в Thickbox показывает странные символы

Я использую Thickbox на Ubercart / Drupal 6 на Ubuntu. Проблема в том, что я переместил сайт с компьютера с Windows на Ubuntu. Все проблемы с путями и разрешениями отсортированы и сайт работает хорошо. Единственная проблема, с которой я сталкиваюсь сейчас, - это когда я нажимаю на изображение продукта, то во всплывающем окне Предполагается, что во всплывающем окне отображается предварительный просмотр. Вместо этого он показывает странные символы во всплывающем окне. Копия / вставка этих символов:

JFIF,, Exif MM (12i 4NIKON CORPORATION NIKON D70s,, Photos Adobe Photoshop 7.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 . . . и многие другие похожие символы

Изображения загружены правильно, и я вижу их в сайтах /default/files/. Даже эскизы генерируются. Эти миниатюры также появляются на сайте. Также, щелкнув правой кнопкой мыши по миниатюре и открыв в новой вкладке, я показываю все изображение правильно.

Кроме того, Thickbox отправляет запрос GET ajax для изображения на 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 ответа

Решение

Похоже, что это была проблема с ящиком (Javascript). PHP и Apache работают нормально, когда дело доходит до распознавания изображения с помощью mime.

Если в URL изображения есть аргументы, например. (http://127.0.0.1/elegancia/?q=system/files/imagecache/product_full/image_1.jpg&random=1299550719133) - заставляет Thickbox вместо этого показывать бессмысленные символы из-за алгоритма распознавания изображений Thickbox. URL-адреса, которые не заканчиваются расширением изображения, заставляют javascript-файл Thickbox обрабатывать изображение как другой тип MIME, который не является изображением.

Чтобы обойти эту проблему, нужно изменить строку 53 файла /modules/thickbox/thinkbox.js, добавив " || 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"," "/quarta ", или что-то еще, что вы настроили в своем модуле изображений для создания (и имени) различных размеров.

Другое решение, которое я нашел, - добавить дополнение URL-адреса path_info, чтобы указать тип изображения. Например, мой URL ранее был:

/image.php?foo=bar

Я изменил это на:

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

Обратите внимание, что если вы используете веб-сервер, такой как Apache, который по умолчанию ограничивает использование path_info, вам может потребоваться включить его с помощью директивы AcceptPathInfo для затронутого пути.

Я предпочитаю это решение для изменения источника Thickbox, потому что изменение модулей, которые могут быть заменены обновленными версиями, означает возможную потерю исправлений, тогда как изменение path_info должно продолжать функционировать с любыми обновлениями.

Браузер отображает файл как текст, когда он должен обрабатывать его как изображение JPEG. Вам необходимо отправить заголовок "Content-Type: image/jpeg", чтобы сообщить браузеру, как отображать содержимое. Проверьте конфигурацию вашего веб-сервера.

Для 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

Это все относится к файлам, которые обслуживаются веб-сервером напрямую. Если вы можете ввести URL-адрес в браузере и увидеть изображение, то это не проблема.


Если файлы обслуживаются сценарием, необходимо убедиться, что заголовок отправлен сценарием. В PHP:

header('Content-type: image/jpeg');
echo file_get_contents($image_path);
Другие вопросы по тегам