2017-07-26 120 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