Реклама на сайте Advertise with us

РНР Отдать файл, не засветив прямой ссылки.

Расширенный поиск по форуму
 
Новая тема Новая тема   
Автор
Поиск в теме:



С нами с 21.06.05
Сообщения: 1788
Рейтинг: 1579

Ссылка на сообщениеДобавлено: 14/11/06 в 22:53       Ответить с цитатойцитата 

Есть папка, скажем files, в которой хранятся файлы, скажем 1.rar и 2.rar.
Как отдать браузеру файл 1.rar на скачивание при заходе на download.php?id=1 ?

Если размер небольшой, то можно прочитать в память и отдать с нужными заголовками, а если там пиццот метров? icon_smile.gif

ВОСТОРГ ЗНАЧИТ BMW

0
 



С нами с 16.10.05
Сообщения: 738
Рейтинг: 261

Ссылка на сообщениеДобавлено: 14/11/06 в 23:08       Ответить с цитатойцитата 

Антилич скрипты попробуй поищи. Делают они именно то что тебе нужно + защита от хотлинка.

6
 



С нами с 30.06.06
Сообщения: 79
Рейтинг: 78

Ссылка на сообщениеДобавлено: 14/11/06 в 23:15       Ответить с цитатойцитата 

Принцип действия такой:

Файл download.php
Ссылка на него такая: download.php?id=1 для файла rar2.rar

<?php

$links = array('rar1.rar', 'rar2.rar');

header ('location: '.$links[$_GET['id']])

?>

2
 

www.phpdevs.com

С нами с 24.10.02
Сообщения: 16633
Рейтинг: 16105


Передовик Master-X (01.09.2005) Передовик Master-X (16.09.2005) Передовик Master-X (01.10.2005) Передовик Master-X (16.08.2006) Передовик Master-X (16.10.2006) Ветеран трепа Master-X ()
Ссылка на сообщениеДобавлено: 14/11/06 в 23:21       Ответить с цитатойцитата 

читать по порциям, выдавать частями. А еще не забыть докачку icon_smile.gif
За $10 загляну в свои архивы и науйду этот файлик, которым архивы в сотни мег раздавал icon_smile.gif

Пишу на php/mysql/django за вменяемые деньги.
Обращаться в личку.

2
 



С нами с 03.10.06
Сообщения: 64
Рейтинг: 37

Ссылка на сообщениеДобавлено: 15/11/06 в 01:16       Ответить с цитатойцитата 

А fpassthru вообще не подходит?
Стреляет быстро, серевер не особо грузит (проверял stress tool)

2
 

php наше всё :)

С нами с 26.07.04
Сообщения: 814
Рейтинг: 447

Ссылка на сообщениеДобавлено: 15/11/06 в 08:52       Ответить с цитатойцитата 

I-Tog - Через Location ты засветишь урл файла.
Солидарен с Nicko.Ricci, юзал passthru для этого... Правда были траблы с именем файла отдаваемого...

2
 



С нами с 26.02.03
Сообщения: 2366
Рейтинг: 987

Ссылка на сообщениеДобавлено: 15/11/06 в 22:10       Ответить с цитатойцитата 

Я помню недавно уже поднималась эта тема и там предлагали генеририровать symlink на файл, и через определенное время его менять создавая новый.

1
 

Genuine Quality

С нами с 28.08.05
Сообщения: 652
Рейтинг: 910

Ссылка на сообщениеДобавлено: 16/11/06 в 00:32       Ответить с цитатойцитата 

я когда-то что-то подобное писал. код на яве, мож поможет
Код:

// checking for range header
String range = request.getHeader("Range");
int range_start = -1;
if (range != null) {
    range_start = Integer.parseInt(range.substring(range.indexOf('=') + 1, range.indexOf('-')));
}
// downloading
InputStream is = getServletContext().getResourceAsStream("/WEB-INF/" + zip.trim());

String fileName = zip.substring(zip.lastIndexOf('/') + 1);
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
response.setContentType("application/zip");

if (range_start != -1) {
    response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);
    response.setContentLength(is.available() - range_start);
    response.setHeader("Accept-Ranges", "bytes");
    response.setHeader("Content-Range", "bytes " + range_start + "-" + (is.available() - 1) + "/" + is.available());
    is.skip(range_start);
} else {
    response.setStatus(HttpServletResponse.SC_OK);
    response.setContentLength(is.available());
}   
OutputStream os = response.getOutputStream();

byte[] buf = new byte[4 * 1024];
int bytesRead;

try {
    while ((bytesRead = is.read(buf)) != -1) {
        os.write(buf, 0, bytesRead);
        Thread.sleep(15);
        os.flush();
    }
    if (is.available() == 0) {
        st.executeUpdate("UPDATE " + TABLE + " SET d_count = d_count+1 WHERE OID = \"" + oid + "\" AND SID = \"" + sid + "\"");
        throw new Exception();
    }
} catch (Exception e) {
    synchronized (this.downloads) {
        this.downloads.remove(info);
    }
}
os.close();
is.close();

код работает прекрасно, файл прячется и снаружи никак не доступен, стоит ограничение на одновременное кол-во и скорость отдачи файлов

6
 



С нами с 26.02.06
Сообщения: 55
Рейтинг: 37

Ссылка на сообщениеДобавлено: 16/11/06 в 04:30       Ответить с цитатойцитата 

по-моему самый простой (но не гибкий) способ в хтаксесе прописать:
RewriteEngine on
RewriteRule download.php?id=([0-9]+) $1\.rar [L]

PHP программер.

2
 



С нами с 19.02.03
Сообщения: 1284
Рейтинг: 354

Ссылка на сообщениеДобавлено: 16/11/06 в 10:50       Ответить с цитатойцитата 

используй symlink
для каждой сессии скачки создаешь symlink имя желательно через md5, потом его убиваешь через определенное время. Юзеру даешь ссылку на symlink

6
 



С нами с 25.08.05
Сообщения: 313
Рейтинг: 231

Ссылка на сообщениеДобавлено: 16/11/06 в 14:27       Ответить с цитатойцитата 

http://www.php.net/manual/ru/function.passthru.php
Цитата:
If you are using passthru() to download files (for dynamically generated content or something outside webserver root) using similar code:

header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"myfile.zip\"");
header("Content-Length: 11111");
passthru("cat myfile.zip",$err);

and your download goes fine, but subsequent downloads / link clicks are screwed up, with headers and binary data being all over the website, try putting

exit();

after the passthrough. This will exit the script after the download is done and will not interfere with any future actions.


имхо то что тебе нужно

6
 
Новая тема Новая тема   

Текстовая реклама в форме ответа
Заголовок и до четырех строчек текста
Длина текста до 350 символов
Купить рекламу в этом месте!


Перейти:  



Спонсор раздела Стань спонсором этого раздела!

Реклама на сайте Advertise with us

Опросы

Рецепт новогоднего блюда 2022



Обсудите на форуме обсудить (11)
все опросы »