112. 重い処理をバックエンドで実行する:ITpro(情報元のブックマーク数)
execでphpを実行って時点で違和感を感じるのは僕だけだろうか?!?!
exec関数を使って、プログラム内でさらにコマンドラインでPHPのプログラムを実行します。
112. 重い処理をバックエンドで実行する | 日経 xTECH(クロステック)
コマンドの最後に「 > /dev/null &」をつけるのがポイントです。exec関数引数の、/usr/local/bin/phpと、/path/to/exec.phpは環境に応じて正しくパスを指定する必要があります。
escapeshellargで引数を一応エスケープしているらしい・・・ふむぅ
escapeshellarg() は、文字列をシングルクオート で括り、既存のシングルクオートを全てクオート/エスケープします。こ れにより、文字列を直接シェル関数に渡し、単一の安全な引数として処 理することを可能にします。この関数は、ユーザー入力からの入力を シェル関数への引数として渡す際にエスケープするために使用する必要 があります。シェル関数には、exec(), system()そして バックティック演算子 を含むシェル関数が含まれます。
http://www.phpmanual.jp/function.escapeshellarg.html
//一応エスケープ処理
112. 重い処理をバックエンドで実行する | 日経 xTECH(クロステック)
$q_str1 = escapeshellarg($str1);
$q_str2 = escapeshellarg($str2);
$cmd = '/usr/local/bin/php '. $q_str1 .' '. $q_str2 .' > /dev/null &';
exec($cmd);