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

Отдать файл без засвета его местоположения symlink, hardlink

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



С нами с 28.03.00
Сообщения: 520
Рейтинг: 349

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

Нужно организовать раздачу файлов размером до 25Мб. Думаю как бы это лучше сделать. Прочитал что используют следующую конструкцию ПХП:

$namefile = './file.zip'; # Имя файла.
$f_size = filesize( $namefile );

/* Отправка заголовков */
header( 'Content-Type: application/zip' ); # Тип файла - zip-архив.
header( 'Content-Length: '.$f_size ); # Размер файла.
header( 'Accept-Ranges: bytes' ); # Размер измеряется в байтах.

/* Отдаем содержимое файла */
$f = fopen( $namefile, 'rb' );
$content = fread( $f, $f_size );
fclose( $f );

print $content;

Но как мне кажется такая фигня при одновременной скачке, скажем 50 пользователями, просто положит сервер т.к. будет запущено 50 апачей и ПХП каждый из который возмет файл в 25 Мб...

Вариант второй, как я уже когда-то делал копировать файл во временный каталог и уничтожать его по крону черз Nое количество часов. Тут, как я понимаю сервер грузиться не будет, т.к. человеку будет выдан прямой линк, но тут бы не забить до упора винт, да и контролировать скачку становится несколько затруднительно.

Вариант третий, который предложил админ:
Файл не копировать, а в папке откуда будет вестись скачка делать симлинк или хардлинк на исходный файл, потом его по крону удалять, старее суток например.
Так как я в юниксе не силен, полазил по инету нашел следующий ликбез про семи и хард линки: хttp://www.spravkaweb.ru/php/datafun/link/ - впринципе, тут все понятно. Остается непонятным как мне это реализовать для моего конкретного случая? Т.е. на PHP, для отдачи файлов пользователю, причем так, чтобы пользователь не знал реального местонахождения файла на сервере.
Кто-нибудь может кинуть в меня каким-ниубдь примером?

А может возможен четвертый вариант?
Буду благодарен за любые советы.

0
 



С нами с 15.06.06
Сообщения: 114
Рейтинг: 25

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

А ты читай по кусочкам.

/* Отдаем содержимое файла */
$buf_size = 32767; // Размер буфера
$f = fopen( $namefile, 'rb' );
while (!feof($f)) print fread( $f, $buf_size );
fclose( $f );

0
 



С нами с 28.03.00
Сообщения: 520
Рейтинг: 349

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

так при таком подходе, во время отдачи файла постоянно будет висеть копия апача и ПХП, что для меня недопустимо.

0
 



С нами с 15.06.06
Сообщения: 114
Рейтинг: 25

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

Стукнись ко мне в аську 259149271 - подскажу. ;-)

0
 



С нами с 28.03.00
Сообщения: 520
Рейтинг: 349

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


Пытался стукнуться, но такой аси не находит.

0
 



С нами с 27.11.05
Сообщения: 945
Рейтинг: 930

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

jerry-mooner писал:
А ты читай по кусочкам.
/* Отдаем содержимое файла */
$buf_size = 32767; // Размер буфера
$f = fopen( $namefile, 'rb' );
while (!feof($f)) print fread( $f, $buf_size );
fclose( $f );


Документацию принципиально не читаем или специально стараемся сервер побольше загрузить?
@fpasstru($f);
вместо цикла

0
 



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

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

ну так тебе админ правильно сказал,
http://php.net/symlink
в скрипте создаешь уникальный symlink на файл в /downloaddir имя допусим через md5(filename+user_id+time+.zip) пишешь в базу имя symlink время создания и ставишь крон на удаление через сутки.
и выводишь юзеру ссылку вида /downloaddir/dh8sj76khu4sfvueg0i1ua76hm.zip

этот способ самый удачный потому как не сильно грузит сервак

0
 



С нами с 06.08.03
Сообщения: 243
Рейтинг: 228

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

MrDio писал:
чтобы пользователь не знал реального местонахождения файла на сервере

Если еще не решил вопрос, стучись: 2-5-7-2-5-4-5-1-2

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

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


Перейти:  



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

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

Опросы

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



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