【PHP】exec関数による非同期実行
アプリケーションにおいて、サーバ側での処理が重たく、完了に時間がかかる場合にクライアント側で待ち状態やタイムアウトが発生してしまう場合があります。
PHPではexec関数を使用して時間のかかる重たい処理をバックグラウンド実行することができます。
https://www.php.net/manual/ja/function.exec.php
(例)実行ファイル内から別のPHPファイル「import.php」に書かれた処理を実行する
<?php
exec('php ./import.php >/dev/null 2>&1 &');
echo "start";
例では、完了に時間のかかる重たい処理を、import.phpでバックグランドで※実行し、クライアントへはレスポンスを即座に返却しています。
処理完了時にメール送信などの処理をimport.php内で行うことで完了時にユーザへ通知することができます。
※PHPをOSからコマンドラインで直接実行している
exec関数の引数には実行するコマンドラインを文字列として指定します。
>/dev/null 2>&1 &
の意味
Linuxの標準エラー出力、標準出力を破棄する(どこにも表示しない)
& コマンドをバックグランド実行