Измените имя файла для загрузки и начните его загрузку после клика или задержки

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

Что-то вроде этого: загрузка начнется через несколько минут … Если ничего не произойдет, нажмите <a href="">here</a> .

Я нашел только это:

 // It will be called downloaded.pdf header('Content-Disposition: attachment; filename="downloaded.pdf"'); // The PDF source is in original.pdf readfile('plik.pdf'); 

https://stackoverflow.com/a/6694505

Пожалуйста, помогите мне.

Вам понадобится две части, чтобы сделать это эффективно … В отображаемом PHP-файле (назовем его download.php ) вам нужно будет запустить функцию Javascript, которая учитывает ваш клиент до нуля. Когда он достигает нуля, он просто перенаправляется в реальное место загрузки (назовем его realdl.php ). Этот файл фактически захватит содержимое файла и отправит его пользователю при перенаправлении или нажатии.

Вот некоторые элементы, которые вам понадобятся в download.php :

 <? $file_dl_url = "/realdl.php?id=FILEID"; ?> <script language="javascript"> var elapsed = 0; function countdown { // see if 5 seconds have passed if (elapsed >= 5) { window.location = <?= $file_dl_url ?>; } else { // update countdown display & wait another second elapsed++; setTimeout("countdown", 1000); } } setTimeout("countdown", 1000); </script> <a href="<?= $file_dl_url ?>">Click Here</a> 

Затем все, что вам нужно в realdl.php следующее:

 $file_contents = load_file_from_id($_GET['id']); $file_name = determine_filename(); header("Content-Disposition: attachment; filename=$file_name"); echo $file_contents; 

Конечно, вам необходимо предоставить методы для получения содержимого файла (либо просто прочитанного с диска, либо, возможно, базы данных), а также для определения имени файла. Чтобы использовать время в виде формата имени файла, см. http://us3.php.net/manual/en/function.strftime.php для функции strftime .

В зависимости от того, как файл хранится, вы можете быть более эффективным, используя fpassthru для локальных файлов, в качестве примера. Вы также можете отправить заголовок Content-Length если вы можете определить размер файла перед загрузкой (т. Е. Это статический контент, который вы отправляете).

Я не рекомендую использовать сон или другие задержки на стороне сервера (PHP). Вы можете использовать какой-то JavaScript-код, который отобразит желаемое уведомление пользователю и перенаправит страницу на URL-адрес загрузки файла (скрипт PHP). Там вы можете использовать заголовок Content-Disposition, чтобы изменить имя загружаемого файла.

Код JavaScript может быть частично сгенерирован с PHP, если необходимо, чтобы перенаправить URL-адрес.

Вы можете попробовать добавить некоторые временные переменные, такие как:

 $delay = 10; #delay of 10 seconds sleep($delay); $timedt = time()+$delay; $filename = 'downloaded-'.$timedt.'.pdf'; header('Content-Disposition: attachment; filename="{$filename}"'); 

Импровизировать и добавить некоторую функцию для проверки условий (if / else) проверки даты, чем установить сон. Добавьте имя файла для загрузки.