Помогите понять этот файл загрузки PHP кода - PullRequest
1 голос
/ 03 июня 2011

Я хочу загрузить файл документа, расположенный по адресу http://confluence.rogersdigitalmedia.com/exportword?pageId=1114407. Как я могу изменить следующий код для загрузки файла с этого URL ??

А может кто-нибудь объяснить, что делает этот код в его текущем состоянии, что он загружает, файл из каталога?

<?php

// place this code inside a php file and call it f.e. "download.php"
$path = $_SERVER['DOCUMENT_ROOT']."/path2file/"; // change the path to fit your websites document structure
$fullPath = $path.$_GET['download_file'];

if ($fd = fopen ($fullPath, "r")) {
    $fsize = filesize($fullPath);
    $path_parts = pathinfo($fullPath);
    $ext = strtolower($path_parts["extension"]);
    switch ($ext) {
        case "pdf":
        header("Content-type: application/pdf"); // add here more headers for diff. extensions
        header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download
        break;
        default;
        header("Content-type: application/octet-stream");
        header("Content-Disposition: filename=\"".$path_parts["basename"]."\"");
    }
    header("Content-length: $fsize");
    header("Cache-control: private"); //use this to open files directly
    while(!feof($fd)) {
        $buffer = fread($fd, 2048);
        echo $buffer;
    }
}
fclose ($fd);
exit;
// example: place this kind of link into the document where the file download is offered:
// <a href="download.php?download_file=some_file.pdf">Download here</a>
?>

Ответы [ 2 ]

2 голосов
/ 03 июня 2011

Этот код предназначен для загрузки файлов через PHP. Обычно он используется для скрытия каталога, содержащего загружаемые файлы, или для загрузки файлов, которые в противном случае были недоступны, поскольку файлы находятся вне корневого веб-каталога. Другое использование такого сценария - предлагать загрузки для авторизованных пользователей, вам нужно будет поставить проверку подлинности в сценарии.

Если файл имеет расширение PDF, загрузка предлагается, как и для mimetype PDF, поэтому браузеры могут открывать его в средстве просмотра PDF. Другие файлы предлагаются в виде двоичных файлов, которые можно сохранить.

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

$fullPath = $path.$_GET['download_file'];

со следующим, чтобы сделать его немного более безопасным:

$fullPath = $path . basename($_GET['download_file']);

Еще лучше: реализовать белый список, разрешив имена файлов в пределах разрешенного набора символов и отклонив другие недопустимые имена файлов.


Загрузить внешний файл так же просто, как следовать примеру cURL :

<?php

$ch = curl_init("http://www.example.com/");
$fp = fopen("example_homepage.txt", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);

curl_exec($ch);
curl_close($ch);
fclose($fp);
?>

Поскольку я не имею понятия о URL-адресе вашей загрузки, я оставлю исходные URL-адреса и имена файлов из примера PHP.

0 голосов
/ 03 июня 2011

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

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