Я хочу загрузить файл документа, расположенный по адресу http://confluence.rogersdigitalmedia.com/exportword?pageId=1114407 . Как я могу изменить следующий код, чтобы загрузить файл с этого URL-адреса?
И может кто-то объяснить, что этот код делает в текущем состоянии, что он загружает, файл из каталога?
<?php // place this code inside a php file and call it fe "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> ?>
Этот код должен загружать файлы через PHP. Обычно он используется для скрытия каталога, содержащего загрузки, или для загрузки файлов, которые в противном случае были недоступны, поскольку файлы находятся за пределами корня веб-сайта. Другое использование для такого скрипта – предлагать загрузки для авторизованных пользователей, вам нужно будет поместить проверку подлинности в сценарий.
Если файл имеет расширение PDF, загрузка предлагается как с типом 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.
Этот код – это то, что вы помещаете на свой собственный сервер, чтобы люди могли загружать файлы через PHP. Обычно вы добавляете некоторый код аутентификации, чтобы PHP мог принять / отклонить пользователя перед загрузкой.