Linuxのcronで定期的に実行するPHPスクリプトに、GETパラメーターを与えたいケースがあり、以下のようなcronを書いてみた。

59 23 * * * php index.php?param1=hoge&param2=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