112. 重い処理をバックエンドで実行する:ITpro(情報元のブックマーク数)

execでphpを実行って時点で違和感を感じるのは僕だけだろうか?!?!

exec関数を使って、プログラム内でさらにコマンドラインPHPのプログラムを実行します。

 コマンドの最後に「 > /dev/null &」をつけるのがポイントです。exec関数引数の、/usr/local/bin/phpと、/path/to/exec.phpは環境に応じて正しくパスを指定する必要があります。

112. 重い処理をバックエンドで実行する | 日経 xTECH(クロステック)

escapeshellargで引数を一応エスケープしているらしい・・・ふむぅ

escapeshellarg() は、文字列をシングルクオート で括り、既存のシングルクオートを全てクオート/エスケープします。こ れにより、文字列を直接シェル関数に渡し、単一の安全な引数として処 理することを可能にします。この関数は、ユーザー入力からの入力を シェル関数への引数として渡す際にエスケープするために使用する必要 があります。シェル関数には、exec(), system()そして バックティック演算子 を含むシェル関数が含まれます。

http://www.phpmanual.jp/function.escapeshellarg.html

//一応エスケープ処理
$q_str1 = escapeshellarg($str1);
$q_str2 = escapeshellarg($str2);

$cmd = '/usr/local/bin/php '. $q_str1 .' '. $q_str2 .' > /dev/null &';
exec($cmd);

112. 重い処理をバックエンドで実行する | 日経 xTECH(クロステック)

screenshot