Linuxのcronで定期的に実行するPHPスクリプトに、GETパラメーターを与えたいケースがあり、以下のようなcronを書いてみた。
59 23 * * * php index.php?param1=hoge¶m2=fuga
しかし、これでは「ファイルが存在しない」とエラーが出て実行失敗となる。
エラーの原因と解決法
GETやPOSTといったパラメーターは、Webサーバーを介して与えられるパラメーターで、コマンドラインからパラメーターを与える場合は以下のように書く必要がある。
59 23 * * * php index.php param1=hoge param2=fuga
このようにして与えたパラメーターはPHPの$argv
配列に格納され、以下のようにPHP内で扱うことができる。
if(isset($argv)) {
var_dump($argv);
parse_str($argv[1], $params);
echo $params[1];
}
// $argvの中身
array(3) {
[0]=>
string(10) "/index.php"
[1]=>
string(11) "param1=hoge"
[2]=>
string(11) "param2=fuga"
}
// echo $params['param1']の結果
hoge