プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
PHP、require、includeする時の注意点。
まぁ好みの問題もあるしなー(--)と思っていたので
今まで書いていなかったのですが、色んなお仕事に携わった結果
やっぱりベストな気がするので書いておこう。

require、includeする時は「dirname(__FILE__) 」つけるべしっ!

  require_once dirname(__FILE__) . '/hoge.php';

とかそんな書き方ね。
理由(--)b

まず相対パスでの指定の場合の困ったちゃんな点。

  require_once './hoge.php';

とかそんな書き方ね。
これ、階層構造考えるのがめんどくさい(;´A`)

例えば、

■test01.php
  <?php
  
  require_once("./bbb/inc/aaa.php");
  
  print "test01.php<br />";
  
  ?>


■bbb/test02.php
  <?php
  
  require_once("./inc/aaa.php");
  
  print "test02.php<br />";
  
  ?>


■bbb/inc/aaa.php
  <?php
  
  require_once("./inc/bbb.php");
  
  print "aaa.php<br />";
  
  ?>


■bbb/inc/bbb.php
  <?php
  
  print "bbb.php<br />";
  
  ?>


とかあった場合test01.phpを実行するとエラーになります(--)b
requireしている「./bbb/inc/aaa.php」内で
requireしている「./inc/bbb.php」がみつからねーよと怒られる。
理由は簡単でtest01.phpのパスを基準にbbb.phpを探しに行くからです。
ちなみにbbb/test02.phpを実行すると正常に動くよ(--)b
そんな感じで、同じ「bbb/inc/aaa.php」を呼んでいるのに
ちゃんと動いたりエラーになったりするのです。

じゃあ絶対パスで書けばいーじゃん!

  require_once '/hoge.php';

これはこれで個人的には嫌いです。
だって他の場所に動かせないじゃん。
test/フォルダ配下で動作確認したいときとか
複製して比較したいときとかに不便です。

と言う訳で

  require_once dirname(__FILE__) . '/hoge.php';

がオススメ。

「dirname(__FILE__)」はそのコードが書かれているファイルのあるパス。
なもんで

  require_once dirname(__FILE__) . '/../hoge.php';

とか書いたりしてOK。
要は、記述するときは相対パス的な解釈でファイルを指定しつつ
動作する時は絶対パス指定な動作をするので
相対パスで記述したときのような煩わしいこと考えなくていーのです。

うん、人の書いたコードではあんま見かけないけど
やっぱりこの書き方は最強だと思う。
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:● PHP  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事