2011-08-02 121 views
1

這裏是我的問題,我已經得到了一箇舊的網站,其中包含這樣一些模塊,PHP包括鏈

root_dir 
    |-->module1 
    |-->module2 
    |-->module3 

對於我的需要我一個子級添加到這個結構,這樣,

root_dir 
    |-->module1 
    |-->module2 
     |-->submodule2.1 
    |-->module3 

我的問題是,每個模塊都包含一個「include.php」文件,然後包含其他文件,所以如果我將include.php的第一個路徑修復爲../include.php,它將在第二個include文件中崩潰。 ..

是這裏有一個很好的解決方法,除了複製所有文件並修復include的路徑外?

THX

+1

只是爲了得到這個問題:module2包含一個include.php,它又包含submodule2.1,然後在子模塊2.1的文件夾中包含一個includes.php;那麼,你想在那裏包括什麼,如果這是鏈條的結束,並且其他所有內容都可能被包含在內? – feeela

+0

實際上它更像是submodule2.1和module2根本沒有鏈接,它們都是獨立的,但它們包含相同的include.php(它加載站點的配置環境),在module2中它完美地工作,因爲它已經爲此,所以有這樣的<?php include(「../ include/include.php」);對於子模塊2.1,我需要修改路徑,<?php include(「../../ include/include.php」); ?>但後來我得到包含在include.php中的文件的錯誤...(很難解釋哎喲,希望你明白我) – krifur

回答

2

您是否嘗試過使用include_once爲常見的include.php文件:

include_once('../include.php'); 

或者包括一個共同的祖先文件中的代碼一次。

還是我過度簡化?這些選擇給你嗎?

+0

我認爲它不會工作,因爲所有的模塊都是獨立的,沒有祖先(舊網站)基本上我想包括鏈接的開始,但從不同的文件夾層次結構,它適用於第一個因爲我修改路徑,但然後它會創建錯誤...有一些與dirname_FILE_ probalby東西,但我只問以前我錯過了一些... – krifur

+0

@krifur:使用'dirname(__ FILE __);'通過你的整個代碼(或者'__DIR__'在更新的版本中)聽起來是正確的。永遠不要假設工作目錄。雖然你當然可以自己調用chdir。 – Wrikken

0

「有兩個獨立的,但他們有相同的include.php(其中加載網站的配置environnment)」

你最好應該已經加載或者用一些方法(工廠拿到的配置工作,配置-data,全局設置類......),允許加載設置,而無需瞭解有關實際文件結構(從模塊角度)的任何信息。這同樣適用於你在模塊中使用的其他東西(比如數據庫對象)。