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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Скрипт подвисает

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
IGORtrue
Отправлено: 02 Сентября, 2012 - 22:53:48
Post Id



Частый гость


Покинул форум
Сообщений всего: 177
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




Есть скрипт отдачи файла юзверу, база представлена текстовым файлом, всё хорошо работает при одном вызове скрипта, повторный вызов скрипта(например с другими параметрами) подвешивает его, как будто ждёт своей очереди...
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.  

(Отредактировано автором: 02 Сентября, 2012 - 22:56:20)

 
 Top
KingStar
Отправлено: 02 Сентября, 2012 - 23:24:44
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




попробуй в одном браузере один, во втором браузере другой


-----
То что программа работает, не означает что она написана правильно!
 
 Top
IGORtrue
Отправлено: 02 Сентября, 2012 - 23:34:00
Post Id



Частый гость


Покинул форум
Сообщений всего: 177
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




Хм, в опере и хроме работают по одному "потоку"..
 
 Top
KingStar
Отправлено: 02 Сентября, 2012 - 23:47:12
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




потому что браузеры так построены, блокируют, пока не завершится предыдущий Подмигивание


-----
То что программа работает, не означает что она написана правильно!
 
 Top
IGORtrue
Отправлено: 02 Сентября, 2012 - 23:50:48
Post Id



Частый гость


Покинул форум
Сообщений всего: 177
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




Чёрт, а как сделать в несколько потоков, вон я закомментировал, на ссесиях пробовал..
 
 Top
KingStar
Отправлено: 03 Сентября, 2012 - 00:05:24
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




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


-----
То что программа работает, не означает что она написана правильно!
 
 Top
Мелкий Супермодератор
Отправлено: 03 Сентября, 2012 - 09:44:50
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Урл источника идентичен, потому так и происходит.


-----
PostgreSQL DBA
 
 Top
IGORtrue
Отправлено: 03 Сентября, 2012 - 10:30:18
Post Id



Частый гость


Покинул форум
Сообщений всего: 177
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




Да, источник один, что-то вроде sait/download.php
А если я буду раздавать с уникального адреса, например sait/download.php?id=21

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

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


Отредактировано модератором: Мелкий, 03 Сентября, 2012 - 10:34:27
поправил автора цитаты
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB