PHPで時間がかかる処理を非同期で実行させる方法。

// サーバOS判定
if(strpos(PHP_OS, 'WIN') !== false) {
    // Windowsの場合
    // startだけでも基本的には問題ないが、
    // batファイルからさらにbatファイルを起動する・・
    // といった場合に処理終了を待つことを防ぐため
    // 「start /b」+「cmd /c」で実行している。
    $cmd = "start /b cmd /c " . "実行プログラム" . "> nul";
    $fp = popen($cmd, "r");
    pclose($fp);

} else {
    //Linuxの場合はこれだけでOK。
    exec("sh ". "実行プログラム". " > /dev/null &");
}

非同期のため、呼び出し元が実行結果を受け取れない
(=成功したか、失敗したか判断できない)。
そのため、結果を確認する機能なども必要となる。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.