2017-07-26 62 views
0

我想通过EPP protocole发送XML请求到注册服务器并获得响应,连接成功,但是当我到达fread($fp)时,需要永久加载。PHP socket fread响应需要永久

有没有办法让它变得快速并获得注册商的回复?

我在hostbill插件中使用了代码段。

/** open socket* */ 
     $fp = fsockopen("tcp://registrarwebsite.com", 700, $errno, $errstr, 200); 

     stream_set_blocking($fp, true); 

     stream_context_set_option($fp, 'ssl', 'verify_host', true); 
     stream_context_set_option($fp, 'ssl', 'verify_peer', true); 
     stream_context_set_option($fp, 'ssl', 'allow_self_signed', false); 
     stream_context_set_option($fp, 'ssl', 'local_cert', __DIR__ . '/ma_cert.pem'); 
     stream_context_set_option($fp, 'ssl', 'local_pk', __DIR__ . '/ma_key.pem'); 


     // $secure = stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); 
     // stream_set_blocking($fp, false); 

     if (!$fp) { 
      $this->addError('Il y a une erreur dans la connexion: ' . $errno . ' ' . $errstr); 
      return false; 
     } else { 

      $xml = htmlentities($this->prepareXMLRequest($xml)); 

      fwrite($fp, $xml); 

      $out = fread($fp, 1024); 

      fclose($fp); 

      $out1 = htmlentities($fp); 

      $this->addError('<span style="color: green !important">Connexion se fait avec succes, le code retourné est : </span> ' . $out1); 
+0

_in a_ what?一艘火箭船? – AbraCadaver

+0

对不起,我不明白你的问题? – SmootQ

+1

标题:“_PHP socket fread响应在** _中永远占用**”,所以_in a_什么?在火箭飞船上,在时间机器上,在真空中? – AbraCadaver

回答

1

你EPP实现是错误的(如果服务器支持的标准高达当然字母),见RFC5734我引述如下:

  • 数据单位格式

    EPP数据单元包含两个字段:一个32位标题,描述数据单元的总长度以及EPP XML实例的 。 EPP XML实例的长度为 是通过从数据单元的总长度中减去四个 个字节来确定的。在处理EPP消息之前,接收方必须 成功读取许多字节以检索完整的EPP XML 实例。也

  • 注意第3节,当您打开TCP/TLS连接的第一方说话,显示与<greeting>服务器,以便为客户端首先需要阅读,然后发送你的登录。

    +0

    非常感谢您宝贵的回答,这很有帮助^^最佳+1 – SmootQ