Обновить каталог сервера в aspx.cs [duplicate]

В PHP вам нужно либо использовать функции multibyte , либо включить mbstring.func_overload . Таким образом, такие вещи, как strlen, будут работать, если у вас есть символы, которые принимают более одного байта.

Вам также потребуется определить набор символов ваших ответов. Вы можете использовать AddDefaultCharset, как указано выше, или написать PHP-код, который возвращает заголовок. (Или вы можете добавить тег META в свои HTML-документы.)

100
задан Guillermo Gutiérrez 5 June 2013 в 21:42
поделиться

14 ответов

Армин Роначер имеет правильную идею. Проблема состоит в случайных цепочках. Я бы использовал:

<img src="picture.jpg?1222259157.415" alt="">

, где «1222259157.415» - текущее время на сервере. (Примечание: я использовал python time.time (), чтобы сгенерировать это)

156
ответ дан epochwolf 28 August 2018 в 07:58
поделиться

Вы можете написать прокси-скрипт для работы с изображениями - это немного больше работы. Что-то нравится в этом:

HTML:

<img src="image.php?img=imageFile.jpg&some-random-number-262376" />

Сценарий:

// PHP
if( isset( $_GET['img'] ) && is_file( IMG_PATH . $_GET['img'] ) ) {

  // read contents
  $f = open( IMG_PATH . $_GET['img'] );
  $img = $f.read();
  $f.close();

  // no-cache headers - complete set
  // these copied from [php.net/header][1], tested myself - works
  header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Some time in the past
  header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
  header("Cache-Control: no-store, no-cache, must-revalidate"); 
  header("Cache-Control: post-check=0, pre-check=0", false); 
  header("Pragma: no-cache"); 

  // image related headers
  header('Accept-Ranges: bytes');
  header('Content-Length: '.strlen( $img )); // How many bytes we're going to send
  header('Content-Type: image/jpeg'); // or image/png etc

  // actual image
  echo $img;
  exit();
}

На самом деле, либо заголовки no-cache, либо случайное число на изображении src должны быть достаточными , но так как мы хотим быть пуленепробиваемыми.

6
ответ дан 2 revs, 2 users 99%Mindeh 28 August 2018 в 07:58
поделиться

С моей точки зрения, отключить кеширование изображений - плохая идея. Вообще.

Проблема с корнем заключается в том, как заставить браузер обновлять изображение, когда он был обновлен на стороне сервера.

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

В моем случае это служба отдыха, которая возвращает изображение и прикрепляет ETag в ответ. Служба сохраняет хэш всех файлов, если файл изменен, хеш обновляется. Он отлично работает во всех современных браузерах. Да, для его реализации требуется время, но это того стоит.

Единственное исключение - это значки. По некоторым причинам это не работает. Я не мог заставить браузер обновлять кеш с сервера. ETags, Cache Control, Expires, заголовки Pragma, ничего не помогли.

В этом случае добавление некоторого параметра random / version в url, кажется, является единственным решением.

0
ответ дан Alexandr 28 August 2018 в 07:58
поделиться

При загрузке изображения его имя файла не сохраняется в базе данных.

Изменить это, и вы исправили свою проблему. Я использую временные метки, такие как предлагаемые выше решения: Image- & lt; timestamp> .jpg

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

4
ответ дан AmbroseChapel 28 August 2018 в 07:58
поделиться

use Class = "NO-CACHE"

sample html:

<div>
    <img class="NO-CACHE" src="images/img1.jpg" />
    <img class="NO-CACHE" src="images/imgLogo.jpg" />
</div>

jQuery:

    $(document).ready(function ()
    {           
        $('.NO-CACHE').attr('src',function () { return $(this).attr('src') + "?a=" + Math.random() });
    });

javascript:

var nods = document.getElementsByClassName('NO-CACHE');
for (var i = 0; i < nods.length; i++)
{
    nods[i].attributes['src'].value += "?a=" + Math.random();
}

Результат: src = "images / img1.jpg" => src = "images / img1.jpg? a = 0.08749723793963926"

3
ответ дан Aref Rostamkhani 28 August 2018 в 07:58
поделиться

Простое исправление: Прикрепить случайную строку запроса к изображению:

<img src="foo.cgi?random=323527528432525.24234" alt="">

Что говорит HTTP RFC:

Cache-Control: no-cache

Но это не так хорошо работает: ) [/ д2]

44
ответ дан Armin Ronacher 28 August 2018 в 07:58
поделиться

Я использую функцию изменения времени файла PHP , например:

echo <img  src='Images/image.png?" . filemtime('Images/image.png') . "'  />";

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

17
ответ дан bfavaretto 28 August 2018 в 07:58
поделиться

Добавить метку времени <img src="picture.jpg?t=<?php echo time();?>">

всегда даст вашему файлу случайное число в конце и остановит его кеширование

1
ответ дан BritishSam 28 August 2018 в 07:58
поделиться

Ваша проблема в том, что, несмотря на заголовок Expires:, ваш браузер повторно использует свою копию в памяти в памяти с момента ее обновления, а не даже проверяет ее кеш.

У меня было очень похожая ситуация с загрузкой изображений продукта в бэкэнде администратора для хранилища, подобного сайту, и в моем случае я решил, что лучшим вариантом было использование javascript для принудительного обновления изображения без использования каких-либо методов изменения URL, которые другие люди уже упомянутый здесь. Вместо этого я поместил URL-адрес изображения в скрытый IFRAME, названный location.reload(true) в окне IFRAME, а затем заменил мое изображение на странице. Это заставляет обновлять изображение не только на странице, на которой я нахожусь, но и на любых последующих страницах, которые я посещаю, - ни клиент, ни сервер не должны помнить какие-либо URL-запросы или параметры идентификатора фрагмента.

Я написал код для этого в моем ответе здесь .

2
ответ дан Community 28 August 2018 в 07:58
поделиться

Я предполагаю, что исходный вопрос касается изображений, сохраненных с некоторой текстовой информацией. Таким образом, если у вас есть доступ к текстовому контексту при генерации src = ... url, рассмотрите использование / использование CRC32 байтов изображения вместо бессмысленной случайной или временной отметки. Затем, если страница с большим количеством изображений отображается, обновляются только обновленные изображения. В конце концов, если сохранение CRC невозможно, оно может быть вычислено и добавлено к URL-адресу во время выполнения.

1
ответ дан jbw 28 August 2018 в 07:58
поделиться

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

<meta Http-Equiv="Cache" content="no-cache">
<meta Http-Equiv="Pragma-Control" content="no-cache">
<meta Http-Equiv="Cache-directive" Content="no-cache">
<meta Http-Equiv="Pragma-directive" Content="no-cache">
<meta Http-Equiv="Cache-Control" Content="no-cache">
<meta Http-Equiv="Pragma" Content="no-cache">
<meta Http-Equiv="Expires" Content="0">
<meta Http-Equiv="Pragma-directive: no-cache">
<meta Http-Equiv="Cache-directive: no-cache">

Не знаете, что работает над тем, что браузер, но он работает для некоторых: IE: работает, когда веб-страница обновляется, и когда веб-сайт пересматривается (без обновления). CHROME: Работает только при обновлении веб-страницы (даже после повторного просмотра). SAFARI и iPad: не работает, мне нужно очистить History & amp; Веб-данные.

Любые идеи на SAFARI / iPad?

5
ответ дан Sensei James 28 August 2018 в 07:58
поделиться

Я проверил все ответы по сети, и лучший из них, казалось, был: (на самом деле это не так)

<img src="image.png?cache=none">

.

Однако, если вы add cache = none параметр (который является статическим «ничьим» словом), это ничего не влияет, браузер все еще загружается из кеша.

Решение этой проблемы:

<img src="image.png?nocache=<?php echo time(); ?>">

, где вы в основном добавляете временную метку unix, чтобы сделать параметр динамическим и без кеша, он работал.

Однако моя проблема была немного иной: я загружал на лету сгенерированное изображение диаграммы php и контролировал страницу с параметрами $ _GET. Я хотел, чтобы изображение читалось из кеша, когда параметр URL GET остается прежним и не кэшируется при изменении параметров GET.

Чтобы решить эту проблему, мне нужно было хеш $ _GET, но поскольку это массив здесь - это решение:

$chart_hash = md5(implode('-', $_GET));
echo "<img src='/images/mychart.png?hash=$chart_hash'>";

Edit:

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

echo "<img src='/images/mychart.png?hash=" . filemtime('mychart.png') . "'>";

filemtime () получает время изменения файла.

2
ответ дан Tarik 28 August 2018 в 07:58
поделиться

Потенциал для плохого поведения прозрачных прокси-серверов между вами и клиентом, единственный способ полностью гарантировать, что изображения не будут кэшироваться, - это дать им уникальный uri, что-то вроде пометки timestamp как строки запроса или как часть пути.

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

1
ответ дан user7375 28 August 2018 в 07:58
поделиться

Я бы использовал:

<img src="picture.jpg?20130910043254">

, где «20130910043254» - время модификации файла.

При загрузке изображения его имя файла не сохраняется базы данных. Он переименован в Image.jpg (просто для использования при его использовании). При замене существующего изображения на новое имя также не изменяется. Просто содержимое файла изображения меняется.

Я думаю, что есть два типа простых решений: 1) те, которые приходят на ум сначала (простые решения, потому что их легко придумать ), 2) те, которые вы в конечном итоге после размышления над (потому что они просты в использовании). По-видимому, вы не всегда будете в выигрыше, если захотите подумать. Но, по-моему, другие варианты довольно недооцениваются. Подумайте, почему php так популярен;)

13
ответ дан x-yuri 28 August 2018 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: