8t's BBR

よくつまったあれこれをメモ

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');

とすれば解決。