ホームページ >バックエンド開発 >PHPチュートリアル >PHP での非同期実行の 4 つの一般的な方法
この記事では、PHP の非同期呼び出しメソッドについて説明し、参考のために共有します。具体的な内容は次のとおりです。
クライアントとサーバーは HTTP プロトコルを通じて通信します。クライアントはリクエストを開始し、サーバーがリクエストを受信し、リクエストを受信後処理を実行し、処理結果を返します。
サーバーは時間のかかる操作を実行する必要があり、この操作の結果をクライアントに返す必要がない場合があります。ただし、PHP は同期的に実行されるため、クライアントは次のステップに進む前にサービスが処理されるまで待つ必要があります。
したがって、時間のかかる操作は非同期実行に適しており、サーバーはリクエストを受信した後、クライアントが必要とするデータを処理して戻り、時間のかかる操作をサーバー上で非同期に実行します。
1. Ajax と img タグを使用する
原則: サーバーから返された HTML に Ajax コードまたは img タグを挿入します。img の src は必要なプログラムです。処刑されることになる。
利点: 実装が簡単で、サーバーは呼び出しを実行する必要がありません。
欠点: 実行中、ブラウザは常に読み込み状態になるため、このメソッドは真の非同期呼び出しではありません。 。
$.get("doRequest.php", { name: "fdipzone"} ); <img src="doRequest.php?name=fdipzone">
2.popen を使用します
popen を使用してコマンドを実行します (構文:
// popen — 打开进程文件指针 resource popen ( string $command , string $mode ) pclose(popen('php /home/fdipzone/doRequest.php &', 'r'));
利点: 高速実行
欠点:
1). このマシンでのみ実行できます
2). 多数のパラメータを渡すことはできません
3). トラフィックが集中すると多くのプロセスが作成されますhigh
3.curl を使用します
curl のタイムアウト CURLOPT_TIMEOUT を 1 (最小値は 1) に設定します。これにより、クライアントは 1 秒待つ必要があります
<?php $ch = curl_init(); $curl_opt = array( CURLOPT_URL, 'http://www.example.com/doRequest.php' CURLOPT_RETURNTRANSFER,1, CURLOPT_TIMEOUT,1 ); curl_setopt_array($ch, $curl_opt); curl_exec($ch); curl_close($ch); ?>
4. fsockopen を使用する
#fsockopen が最適ですが、欠点はヘッダー部分を自分で接続する必要があることです。<?php $url = 'http://www.example.com/doRequest.php'; $param = array( 'name'=>'fdipzone', 'gender'=>'male', 'age'=>30 ); doRequest($url, $param); 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 = 10; $fp = fsockopen($host, $port, $errno, $errstr, $timeout); $out = "POST ".$path." HTTP/1.1\r\n"; $out .= "host:".$host."\r\n"; $out .= "content-length:".strlen($query)."\r\n"; $out .= "content-type:application/x-www-form-urlencoded\r\n"; $out .= "connection:close\r\n\r\n"; $out .= $query; fputs($fp, $out); fclose($fp); } ?>注: 実行プロセス中にクライアント接続が切断されたり、接続がタイムアウトになったりすると、実行が不完全になる可能性があるため、
ignore_user_abort(true); // 忽略客户端断开 set_time_limit(0); // 设置执行不超时を追加する必要があります。PHP 関連の知識について詳しくは、こちらをご覧ください。
PHP チュートリアル にアクセスしてください!
以上がPHP での非同期実行の 4 つの一般的な方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。