Автор Тема: нитевидная закачка файлов через скрипт  (Прочитано 5745 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн semya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 0
    • Просмотр профиля
столько парюсь уже, в конечном итоге чтобы реализовать сабж вернулся к банальному header(\'Location: ..\') - обидно ужас как.

цель: не показывать реальный урл файла ни при каких условиях и умудриться запустить нитевидную закачку

решение: мод-рерайт отлавливает что хотя в пути стоит файл, это скрипт и отдает имя файла скрипту, скрипт делает все необходимые рассчеты, инкрементирует все счетчики, и выдает файл... вот тут и возникают проблемы

проблемы: 1) когда файл небольшой проблем вроде нет, 2) если отдавать все обычным способом типа readfile(), fopen(), fpassthru() etc.... то на файле больше 2х, 3х, метров скрипт дохнет, т.к. у пхп ограничения памяти стоит, и это понятно, разжали мы этот лимит до 100 метров, даже 18ти метровые файлы стал пропускать - но когда три-четыре юзера их качает - все равно кто-то дохнет! ставить ограничение на колчисество скачивающих - нереально! и нельзя! 3) заюзал pear::download класс, который якобы поддерживает нитевидную закачку, но все равно не стартуют остальные части кроме первой...

вопросы:
1) каким образом дать возможность срипту юзать стольк памяти сколько надо и при этом не ограничивать количество скачивающих? я так понимаю надо как-то заюзать внутренние функции апача?

2) как при отдаче файла скриптом заставить работать нитевидность?

спасибо... надеюсь найти ответ...

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
нитевидная закачка файлов через скрипт
« Ответ #1 : 28 Октября 2003, 00:11:31 »
Отдавай файл вот так:
$fp fopen(\'filename.ext\', \'rb\');
while(!feof($fp)) {
    echo fread($fp, 1024);
}
fclose($fp);

У меня на локальном сервере такой код работает с файлами любого размера. Правда на одном хостинге, где мне приходилось отдавать действительно большие файлы, он умирал на файлах больше 93 Мб, даже на одном потоке...

ЗЫ: Насколько я знаю, fpassthru и readfile вообще не должны использовать память скрипта - они сразу всё отдают в output.
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн semya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 0
    • Просмотр профиля
нитевидная закачка файлов через скрипт
« Ответ #2 : 28 Октября 2003, 09:20:28 »
FreeSpace
пасибо за совет, но такой код тоже пробовал, не работает, дохнет эдак на файлах между 2,5 и 2,8 когда как. Видимо у твоего локального сервера памяти побольше и пошустрее он.

Цитировать
Насколько я знаю, fpassthru и readfile вообще не должны использовать память скрипта - они сразу всё отдают в output.

When using readfile()  -or fopen() and fpassthru() - make sure that if you are dealing with large files that are located on your server, use absolute paths and not URL\'s! Otherwise, the file will essentially be downloaded twice - the script will access the file from your web server itself, and then output it to the client, doubling the bandwidth. I made this mistake in a download script I made that included files on other servers, when the file was on mine, I forgot to use absolute paths. So, even for good practice if your files you\'re accessing are small, use absolute paths whenever possible. Seems obvious, but don\'t forget about it. - man...

и нитевидная закачка все равно не пашет

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
нитевидная закачка файлов через скрипт
« Ответ #3 : 28 Октября 2003, 22:42:34 »
Каким образом
Цитировать
use absolute paths and not URL\'s
относится к этой теме?
По-моему у тебя проблемы с хостингом и тебе следует его поменять.
Но только если ты действительно всё делаешь правильно и даже PEAR-класс у тебя не работает так, как должен.
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн amigo

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.livejournal.com/users/amigo_otaku
нитевидная закачка файлов через скрипт
« Ответ #4 : 29 Октября 2003, 00:57:25 »
По-моему решение тут очень простое: используешь mod_rewrite, в нем прописываешь

RewriteEngine On
RewriteMap update-stats prg:/home/www/htdocs/update.pl

RewriteRule ^/download?id=([0-9]+)$ ${update-stats:$1}

update.pl при этом делает необходимые изменения и возвращает реальный путь к файлу на сервере (завершенный \\n).
Не забудь отключить буферизацию вывода:
$| = 1;
WBR, AMiGo.

Оффлайн FreeSpace

  • Штатный лодырь
  • Ветеран
  • *****
  • Сообщений: 613
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.infinity.com.ua
нитевидная закачка файлов через скрипт
« Ответ #5 : 29 Октября 2003, 04:29:34 »
[off]
Цитировать
amigo:
RewriteMap update-stats prg:/home/www/htdocs/update.pl

Цитировать
amigo:
$| = 1;

Форум по перлу на этаж выше.[/off]
Программирование - это единственное искусство, которое способно воплотить столь уникальное сочетание эстетики и функциональности.

Оффлайн amigo

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.livejournal.com/users/amigo_otaku
нитевидная закачка файлов через скрипт
« Ответ #6 : 29 Октября 2003, 08:03:22 »
FreeSpace я знаю, но ведь такой способ гораздо лучше, чем fpassthru(), равзе не так?
Зачем повторно реализовывать функции, заложенные в Апаче?

Если не нравиться Перл, то пусть уж в RewriteMap вызывается шелловый скрипт, который будет вызывать PHP ^_^
WBR, AMiGo.

Оффлайн semya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 0
    • Просмотр профиля
нитевидная закачка файлов через скрипт
« Ответ #7 : 29 Октября 2003, 14:14:25 »
amigo
мод-рерайт не прокатит в моем конкретном случае, т.к.  у меня на нем и так движок сайта завязан. а вот с буферизацией вывода ты похоже прав, сейчас это проверяю, видимо где-то в движке она включается... сейчас ищу, спасибо за идею.

Оффлайн amigo

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.livejournal.com/users/amigo_otaku
нитевидная закачка файлов через скрипт
« Ответ #8 : 29 Октября 2003, 17:32:11 »
semya и что мешает прикрутить еще несколько рерайт-директив? =)
Ладно, умолкаю, больше идей у меня нет.
WBR, AMiGo.

Оффлайн semya

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 307
  • +0/-0
  • 0
    • Просмотр профиля
нитевидная закачка файлов через скрипт
« Ответ #9 : 29 Октября 2003, 18:41:23 »
amigo
ну понимаешь, движок штука нежная, чуть где слэша не хватает, чуть где страница не так проиндексина - уже не хорошо получается, поэтому именно в моем случае такое решение не катит... тем более если я поставлю перепись определенного адреса, топотеряется универсальность.... ну короче много мелких геморров... но это уже не по теме...

Оффлайн amigo

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 23
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.livejournal.com/users/amigo_otaku
нитевидная закачка файлов через скрипт
« Ответ #10 : 29 Октября 2003, 19:49:29 »
semya OK. Если с buffering что-нибудь получится, сообщи =)
WBR, AMiGo.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28