Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Скрипт подвисает
Форумы портала PHP.SU » » Вопросы новичков » Скрипт подвисает

Страниц (1): [1]
 

1. IGORtrue - 02 Сентября, 2012 - 22:53:48 - перейти к сообщению
Есть скрипт отдачи файла юзверу, база представлена текстовым файлом, всё хорошо работает при одном вызове скрипта, повторный вызов скрипта(например с другими параметрами) подвешивает его, как будто ждёт своей очереди...
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. function loadfile ($filename,$speed) {
  4. $fsize=filesize($filename);                                                            
  5. Header("HTTP/1.1 200 OK");
  6. Header("Connection: close");
  7. Header("Content-Type: application/octet-stream");
  8. Header("Accept-Ranges: bytes");
  9. Header("Content-Disposition: Attachment; filename=".$filename);
  10. Header("Content-Length: ".$fsize);
  11.                                                                  
  12. // Открыть файл для чтения и отдавать его частями
  13. $f=fopen($filename,'r');
  14. fseek($f, 0); // Устанавливаем указатель файла
  15. while (1) {
  16. // Если соединение оборвано, то остановить скрипт
  17. fclose($f);
  18. break;
  19. }
  20. echo fread($f,$speed);
  21. flush(); ob_flush(); // очищаем буфер и выводим пользователю
  22. // Пауза в 1 секунду. Скорость отдачи байт/сек
  23. sleep(1);
  24. }
  25. fclose($f);
  26. }
  27.  
  28.  if (isset($_POST['music_id'])){
  29. // продолжаем выполнятся при отключении пользователя
  30. // старт буферизации
  31. include("conf.php");
  32. $music_id = $_POST['music_id'];
  33. $music_id = substr($music_id, 0, 7); $music_id = htmlspecialchars($music_id);
  34. $ar=file("bd");
  35. $count=count($ar);     
  36. $pieces = explode("-:.:-", $ar[$music_id-1]);
  37. fclose($ar);
  38. $file = 'music/'.$pieces[9];
  39. if (!file_exists($file)) {header("Location: index.php?2"); exit;}
  40.  
  41. //вызываем функцию скачивания
  42.  //  if(isset($_SESSION['connect']) && $_SESSION['connect']==3) { header("Location: index.php?1"); exit;}
  43.  //     else {$_SESSION['connect']++;}
  44. loadfile ($file,$speed);
  45. //$_SESSION['connect']--;
  46. }
  47. ?>
  48.  
2. KingStar - 02 Сентября, 2012 - 23:24:44 - перейти к сообщению
попробуй в одном браузере один, во втором браузере другой
3. IGORtrue - 02 Сентября, 2012 - 23:34:00 - перейти к сообщению
Хм, в опере и хроме работают по одному "потоку"..
4. KingStar - 02 Сентября, 2012 - 23:47:12 - перейти к сообщению
потому что браузеры так построены, блокируют, пока не завершится предыдущий Подмигивание
5. IGORtrue - 02 Сентября, 2012 - 23:50:48 - перейти к сообщению
Чёрт, а как сделать в несколько потоков, вон я закомментировал, на ссесиях пробовал..
6. KingStar - 03 Сентября, 2012 - 00:05:24 - перейти к сообщению
вообще-то плохая идея отдавать файл с через php, особенно большие файлы - при большом количестве скачиваний будет создавать нагрузку на сервер и расход ресурсов
7. Мелкий - 03 Сентября, 2012 - 09:44:50 - перейти к сообщению
Урл источника идентичен, потому так и происходит.
8. IGORtrue - 03 Сентября, 2012 - 10:30:18 - перейти к сообщению
Да, источник один, что-то вроде sait/download.php
А если я буду раздавать с уникального адреса, например sait/download.php?id=21

KingStar пишет:
вообще-то плохая идея отдавать файл с через php, особенно большие файлы - при большом количестве скачиваний будет создавать нагрузку на сервер и расход ресурсов

Мне нужно скрыть ссылки на файлы(5-10мб) и ограничить скорость скачивания..

 

Powered by ExBB FM 1.0 RC1