Создать файл и скачать его php

0

Я пытаюсь создать файл.html и загрузить его.

Моя проблема: сначала проверьте, существует ли файл, если true, я удаляю его и создаю новый.

Когда я нажимаю, чтобы сгенерировать файл, загруженный файл всегда является первым созданным файлом и не обновляется. Я проверил файл manualy и его нормально, но загруженный старый. Если я удалю файл на сервере, я все равно могу его загрузить.

проверьте сайт: bit.ly/1crrcif

$content =  "<html></head></head><body>All content here</body></html>";

   if( empty( $error )){ 

   echo "<h3>File generated</h3>";
   $my_file = 'change_nameto_index.html';
   if (file_exists($my_file)) {
       echo "file exists";
      unlink($my_file);
   }

   $new_file = 'change_nameto_index.html';
   $handle = fopen($new_file, 'w') or die('Cannot open file:  '.$new_file);
   $data = $content;
   fwrite($handle, $data);
   fclose($handle);
   echo "<a download='change_nameto_index.html' href='change_nameto_index.html'>"
      . "<b class='download'>Download</b></a>"
      ;
  • 0
    Не закрыто: if (пусто ($ error)) {
Теги:
download

2 ответа

1
Лучший ответ

решение 1: попробуйте добавить это в свою страницу страницы загрузки:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />

Решение 2:

Я думаю, что это "проблема с кешем". попробуй это:

echo "<a download='index.html?".time()."' href='index.html?".time()."'><b class='download'>Download</b></a>";

это не лучший способ, но, вероятно, быстрый (и простой)

добавление параметра, который каждый раз отличается (с '?' и time()), заставит браузер думать, что страница загрузки также отличается, поэтому она будет загружать последнюю версию

  • 0
    Я пробовал это решение, и оно работает хорошо, но я ищу другой вариант, не могли бы вы помочь?
  • 0
    попробуйте первое решение, добавьте мета в index.html
1

Подделка каждой ссылки будет новой

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

  someScript.php

один использует

   someScript.php?notUsedParameter=342342376

Noe, что параметр notUsedParameter не используется скриптом. Он просто используется, чтобы пометить ссылку на someScript.php как новую для клиентского браузера.

Этот общий метод является наиболее часто используемым и, вероятно, наиболее стабильным.

Следующий метод как-то зависит от браузера. Например, Internet Explorer немного разбирается в заголовках управления кэшем/прокси.

До и включая IE 8 определенные заголовки кэша/прокси-сервера эффективно предотвращают запрос на загрузку на основе SSL. Microsoft знает о проблеме и предлагает изменения реестра.

Принуждение браузера/прокси не сохранять контент ссылки

Другой вариант - сообщить браузеру/прокси не кэшировать текущий запрос.

header('Pragma: public');   
header('Expires: 0');       
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Last-Modified: Date Wed, 19 Feb 2000 23:45:13 GMT' );
header('Cache-Control: private', false);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню