как реализовать логику для моей кнопки загрузки - PullRequest
2 голосов
/ 22 сентября 2010

Я хочу знать, как реализовать логику для моей кнопки загрузки в PHP.У меня есть файл на веб-сервере и есть страница с кнопкой загрузки.Я хочу начать загрузку файла, когда пользователь нажмет кнопку загрузки.Как неумолимо?Спасибо

Ответы [ 2 ]

3 голосов
/ 23 сентября 2010

Вот как вы начинаете загрузку, не давая пользователю увидеть реальный путь к файлу.Установите ссылку на файл download.php? File = filename и убедитесь, что файл существует в папке загрузки.Затем используйте этот код, чтобы проверить, существует ли файл, и дайте им скачать его.При желании вы можете поставить проверку входа в систему или другую проверку.

<?php
//download.php
$dir = '/path/to/file/'; 
if (isset($_GET['file']) && !is_dir($_GET['file']) && file_exists($dir . $_GET['file'] . '.zip')) 
{ 
    $file = $dir . $_GET['file'] . '.zip'; 
    header('Content-type: application/force-download'); 
    header('Content-Transfer-Encoding: Binary'); 
    header('Content-length: ' . filesize($file)); 
    header('Content-disposition: attachment; filename=' . basename($file)); 
    readfile($file); 
} 
else 
{ 
    echo 'No file selected'; 
} 
?>

Кроме того, вы также можете заблокировать доступ к папке с файлами в ней с помощью файла .htaccess.Если вы хотите, поместите следующий код в файл .htaccess в директории файлов.

order allow, deny
deny from all
1 голос
/ 23 сентября 2010

В обоих предоставленных решениях (readfile или заголовок X-Sendfile) файл может храниться вне общедоступного каталога сервера (обычно называемого htdocs или www).

//page.php
<form method="get" action="download.php">
    With button <input type="submit" value="Download file" />
</form>
or
With link <a href="download.php">Download file</a>


<?php // download.php
$file = '/path/to/file.zip';

if (file_exists($file)) {
    // send headers that indicate file download
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    // send file (must read comments): http://php.net/manual/en/function.readfile.php
    readfile($file);
    exit;
}

Лучшее решение, если ваш сервер поддерживает заголовок X-Sendfile (mod_xsendfile):

<?php
header('Content-Disposition: attachment;filename=hello.txt');
header('X-Sendfile: /path/to/file.zip');

http://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...