Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Analyse, wie PHP die asynchrone Ausführung von Skripten implementiert

Detaillierte Analyse, wie PHP die asynchrone Ausführung von Skripten implementiert

黄舟
黄舟Original
2017-08-09 11:39:031799Durchsuche

Das Beispiel in diesem Artikel beschreibt, wie man die asynchrone Ausführung von Skripten durch PHP-Programmierung implementiert. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Die PHP-Sprache muss die Funktion fsockopen() verwenden, um die asynchrone Ausführung des Skripts zu implementieren. Der Code lautet wie folgt

asynchrone Anforderungsfunktion (wenn der Debug-Parameter verwendet wird. Wenn true, wird er zum Debuggen verwendet. Wenn Sie das Debuggen aktivieren, können Sie die asynchrone Ausführung sehen, aber der asynchrone Effekt geht verloren)

main.php


<?php
function request_by_fsockopen($url,$post_data=array(),$debug=false){
  $url_array = parse_url($url);
  $hostname = $url_array[&#39;host&#39;];
  $port = isset($url_array[&#39;port&#39;])? $url_array[&#39;port&#39;] : 80;
  @$requestPath = $url_array[&#39;path&#39;] ."?". $url_array[&#39;query&#39;];
  $fp = fsockopen($hostname, $port, $errno, $errstr, 10);
  if (!$fp) {
    echo "$errstr ($errno)";
    return false;
  }
  $method = "GET";
  if(!empty($post_data)){
    $method = "POST";
  }
  $header = "$method $requestPath HTTP/1.1\r\n";
  $header.="Host: $hostname\r\n";
  if(!empty($post_data)){
    $_post = strval(NULL);
    foreach($post_data as $k => $v){
    $_post[]= $k."=".urlencode($v);//必须做url转码以防模拟post提交的数据中有&符而导致post参数键值对紊乱
    }
    $_post = implode(&#39;&&#39;, $_post);
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";//POST数据
    $header .= "Content-Length: ". strlen($_post) ."\r\n";//POST数据的长度
    $header.="Connection: Close\r\n\r\n";//长连接关闭
    $header .= $_post; //传递POST数据
  }else{
    $header.="Connection: Close\r\n\r\n";//长连接关闭
  }
  fwrite($fp, $header);
  //-----------------调试代码区间-----------------
  //注如果开启下面的注释,异步将不生效可是方便调试
  if($debug){
  $html = &#39;&#39;;
  while (!feof($fp)) {
  $html.=fgets($fp);
  }
  echo $html;
  }
  //-----------------调试代码区间-----------------
  fclose($fp);
}
$data=array(&#39;name&#39;=>&#39;guoyu&#39;,&#39;pwd&#39;=>&#39;123456&#39;);
$url=&#39;http://localhost/test/other.php&#39;;
request_by_fsockopen($url,$data,true);//

other.php


<?php
header("content-type:text/html;charset=utf-8");
//error_reporting(0);
//ini_set(&#39;html_errors&#39;,false);
//ini_set(&#39;display_errors&#39;,false);
$name = isset($_POST[&#39;name&#39;])?$_POST[&#39;name&#39;]:&#39;&#39;;
$pwd = isset($_POST[&#39;pwd&#39;])?$_POST[&#39;pwd&#39;]:&#39;&#39;;
echo $name.$pwd;
echo &#39;success ok&#39;;
die;
?>

Verwendungsbeispiel:

[main .php-Hauptskriptdatei wird ausgeführt]


$data=array(&#39;name&#39;=>&#39;guoyu&#39;,&#39;pwd&#39;=>&#39;123456&#39;);
$url=&#39;http://localhost/test/other.php&#39;;
request_by_fsockopen($url,$data,true);//把应用B的用户表异步-同步数据

[Anleitung zur Ausführungsdatei other.php]

In other.php können Sie $_POST verwenden, um Empfangen Sie die von main.php übermittelten Parameter, um mit dem nächsten Schritt fortzufahren

Das obige ist der detaillierte Inhalt vonDetaillierte Analyse, wie PHP die asynchrone Ausführung von Skripten implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn