Тема: Загрузчик на php
Як зробити скрипт який буде скачувати з сайту файл ?
Наприклад rar архів.
Хоч підкажіть в якому напрямку шукати.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → PHP → Загрузчик на php
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися
Як зробити скрипт який буде скачувати з сайту файл ?
Наприклад rar архів.
Хоч підкажіть в якому напрямку шукати.
URL-и в PHP відкриваються так само, як і звичайні файли: fopen, file, file_get_contents. Тобто задача, якщо файл загальнодоступний (без логіну на сайті і т.д.) зводиться до звичайного копіювання файлів. Якщо ж щось нетривіальне, то треба cURL використовувати.
URL-и в PHP відкриваються так само, як і звичайні файли: fopen, file, file_get_contents. Тобто задача, якщо файл загальнодоступний (без логіну на сайті і т.д.) зводиться до звичайного копіювання файлів. Якщо ж щось нетривіальне, то треба cURL використовувати.
Ось знайшов
<?php
function downloadFile($filename, $mimetype='application/octet-stream') {
if (!file_exists($filename)) die('Файл не найден ' . $filename);
$from=$to=0; $cr=NULL;
if (isset($_SERVER['HTTP_RANGE'])) {
$range=substr($_SERVER['HTTP_RANGE'], strpos($_SERVER['HTTP_RANGE'], '=')+1);
$from=strtok($range, '-');
$to=strtok('/'); if ($to>0) $to++;
if ($to) $to-=$from;
header('HTTP/1.1 206 Partial Content');
$cr='Content-Range: bytes ' . $from . '-' . (($to)?($to . '/' . $to+1):filesize($filename));
} else header('HTTP/1.1 200 Ok');
$etag=md5($filename);
$etag=substr($etag, 0, 8) . '-' . substr($etag, 8, 7) . '-' . substr($etag, 15, 8);
header('ETag: "' . $etag . '"');
header('Accept-Ranges: bytes');
header('Content-Length: ' . (filesize($filename)-$to+$from));
if ($cr) header($cr);
header('Connection: close');
header('Content-Type: ' . $mimetype);
header('Last-Modified: ' . gmdate('r', filemtime($filename)));
$f=fopen($filename, 'r');
header('Content-Disposition: attachment; filename="' . basename($filename) . '";');
if ($from) fseek($f, $from, SEEK_SET);
if (!isset($to) or empty($to)) {
$size=filesize($filename)-$from;
} else {
$size=$to;
}
$downloaded=0;
while(!feof($f) and !connection_status() and ($downloaded<$size)) {
echo fread($f, 512000);
$downloaded+=512000;
flush();
}
fclose($f);
}
downloadFile($_GET['file']);
?>
Слід також зауважити, що на багатьох хостингах існує заборона відкривати адреси зовнішніх сайтів. Тобто, потрібно також мати певні права доступу, щоб php-скрипт на сервері міг щось завантажити з іншого сервера.
Як саме стоїть задача — написати серверний скрипт, який скачує з зовнішніх сайтів файли на свій сервер (тоді див. відповідь Коали плюс зауваження про права доступу)? Чи скачати щось на локальний комп'ютер (для цього справді годиться wget, але до чого тут php?)?
Слід також зауважити, що на багатьох хостингах існує заборона відкривати адреси зовнішніх сайтів. Тобто, потрібно також мати певні права доступу, щоб php-скрипт на сервері міг щось завантажити з іншого сервера.
Як саме стоїть задача — написати серверний скрипт, який скачує з зовнішніх сайтів файли на свій сервер (тоді див. відповідь Коали плюс зауваження про права доступу)? Чи скачати щось на локальний комп'ютер (для цього справді годиться wget, але до чого тут php?)?
Зробить кнопку "Скачать".
В найпростішому випадку — зробити на сторінці посилання на скачуваний файл:
<a href="YOURFILE.RAR">Скачати</a>
Частина проблеми полягає в тому, що сервер може не розпізнавати даний тип файлів за розширенням і передавати його як html, у результаті чого замість діалогу скачування вилазить сторінка з кракозябликами (хоча скачування через праву кнопку працює). Тобто, в конфігураційних файлах (у випадку Апача, це mime.types) має бути прописана асоціація розширення з назвою типу (для rar-архівів: application/x-rar-compressed rar). Або ж, якщо файли конфігурації недоступні, можна написати скрипт, який містить інструкцію
header('Content-Type: application/x-rar-compressed');
після чого зчитує потрібний rar-архів і виводить його через echo. В такому разі, на сторінці скачування треба буде зробити посилання не на сам архів, а на цей скрипт, що прописує тип і, можливо, виконує якісь додаткові дії.
Сторінки 1
Для відправлення відповіді ви повинні увійти або зареєструватися