【PHP】PHPで非同期処理を実現する方法のサンプルコード

先日まで仕事で行っていた開発作業はPHPを使ったものだった。その中で技術的な課題として上がったのは、

  1. PHPでバックグラウンド処理(非同期処理)を実現する
  2. 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 &');

というように実装する必要がある。

参考サイトと管理人チーがお勧めする関連記事

SPONSORED LINK

Twitterでチーをフォローしよう!

この記事のシェアはこちらから!

アナザー通信『ここだけの話』

ブログ記事の裏話や主催イベントの予定が読める週刊メルマガを発行しています。
メールアドレスの登録だけで購読できる無料メルマガです!
詳しい内容が気になる方はこちらをご覧ください。

は必須項目です

お名前(姓名)