phpでのファイルパスの定数宣言について
phpでファイルパスを定数として定義しておく場合、例えば、
const JSON_PATH = "./sample.json";
とやりがちだったが、このやり方だと不具合を起こす場合がある。
この書き方をしたphpだけを実行する場合は問題なく動作するが、exec
などで呼び出される際はディレクトリが違う場合うまく動作しない。
phpでは基本的に絶対パスで記述しておけば余計な不具合に頭を悩ませないで済むっぽいが、いくつもphpファイルがある場合、管理が面倒くさい。
この時に便利なのが__DIR__
とかいうマジカル定数で、その記述があるファイルのディレクトリを表してくれるものだが、
const JSON_PATH = __DIR__.'./sample.json';
とするとphpのverが5.6以降でないと文法エラーと出てしまう。ver5.6より古いとconst
による定数宣言ではスカラー式は使えないからである。include
の時はこの記述の仕方で大丈夫だからややこしい。
というわけで長くなったが、この書き方をしたい場合は
define("JSON_PATH", __DIR__.'./sample.json');
とすれば解決。