先日まで仕事で行っていた開発作業はPHPを使ったものだった。その中で技術的な課題として上がったのは、
- PHPでバックグラウンド処理(非同期処理)を実現する
- SOAP通信を利用する
の2点だった。会社にはPHPに詳しい人がほとんどいなかったので、ほぼネットの情報で解決したので正解なのかはわからないが、今回の開発での実装方法を備忘録として記しておく。
今回は1の実装方法のサンプルコードを紹介。
本ページはアフィリエイトプログラムによる収益を得ています。
非同期処理の実装サンプル
PHPにはJavaでいうマルチスレッドのような概念はないため、非常に重たい処理を行う場合も同期処理しかできない。その解決策としては、PHPを外部プログラムとして実行させるしかなかった。
exec('実行したいプログラム > /dev/null &');
こんな感じで実装する。
「> /dev/null &」というのは非同期で実行するために必要なコードで、これがないと同期処理となってしまう。
サーバーはLinuxなのでそこで実行できるコマンドであれば、exec関数を使えば基本的にはなんでもできる。これを利用してPHPを実行する場合、
exec('php /【実行するPHPファイルのパス】/test.php > /dev/null &');
というように実行する。
コマンドとして実行するので、コマンドライン引数を渡すことも可能。ただし、これを使って外部プログラムに変数を渡す場合、必ず設定されているものでないと、受け取り側でindexがずれてしまうので注意が必要。
サーバーに複数のPHPがインストールされている場合の実装サンプル
また、サーバー環境によってはPHPが複数インストールされている可能性があるため、その場合は
exec('/【PHPのBIN】/php /【実行するPHPファイルのパス】/test.php > /dev/null &');
というように実装する必要がある。