運営者チーの最新活動はXをチェック

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

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

  1. PHPでバックグラウンド処理(非同期処理)を実現する
  2. SOAP通信を利用する

の2点だった。会社にはPHPに詳しい人がほとんどいなかったので、ほぼネットの情報で解決したので正解なのかはわからないが、今回の開発での実装方法を備忘録として記しておく。
今回は1の実装方法のサンプルコードを紹介。

この記事の掲載内容は、2018年12月20日時点の情報です。現在の情報とは異なる場合がございますので、あらかじめご了承ください。

本ページはアフィリエイトプログラムによる収益を得ています。

非同期処理の実装サンプル

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 &');

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

PHPの開発ノウハウ

WordPressについて