2013-02-19 45 views
0

我已經設法教會了自己的PHP/PDO/SQL,但是我不能在我的生活中找出相對路徑在HTML中的工作方式。我有一個包含幾個目錄和分支的多頁網站,我希望能夠創建一個我可以用來創建新頁面的簡單模板,而不必每次都更改鏈接到我的樣式表和PHP包含的內容,具體取決於目錄。如何高效快速地在PHP/HTML中編寫相對路徑?

這裏是我的佈局如下:

MySite (http://localhost/MySite/) 
    RESOURCES //Not a folder, just here for readability 
    > serverside > initialize.php 
    > templates > header.php 
        footer.php 
        navuser.php 
        navmenu.php 
    > styles  > styles.css 
    > images  > variousImages.png 

    PAGES //Not a folder, just here for readability 

    > index.php 
    login.php 
    register.php 
    gettingstarted.php 

    > you   > settings > settings.php 
       > youraccount.php 
       > yourfavourites.php 

下面是遊戲規則:每個頁面首先包含了服務器端/initialize.php文件(PHP包括)。然後,每個頁面通過標準的HTML href屬性包含styles/styles.css。然後,每個頁面通過PHP包括模板/ header.php文件模板/ footer.php,與前者還含有模板/ navuser.php模板/ navmenu.php

問題是,如果其中一個頁面處於不同的級別(例如you/settings/settings.php),那麼所有這些包括和hrefs必須更改,這似乎影響包含包括。不可能!

所有我想要的是能夠在不使用真正的絕對路徑來指定文件名,所以我可以有一個模板文件,如果需要的話在我的網站上覆制 - 我看着__DIR____FILE__$_SERVER['DOCUMENT_ROOT'],鑄造一個變量$ dir充當文檔根目錄,但沒有成功。我不明白所發生的一半。

任何人都可以闡明我的情況嗎?我基本上是在尋找一個完整的解釋,說明如何在PHP中使用相對的根/鏈接/文件。我如何處理更復雜的目錄結構?再次,我該怎麼辦?謝謝。

+0

如果有疑問,請寫出絕對路徑。然後,保持它們的「相對化」。 – fedorqui 2013-02-19 10:55:46

+0

儘管絕對路徑的問題就在於 - 它們是絕對的。如果我有一天決定上線並從http:// localhost/site /切換到mywebsite.com,我必須再次更改所有內容。此外,某些鏈接無法相對化,因爲它們被多個級別上的多個文件使用,而其他鏈接則相互依賴... – ReactingToAngularVues 2013-02-19 11:08:05

回答

2

您通常會設置一個包含有絕對路徑和絕對URL恆定在的index.php文件,然後從那裏引用它們對包括等

一個例子的index.php

<?php 
define('ROOT_DIR', __DIR__); 

然後,您可以使用該此後不斷:

require ROOT_DIR . '/includes/database.php'; 
require ROOT_DIR . '/application/controllers/MyController.php'; 
require ROOT_DIR . '/application/models/MyModel.php'; 

等。希望這可以幫助。

+0

如果常量位於index.php文件中,那麼同一目錄中的另一個文件級知道常數? – ReactingToAngularVues 2013-02-19 11:03:58

+0

因爲您通常會使用** index.php **作爲前端控制器,並且所有內容都將包含在內。 – 2013-02-19 12:22:54