Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » Как получить ВСЕ данные по fsockopen кусками?

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте,
есть такой кусок клиентской части:
 

Код:
$fp = @fsockopen("udp://127.0.0.1"., 20120, $errno, $errstr);
if($fp)
{
    $data = array();
    while(!feof($fp) and !connection_status())
    {
        $data[] = fread($fp, 1024); // Реальный размер данных примерно 700-800
    }
    var_dump($data);
}

 
я знаю, что сервер отдает мне данные с задержкой в 0.85сек. использую функцию time.sleep(0.85).
 
Такой вопрос, как можно получить все данные? Мой скрипт выше выдает ошибку "<b>Fatal error</b>:  Maximum execution time of 30 seconds exceeded in ..." указывая на строку с ошибкой $data[] = fread($fp, 1024);
 
Как это исправить? Чтоб можно было получить все данные от сервера?
 
В тесте, я знаю что передается 4 куска, если написать просто 4 раза строку $data[] = .... без while() то всё работает отлично. Но в другом случае может быть 1-2 кусок или все 30-40.
 
Пробовал такой вариант:

Код:
$res = "";
while ($line = fgets($fp)) $res .= $line;  
echo $res;

 
Но тут 1 проблема, нужно дополнительно отдельно разбивать на массив.

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 21:53 07-04-2017 | Исправлено: Sutar, 22:03 07-04-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Sutar
для начала изучаем что такое UDP и с чем его едят. это не TCP туннель, там неизвестно будут еще пакеты или нет, как и прилететь они могут в другом порядке.
поэтому, не анализируя полученные данные и если в них не будет указано, что все, больше ничего отправляться не будет (зависит от протокола), нельзя сказать окончилась передача или нет.
делайте ограничение по времени/количеству данных.  
к примеру - http://php.net/manual/ru/function.stream-set-timeout.php

Всего записей: 15101 | Зарегистр. 20-09-2014 | Отправлено: 22:20 07-04-2017 | Исправлено: Mavrikii, 22:21 07-04-2017
Sutar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mavrikii
Спасибо.

Всего записей: 1150 | Зарегистр. 15-08-2011 | Отправлено: 23:00 07-04-2017
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Интернет » Web-программирование » Как получить ВСЕ данные по fsockopen кусками?


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru