Картинка по умолчанию, если отсутвует реальная
Добрый день.
Постараюсь объяснить доступно: Многие наверное видели потоковые плееры для радио на сайтах, в которых транслируется обложка играющего трека и меняется спустя какое то время или же сразу же после перехода на следующий трек. Вся проблема в чем - картинка существует по адресу www.site.ru/stream.png. Еесли в играющем файле она отсутствует, то по этому адресу выдается 404-ая ошибка. Я данную картинку прописываю как <img class="img_reload" src="www.site.ru/stream.png"> с авторефрешем каждые 30 секунд. Границы картинки прописаны 150 на 150. Соответственно, если картинка отсутствует, то остается пустая рамочка http://prntscr.com/4so974 Понятное дело, смотрится вообще не комильфо. Вот у меня думалки не хватает прикинуть, как этот вопрос решить, чтобы при отсутствии картинки выдавалась какая-то дефолтная типа "NoPhoto". Мне подсказывали, что можно написать скрипт проверки, если картинка присутствует, то выводить блок, а если нет, то display:none; Не знаю, прокатит ли, но т.к. мои познания в яваскрипт печальны, я пришел сюда просить помощи или хотя бы совета.:help: Надеюсь на дельные советы:victory: |
А нельзя на сервере подставлять пустую картинку, если реальная отсутствует? Это будет лучшим вариантом.
|
Цитата:
К сожалению, нет, т.к. играющих треков очень много и проставить каждой картинку это не меньшая проблема. |
Не каждой. Сервер же всё равно отдаёт на отсутствие 404, почему бы вместо этого ему не отдавать картинку-заглушку?
С помощью js как-то так, но это не гуд <img class="img_reload" id="image" src="www.site.ru/stream.png"> <script> (function(image, interval){ var test = new Image(); test.onload = function(){ image.src = this.src; image.style.display = ''; } test.onerror = function(){ image.style.display = 'none'; } setInterval(function(){ test.src = 'http://www.site.ru/stream.png?' + Math.random() }, interval) }(document.getElementById('image'), 30 * 1000)) </script> |
Цитата:
Я уже думал, попробовать написать на php скрипт проверки по коду ответа сервера, если будет 404 выдавать, то дефолтную, если 200, то значит всё пучком, но т.к. сервер сейчас вообще ни одной ошибки не отдает, что-то с доменом, видимо, посему я проверить не могу ничего):-? |
если картинка загрузилась то она перекроет фон
|
Как вариант можно создать файл .htaccess с следующим содержанием
Options -indexes <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} \.(gif|jpg|jpeg|png)$ RewriteRule .* noimage.jpg [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} \.(css)$ RewriteRule .* nocss.css [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} \.(js)$ RewriteRule .* nojs.js [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?/$1 [L] </IfModule> здесь же, рядом с файлом положить файлы которые будут показываться при отсутствии(пустые или заглушки) noimage.jpg, nojs.js, nocss.css |
Если делать редирект не внутренний, а внешний [R=301,L], то не будет проблем с кэшированием пустого изображения.
Кстати, насколько это надежно? Все браузеры следуют редиректам при загрузке картинок? Цитата:
|
Судя по всему тот сервер не его, расходимся пацаны.:)
|
Цитата:
Так вот, когда сервер не найдет файлы с расширениями css, js он обратится к index.php А там, инициализация движка и так далее. Произойдет лишняя работа. Которая в конечном случае должна выкинуть код ответа 404 В вышеприведенном решении, я могу сделать css, js пустыми и картинку однопиксельную. Когда сервер не найдет файлы с этими расширениями. Он поставит файлы по дефолту noimage.jpg, nojs.js, nocss.css. Для них вернет код 200. При этом увеличится отклик и уберет лишнюю нагрузку, так как управление не будет передано в точку входа index.php |
Часовой пояс GMT +3, время: 09:34. |