Я ищу 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) проверки даты, чем установить сон. Добавьте имя файла для загрузки.