php中require_once()函數相對目錄要謹慎

來源:互聯網
上載者:User

假設有如下三個檔案, c.php a.php b.php 對應的存放目錄為:localhost/ localhost/ localhost/demo

 代碼如下 複製代碼
c.php
require_once("a.php");
require_once("demo/b.php");
B::demo();a.php
class A
{
}

b.php的內容比較有意思,因為它自己要繼承 CLASS A 所以自己把a.php也引入進去了

 代碼如下 複製代碼
require_once("../a.php");
class B extends A
{
    public static function demo()
    {
    echo "xx";
    }
}

執行localhost/c.php 系統報錯,報錯資訊如下
Warning: require_once(../a.php) [function.require-once]: failed to open stream: No such file or directory in F:wwwdemob.php on line 2
Fatal error: require_once() [function.require]: Failed opening required '../a.php' (include_path='.;C:php5pear') in F:wwwdemob.php on line 2但是,驚奇的發現,如果去掉b.php裡面的require_once語句,執行正常,那麼一定是require_once語句定義多了嗎?原因就是Class A重定義了兩次?可是不會啊。如果我只在c.php裡面加require_once(‘a.php’);這條語句,哪怕我寫兩遍也是沒錯的,那到底是咋回事呢?
原因就是,b.php定義的目錄和c.php執行檔案的目錄層級不一致,導致在c.php裡面require_once語句有兩條。使其相當於

 代碼如下 複製代碼
require_once("a.php");
require_once("../a.php");
class B extends A
{
    public static function demo()
    {
    echo "xx";
    }
}
B::demo();

原因找到了,因為在c.php裡面,其相對目錄 “..”就是 c.php的上一層了,導致檔案找不到報錯。
所以,我們的結論是,在 PHP 裡面,使用require_once的時候,存在不同層級關係,且有相對目錄的使用那麼一定要謹慎,小心。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.