fsockopen非同期要求を実現する

1804 ワード

fsockopen関数は、ソケットでHTTPプロトコルをシミュレートするもので、一つのsocket接続を開くために使用されてもよく、本物のhttp操作と同様に、一つ以上のユーザに複数のテンプレートメッセージなどのシーンを送信するために使用されてもよい.
一、fsockopen関数を開く
第一歩は、PHPプロファイルphp.iniを開いて、allow_を探してください.クルクルfopenをonに設定します.第二部は、extension=php_を検索します.openssl.dllは前のセミコロンを削除します.第三部は、IISであればIISを再起動し、apacheであればapacheを再起動します.
二、コード実現(TP5.0フレーム下)
まず、複数のマイクロクレジットテンプレートメッセージを送信するコード(概ね論理)である.
 public function sendMessage()
  {
    ignore_user_abort(true);
    set_time_limit(0);
  	
  	//       (   )
    $msg = $_POST;										//POST  
    $message = getMessage($msg);						//      
     for($a=0;$a
以上のコード循環体は正常にWeChatインターフェースを呼び出すためにsleep関数を使用しています.正常な同期要求は明らかに以下のコードを満たしていません.
 public function doRequest($url, $param=array())
  {
  	$urlInfo = parse_url($url);
    $host = $urlInfo['host'];
    $path = $urlInfo['path'];
    $query = isset($param)? http_build_query($param) : '';
    
    $port = 80;
    $errno = 0;
    $errstr = '';
    $timeout = 60;
    
    $fp = fsockopen($host, $port, $errno, $errstr, $timeout);
    
    $out = "POST ".$path." HTTP/1.1\r
"; $out .= "host:".$host."\r
"; $out .= "content-length:".strlen($query)."\r
"; $out .= "content-type:application/x-www-form-urlencoded\r
"; $out .= "connection:close\r
\r
"; $out .= $query; fputs($fp, $out); fclose($fp); }
次にエントランスファイルです.パラメータを設定するためにdorequest()関数を呼び出して非同期要求を実行します.
public function message($param) {
  	$url = 'http://www.xxx.com/yyy/zzz/sendMessage';
    $this->doRequest($url, $param);	
  }