Зависание сервера при считывании из сокетов (PHP)

IdFox

Новичок
Зависание сервера при считывании из сокетов (PHP)

День добрый всем
Такой вопрос
Есть php скрипт. Задача его основная скачивать файлы из сети
Проблема вот какая. Есть сервер с неочень быстрым соединением
При попытке скачать оттуда файл загрузка идет к примеру 50-80 секунд
Так вот пока енти 50 секунд сервер не пройдут, то сайт не обрабатывает другие запросы и как бы висит...
То есть я запускаю скрипт данный, а другой скрипт не обрабатывается пока данный не выполнится
Чтение файла из потока идет таким макаром
---
$headers = "POST $path HTTP/1.0\r\n";
$headers .= "Host: $host\r\n";
$headers .= $accept;
$headers .= $accept_language;
$headers .= $accept_charset;
$headers .= $user_agent;
$headers .= $referer;
$headers .= "Content-type: application/x-www-form-urlencoded\r\n";
$headers .= "Content-Length: ".strlen ($req_data)."\r\n";
$headers .= "\r\n";
$headers .= $req_data;

$fp_inet = fsockopen ($host, 80, $errno, $errstr, 60);
if (!$fp_inet) {echo "Ошибка! Невозможно подключиться!<br/>"; exit;}
fwrite ($fp_inet, $headers);
while ($file != "\r\n") $file = fgets($fp_inet, 128);

$data_file = "data.html";
$fp_file = fopen($data_file, "w");
while (!feof($fp_inet)) fwrite($fp_file, fgets($fp_inet, 8192));
fclose ($fp_file);
fclose ($fp_inet);

Вся загвоздка в том что пока строка while (!feof($fp_inet)) fwrite($fp_file, fgets($fp_inet, 8192)); не выполнится - как раз те самые 50 сек сервер как бы не робит
Я так понимаю может серв все свои ресурсы на скачку файла отдает чтоли...
Можно ли как нить приоритет процесса данного понизить чтоли...
То есть мне не так важн чтоб файл быстро скачался, главн чтобы скачался - хоть за 20 минут
Лишь бы сайт продолжал свою работу :)
Заранее спс за ответ
 

DiMA

php.spb.ru
Команда форума
Еще один из палаты №6. Вы там на пару работаете? Спамеры недоделанные.

1. Висенет потому, что общая сессия.
2. Используй неблокирующие сокеты.
 

IdFox

Новичок
1. Какая нафиг общая сессия?? Ты вообще про что?
2. Неблокирующие сокеты тут при чем? Мне не надо несколько запросов делать. Ент тока один запрос и один скрипт. На работу других скриптов он ну никак не должен оказывать влияние
 

DiMA

php.spb.ru
Команда форума
Чайник, тебя ткнули носом в твои проблемы. Сиди и думай, как это тебя касается.
 

IdFox

Новичок
Я вижу что ент не те проблемы что у меня потому и говорю
Возможн я не весь пых знаю, но немног знаю
То что один скрипт будет работать и чета там считать еще не означает, что при этом не будут работать остальные скрипты сайта
 

IdFox

Новичок
Ну прост из браузера так сказать ссылкой (к примеру http://site.ru/111.php)
Все заголовки прописаны в самом скрипте (так сказать заранее)
Никаких данных скрипт не принимает - прост его основной блок вот как привел
При этом другой скрипт (к примеру http://site.ru/222.php) не работает пока первый не завершится. То есть страничка 222.php имеет время генерации к примеру 60 сек (пока первый не отработал)
И на хосте и дома на денвере одно и тоже...
 

DiMA

php.spb.ru
Команда форума
Почему я должен доказывать домохозяйкам причины их глюков?

1. Сделай в начале скрипта @session_ write_ close(). Если сесси не применяются, это ни на что не повлияет. Ты не в состоянии сделать самостоятельно заключение - применяются они или нет, поэтому иди и исполняй инструкции (не сложные). Или тема идет в корзинку за неадекват.

2. Прекрати сливать неинтересный флейм и изучи неблокирующие сокеты. Дополнительно в цикле поставь ручками всемозвожные таймауты на свой вкус. Или %% прогресса загрузки.
 

IdFox

Новичок
Блин
От тупой домохозяйки тебе респект и уважуха
session_write_close(); отлично помогла
Тока если чесн реальн втупляю и не пойму причем тут SESSION функции??
Они же вроде тока при авторизации используются...
По части неблокирующих сокетов надо бы, но как то все повода не было (не над многопоточные приложения)
 

DiMA

php.spb.ru
Команда форума
Потому, что блокируют соседние потоки с таким же номером сессии. Сессии используются не только для авторизации, а авторизация - не только на сессиях. Т.е. это не связанные вещи.
 
Сверху