之前老是被教育,不要使用相對路徑,這樣性能比較差,可是相對路徑的問題不單單是性能哦,看下面這裏例子php
這是項目結構架構
. ├── main.php ├── t │ ├── t1.php │ └── t2.php └── t2.php
main.php性能
<?php include __DIR__ . "/t1.php"; include "t2/t1.php";
t1.phpui
<?php include_once "t2.php"; echo __FILE__,PHP_EOL;
兩個t2.php都是.net
<?php echo __FILE__,PHP_EOL;
在運行php main.php 並無像咱們預期的同樣輸出三個文件的路徑code
/opt/project/t2.php /opt/project/t/t1.php
而是值輸出了兩個,爲何呢?get
若是把include_once改爲include,就能看出一些端倪io
/opt/project/t2.php /opt/project/t2.php /opt/project/t/t1.php
看出來了嗎?項目根目錄下的t2.php被include兩遍function
被包含文件先按參數給出的路徑尋找,若是沒有給出目錄(只有文件名)時則按照 include_path 指定的目錄尋找。若是在 include_path 下沒找到該文件則 include 最後纔在調用腳本文件所在的目錄和當前工做目錄下尋找require
這句話摘自官方手冊 http://php.net/manual/zh/function.include.php
從手冊上這段描述能夠看出,若是是同名文件,相對路徑項目根目錄的優先級大於腳本所在的當前目錄,因此就出現了上面的現象。
因此,include|require 不要用相對路徑。
更多架構、PHP、GO相關踩坑實踐技巧請關注個人公衆號:PHP架構師