PHP 同步阻塞特性導致耗時任務 (郵件、推送、報表) 拖慢響應。異步執行可讓主流程即時返回。
| 方案 | 原理 | 優點 | 缺點 |
|---|---|---|---|
| Ajax / img 標籤 | 頁面輸出 JS/img,瀏覽器端發起請求 | 極簡單,無服務端依賴 | 瀏覽器顯示 loading,非真異步;依賴客戶端 |
| popen() | 啟動子進程執行 CLI 命令 | 速度快,原生支援 | 僅限本機;參數傳遞受限;高併發產生大量進程 |
| cURL (短超時) | 發起 HTTP 請求,CURLOPT_TIMEOUT=1 秒即返回 |
可跨機器;支援完整 HTTP 協議 | 最少等待 1 秒;需目標端點支援 |
<?php
// 1. popen
pclose(popen('php /home/fdipzone/doRequest.php &', 'r'));
// 2. cURL 1秒超時
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => 'https://example.com/doRequest.php',
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_TIMEOUT => 1,
]);
curl_exec($ch);
curl_close($ch);
?>