Окно изображения в Thickbox показывает странные символы - PullRequest
0 голосов
/ 08 марта 2011

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

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

Изображения загружены правильно, и я вижу их в сайтах / 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 ]

2 голосов
/ 08 марта 2011

Похоже, что это была проблема с ящиком (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", "/ четверти" или что-либо другое, что вы настроили в своем модуле изображений для создания (и имени) различных размеров.

1 голос
/ 01 июля 2015

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

/ image.php? Foo = bar

Я изменил его на:

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

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

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

0 голосов
/ 08 марта 2011

Браузер отображает файл как текст, когда он должен обрабатывать его как изображение 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);
...