PHP 非同期呼び出しメソッド: 1. クライアントに返される HTML コード、AJAX 呼び出し、または img タグの埋め込みで、src は実行される時間のかかるスクリプトを指します。2. Popen を使用します。指定されたコマンドの実行によって生成されたプロセスのパイプへのリンクを開く関数。
[関連する学習の推奨事項: php プログラミング (ビデオ)]
1.最も簡単な方法は、クライアントに返される HTML コードに AJAX 呼び出し を埋め込むか、実行される時間のかかるスクリプトを指す src を含む img タグを埋め込むことです。
この方法は最も簡単で最速です。サーバーは呼び出しを行う必要はありません。
しかし、欠点は、一般に、Ajax は onLoad の後にトリガーされる必要があるということです。つまり、ユーザーがページをクリックして閉じた場合、バックグラウンド スクリプトはトリガーされません。
imgタグを使用した場合、このメソッドは厳密な意味での非同期実行とは言えません。ユーザーのブラウザは、php スクリプトの実行が完了するまで長時間待機します。つまり、ユーザーのブラウザのステータス バーには、ロード中であることが常に表示されます。
もちろん、スクリプト タグなど、同様の原理を持つ他のメソッドを使用することもできます。
2.popen()
resource popen ( string command, string mode );
//指定されたコマンド command の実行の結果生じるプロセスを指すパイプを開きます。指定されたコマンドを生成したコマンドの実行によって生成されたプロセスへのパイプを開きます。
したがって、これを呼び出すことはできますが、その出力は無視できます。
pclose(popen("/home/xinchen/backend.php &", 'r'));
この方法は、最初の方法の欠点を回避し、また高速です。ただし、問題は、このメソッドは HTTP プロトコルを通じて別の Web サービスをリクエストできず、ローカル スクリプト ファイルしか実行できないことです。また、一方向にのみ開くことができ、呼び出されたスクリプトに多数のパラメータを渡すことはできません。
そして、アクセス数が多いと、大量の処理が生成されます。外部リソースを使用する場合は、競合について自分で考慮する必要があります。
3. CURL
メソッドを使用して、CUROPT_TIMEOUT
を 1 に設定します (最小値は 1 です)。つまり、クライアントは少なくとも 1 秒待つ必要があります。
$ch = curl_init(); $curl_opt = array(CURLOPT_URL, 'http://www.example.com/backend.php', CURLOPT_RETURNTRANSFER, 1, CURLOPT_TIMEOUT, 1,); curl_setopt_array($ch, $curl_opt); curl_exec($ch); curl_close($ch);
4. fsockopen を使用する
この方法が最も完璧ですが、欠点は、HTTP ヘッダー部分を自分で記述する必要があることです。
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET /backend.php / HTTP/1.1\r\n"; $out .= "Host: www.example.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); /*忽略执行结果 while (!feof($fp)) { echo fgets($fp, 128); }*/ fclose($fp); }
したがって、総合的に見て、最良かつ最も簡単な方法は最初の方法です。
最も完璧なものは最後のものですが、より複雑です
関連学習の推奨事項: プログラミング ビデオ
以上がPHPの非同期呼び出しメソッドとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。