PHP Ссылка на изображение вне корневой папки [href, а не img src] - PullRequest
3 голосов
/ 12 мая 2011

Вот моя ситуация: изображения хранятся вне корневой папки. Я могу получить к ним доступ с помощью внешнего php-файла (как и должно быть), затем file_get_contents, затем echo, а затем img src, тогда он будет отлично отображаться.

У меня установлен Thickbox, и я хочу, чтобы, когда пользователь нажимает на изображение, оно будет отображаться в увеличенном формате.

<a href="img.jpg" class="thickbox"><img src="my_image_processing.php?img=img.jpg" />

Я пытаюсь создать галерею при нажатии. То, что происходит, - это то, что толстая коробка появляется, но изображение нет. Вместо изображения коды бреда / мусора отображаются с черными бриллиантами с вопросительным знаком. Я предполагаю, что это необработанный код изображения.

Как вывести это как изображение, а не как необработанный код в

<a href> 's

ДОБАВЛЕНО: Я просто немного поиграл с этим. Когда я удаляю класс Thickbox, a href фактически работает. Обычно изображение отображается на следующей странице. К сожалению, когда я присоединяю классы Thickbox, он показывает Thickbox, но он показывает необработанный код

Ответы [ 4 ]

2 голосов
/ 12 мая 2011

Попробуйте:

header ("Content-type: image/jpeg");

Если вы видите необработанные данные изображения в виде текста, возможно, ваш браузер не распознает вывод как изображение.Вы можете указать правильный тип MIME с помощью строки заголовка выше.

Также возможно, что возникла ошибка и сообщения об ошибках делают файл изображения нечитаемым (потому что вместо заголовков поток начинается с сообщения об ошибке).В этом случае вы должны увидеть сообщение об ошибке перед символами.

2 голосов
/ 12 мая 2011

В вашем примере вы используете файл jpg напрямую, он должен выглядеть примерно так:

<a href="my_image_processing.php?img=img.jpg" class="thickbox"><img src="my_image_processing.php?img=img.jpg" />

То есть страница php, которая читает скрытую папку и возвращает изображение.

1 голос
/ 12 мая 2011

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

  • используйте переписывание пользовательских URL-адресов и заставьте ваш скрипт работать, например. используя URL-адрес, например my_image_processing/img.jpg вместо my_image_processing.php?img=img.jpg (ищите дополнительную информацию по "mod_rewrite"),
  • переписать код ThickBox (или выполнить поиск параметров, позволяющих изменить этот механизм распознавания без изменения кода - я не нашел ни одного), или
  • реализовать другую библиотеку, позволяющую вам реализовать то, что вам нужно (и позволяет использовать внешний сценарий так, как вы хотели),

Одна вещь заставляет Thickbox думать, что он загружает изображение, а не страницу в рамку, а вторая - как указал vbence - добавление правильного типа пантомимы к изображению, которое вы возвращаете своим сценарием: вы следует добавить соответствующий заголовок с информацией «Content-Type».

EDIT:

Код, отвечающий за отображение изображений, начинается следующим образом [sic!]:

var baseURL;
 if(url.indexOf("?")!==-1){ //ff there is a query string involved
  baseURL = url.substr(0, url.indexOf("?"));
 }else{ 
     baseURL = url;
 }

 var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
 var urlType = baseURL.toLowerCase().match(urlString);
if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images

Вы можете добавить другой тип ('php'), если вы решите изменить скрипт самостоятельно, но вы должны знать о последствиях.

EDIT2:

Если вы воспользуетесь опцией «изменить плагин», есть некоторая альтернатива ( ColorBox ), которая позволяет вам без необходимости копаться в коде, должна ли ссылка * .php рассматриваться как изображение. Просто найдите опцию photo в документации (когда установлено photo=true должно вести себя так, как вы ожидаете).

0 голосов
/ 12 мая 2011

Вы, вероятно, пренебрегали заголовками http для отображения изображения.

header("Content-type: image/jpeg");
header("Content-Disposition: attachment;"); 
...