【PHP】exec()関数で非同期処理を行う方法

村上 著者:村上

【PHP】exec()関数で非同期処理を行う方法

ちょっとハマったので備忘録も兼ねてまとめ。
…まあ、結局別の方法を使っちゃったんですけどね。

 

使用する関数は、タイトルにもある通り exec() 関数です。
PHP マニュアルのページは下記からご確認ください。

PHP: exec – Manual
https://www.php.net/manual/ja/function.exec.php

サンプルコードは下記のとおりです

exec('[実行するコマンド] > /dev/null &');

> /dev/null & を追加すると戻り値がなくなります。
また、末尾に & を付けると、バックグラウンド処理で実行するという意味になります。

基本的にはこんな感じですが、個人的に覚えておきたいのはパラメータを渡す方法です。
例えば、ただコマンドを実行するだけでなく、$_GET や $_POST のように値を渡したい時があるかと思います。
そんなときのコードの書き方がこちら。

まず、呼び出すときの書き方。

exec("php [実行したいPHPファイル] [値1] [値2] > /dev/null &");

で、こちらが呼び出されるときの書き方です。

$value1 = $argv[1];  // 値1
$value2 = $argv[2];  // 値2

$argv を使うと、渡されたパラメータを呼び出される側で受け取ることができます。
なお、$argv[0] には実行されたコマンド、今回のサンプルでは php [実行したいPHPファイル] が入ります。

 

以上、PHP の非同期処理の書き方でした。
他にもライブラリを使う方法なんかもありましたが、開発環境の都合上、自由にライブラリの追加が出来なかったので、こちらの方法を試してみました。
ご参考になれば幸いです。

  • この記事いいね! (0)

著者について

村上

村上 administrator