PHP: захват изображения из потока (в теге img), но если его там нет, я не хочу, чтобы был написан тег img. Как? - PullRequest
0 голосов
/ 19 мая 2010

В настоящее время у меня есть подобный код в веб-файле с именем 'view_file.php', чтобы получить изображение из внутренней сети.

<img src="put_file.php?type=<?=$TN_TYPE;?>&path=<?=$TN_PATH;?>&filename=<?=$TN_FILENAME;?>" />

Сценарий put_file.php позволяет получить доступ к внутреннему серверу, который мы не хотим открывать для доступа в Интернет. Этот скрипт проверяет, доступно ли изображение и, если он есть, отправляет заголовок изображения, а затем использует readfile() для потоковой передачи изображения на страницу 'view_file.php'.

Проблема в том, что если изображение недоступно, вместо потоковой передачи временного «spacer.gif» я хочу, чтобы тег img вообще не записывался.

Есть идеи, как это сделать? Я думаю, может быть, переместить тег img в сценарий «put_file.php», но как смешивать строки и пары?

Ответы [ 2 ]

3 голосов
/ 19 мая 2010

Я не могу сделать просто, я думаю.

  • Вы можете вызвать put_file.php в PHP, посмотреть, что он возвращает, и если он возвращает пустое значение (или заголовок 404 или что-то еще), воздержитесь от записи тега img. Очевидный довод: запрос делается дважды, и это усложняет сценарий.

  • Вы можете создать элемент изображения в JavaScript в зависимости от результата Ajax-вызова put_file.php. Очевидный минус: не появляется сразу после загрузки и требует JavaScript.

Обе эти опции могут быть сведены к выполнению одного запроса путем передачи результатов запроса на тестирование в кодированный base64 * URI , но это крайне несовместимо (без IE поддержка) и раздувает страницу на стороне браузера (данные изображения плюс 33% накладных расходов будут присутствовать прямо в исходном коде или в памяти JavaScript, соответственно). Я не рекомендовал бы это.

Если это вообще возможно, я лично придерживаюсь решения spacer.gif.

Обновление: Еще одна идея, если вы просто не хотите, чтобы изображения появлялись, - отправлять заголовок 404, когда изображение отсутствует, и использовать * 1029. * событие тега img, скажем, для выполнения <img onerror='this.style.display = "none"'>. Требуется Javascript, конечно. Кажется, что событие ошибки полностью поддерживается во всех браузерах (ссылка здесь , только извините по-немецки, но вы увидите значки :).

1 голос
/ 19 мая 2010

Вы можете использовать base64, чтобы делать, что вы хотите.

http://www.sweeting.org/mark/blog/2005/07/12/base64-encoded-images-embedded-in-html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...