Скрытая закачка c ФТП-сервера.

Space

Новичок
Скрытая закачка c ФТП-сервера.

Я хочу скриптом скачивать с фтп файл и выдавать его юзеру через заголовок.
Это сделанно для того, что бы пользователь не видел что файл скачивается с ФТП.
Я это реализовал - но появилась проблема: если файл больше 2х метров - скрипт перестает исполнятся (Internal Server Error).
Я не могу править ни php.ini ни httpd.conf

как сделать что бы файл отдавался постепенно?

$temp = tmpfile();

$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $user, $pass);

$size = ftp_size($conn_id, urldecode($FILE_NAME));
if($size>0)
{
$fget_result=ftp_fget($conn_id, $temp, $FILE_NAME, FTP_ASCII);
ftp_quit($conn_id);

rewind ($temp);
$FILE_DATA=fread($temp,$size);
fclose($temp);

Header("Content-Disposition: attachment; filename=$FILE_NAME");

print $FILE_DATA;
}
 

Space

Новичок
%)
Дело в том, что на ФТП лежит огромное количество файлов - и если юзера узнают что там такое - у меня сервак полетит. просто не выдержит нагрузки(все проги Most popular) - уже был такой опыт.

поэтому я хочу дать линки только на нектороые файлы.
 

Altex

Новичок
По мылу кинешь линк ? ))) Может там зеркало Wzor'a ? ))

Вообще я имел ввиду что причем тут "выдавать его юзеру через заголовок"?
 

Space

Новичок
Altex
Через заголовок говоришь.... :) просто в заголовок мы отдаем имя и тип файла -мпоэтому так выразился.

я уже сделал несколько по другому.
я на счет линка - можешь и так посмотреть: http://olgin.ru/soft/
Это где-то 1/200 часть всего :) просто мне не выгодно сервер валить.

PHP:
 if($size>0)
  {
  Header("Content-Length: ".$size);
  Header("Content-Type: application/octet-stream");
  Header("Content-Disposition: attachment; filename=$FILE_NAME");

  $file = fopen ("ftp://".$user.":".$pass."@".$ftp_server."/".$FILE_NAME, "r");
  while (!feof ($file))
  {
  $FILE_DATA = fgets($file, 4096);
  echo $FILE_DATA;
  }
  fclose($file);
  }
 

nblx

Guest
а может тебе просто сделать темп-директорию, скриптом по запросу перебрасывай туда файлик, переименовывай его закавыристо, а потом через 4-5 минут удаляй его.
Так сделано на некоторых МР3-обменных системах вроде
Originally posted by Space
Altex
Через заголовок говоришь.... :) просто в заголовок мы отдаем имя и тип файла -мпоэтому так выразился.

я уже сделал несколько по другому.
я на счет линка - можешь и так посмотреть: http://olgin.ru/soft/
Это где-то 1/200 часть всего :) просто мне не выгодно сервер валить.

PHP:
 if($size>0)
  {
  Header("Content-Length: ".$size);
  Header("Content-Type: application/octet-stream");
  Header("Content-Disposition: attachment; filename=$FILE_NAME");

  $file = fopen ("ftp://".$user.":".$pass."@".$ftp_server."/".$FILE_NAME, "r");
  while (!feof ($file))
  {
  $FILE_DATA = fgets($file, 4096);
  echo $FILE_DATA;
  }
  fclose($file);
  }
 

Alien

Новичок
Хороший варезник :)

Дай сообщение об ошибке?
Похоже, что стоит memory_limit в 2 мега.

Соответственно нужно по фтп качать файл кусками.
 

Space

Новичок
Alien
Я в самом верху дал сообщение об ошибке Internal Server Error

я уже все сделал - второе мое сообщение :)))))

будь внимательнее

респект.
 
Сверху