За последние 24 часа нас посетили 53211 программистов и 21409 роботов. Сейчас ищут 1953 программиста ...

PHP + EPP

Тема в разделе "PHP для новичков", создана пользователем Aleksni, 17 мар 2017.

Метки:
  1. Aleksni

    Aleksni Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте. перерыв массу форумов и готовых решений "скрутил" вот такой кусок кода:

    PHP:
    1. $f=fsockopen('tcp://epp.uadns.com',700,$err,$errs,30);
    2. stream_set_blocking($f,false); // если не ставить то скрипт просто висит
    3. $k=stream_get_meta_data($f); // ради интереса что не так
    4. print_r($k);
    возвращает:
    Array ( [stream_type] => tcp_socket/ssl [mode] => r+ [unread_bytes] => 0 [seekable] => [timed_out] => [blocked] => [eof] => )

    далее:
    PHP:
    1. $b=fread($f,4); // возвращает 0
    2.     $c=unpack('N',$b); // ругня та то что необходимо 4
    3.     $d=fread($f,$c[1]-4); // 0 эффекта...
    пробовал вариант с 2 и 'n' - то же самое.
    feof($f) показывает false.
    Меня смущает почему показывает unread_bytes - 0 и r+... а писать тогда как?
    В техподдержке дрс сказали не использовать fread. пробовал fgets, stream_get_contents - резутьтат тот же...
    Мож кто сталкивался как прочитать с epp?

    Спасибо.
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.213
    Симпатии:
    1.711
    Адрес:
    Молдова, г.Кишинёв
    Не подошли?
     
  3. Aleksni

    Aleksni Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    3
    Симпатии:
    0
    нет. та же ситуация. или висит или возвращает ""...
    смотрел трафик, если открываю сокет и сразу читаю, то вообще обмена трафиком нет. если сначала пишу в сокет
    PHP:
    1. $send=pack('N',(strlen($data)+4).$data);
    2. fwrite($f,$send); // вешает скрипт...(
    а если
    PHP:
    1. fwrite($f, $data); // возращает размер записанных байт
    то обмен идет, но кусок:
    PHP:
    1. $b=fread($f,4); // возвращает 0
    2.     $c=unpack('N',$b); // ругня та то что необходимо 4
    3.     $d=fread($f,$c[1]-4); // 0 эффекта...
    вылетает в ошибку невозможно занять 3567859158 байт...
    в варианте с 'n' и 2 байта эта цифра 5863
     
  4. Aleksni

    Aleksni Новичок

    С нами с:
    17 мар 2017
    Сообщения:
    3
    Симпатии:
    0
    часть проблемы отпала:
    PHP:
    1. $context = stream_context_create();
    2. $result  = stream_context_set_option($context, 'ssl', 'local_cert', 'cacert.key');
    3. $result  = stream_context_set_option($context, 'ssl', 'verify_peer', false);
    4. $result  = stream_context_set_option($context, 'ssl', 'verify_peer_name', false);
    5. $ecli=stream_socket_client('tls://epp.uadns.com:700',$errn,$errst,30,STREAM_CLIENT_CONNECT,$context);
    заработало.
    но теперь
    PHP:
    1. $b=fread($f,4);
    2.     $c=unpack('N',$b);
    3.     $d=fread($f,$c[1]-4); // возвращает приветствие
    4. fwrite($f,$hd.$login); //hd - pack('N',strlen($login)+4);
    5. $b=fread($f,4); // возвращает 1 байт...
    6.     $c=unpack('N',$b); // ессесно ругня
    7.     $d=fread($f,$c[1]-4); // тут уже читать нечего...
    пробовал вставлять usleep(2000000) между write и read. эффекта не дало.
    в чем уж тут загвоздка я не знаю...