Вопрос о загрузке PHP - PullRequest
       8

Вопрос о загрузке PHP

0 голосов
/ 06 декабря 2009

На моем сайте пользователи могут вводить ссылки на файлы, и я могу передавать им процесс загрузки через мой сервер. Я использую такую ​​систему:

header('Cache-control: private');
header('Content-Type: application/octet-stream'); 
header('Content-Length: ' . $r[2]);
header('Content-Disposition: filename=' . $theName);

flush();

$file = fopen($fileName, "r");
while(!feof($file))
{
    print fread($file, 10240);  
    flush();
    sleep(1);
}
fclose($fileName);

Смысл в том, что загрузка моих пользователей идет довольно медленно (600 Кб / с). Сервер, на котором он размещен, находится на порте 1 Гбит, поэтому они должны максимально увеличить свое интернет-соединение в десять раз.

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

Спасибо.

Ответы [ 3 ]

2 голосов
/ 06 декабря 2009

Использовать readfile .

Если бы вы настаивали на своем подходе, то это было бы намного эффективнее без флеша и сна:

while(!feof($file)) {
   print fread($file, 10240);  
}

И вот почему:

  • используя flush (), вы препятствуете нормальной работе буферов, а
  • используя sleep (1), вы эффективно снижаете скорость передачи, делая паузу на 1 секунду каждые 10 КиБ.
1 голос
/ 06 декабря 2009

Если @Sabeen Malik указал не на сон в течение одной секунды, это, скорее всего, связано с серверными ограничениями, наложенными вашим веб-провайдером (например, используя mod_throttle или mod_bandwidth) или веб-провайдером, которого вы выбираете данные из.

1 голос
/ 06 декабря 2009

Я не совсем уверен, что вы пытаетесь сделать здесь .. не понимаю, зачем вам нужен этот цикл, и особенно не понимаю, зачем вам нужен сон () .. вы должны просто использовать readfile или что-то подобное вместо этого цикла, было бы намного эффективнее

Кроме того, как вы думаете, керл поможет вам?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...