2012-06-26 17 views
2

我有一個站點範圍的包含文件,我將其包含在主目錄的頁面中。不過,我已經在一個子目錄中放置了一大堆具有共同主題的頁面。這些頁面需要引用相同的包含文件。我現在遇到包含文件的相關鏈接問題,例如圖像,因爲它們根據主文件是在主目錄還是在子目錄中調用不同的路徑。例如,如果從主目錄調用include,則鏈接"images/pic.jpg"將工作,但如果從子目錄調用include,則將嘗試轉到"sub/images/pic.jpg"PHP /正確使用包含在子目錄中的

我已經通過使用硬鏈接解決了這個問題,如/images/pic.jpg那樣回到根目錄。但是,我寧願不使用硬鏈接,因爲如果網站移動到另一個目錄等,它們可能會中斷。

調用給定包含的所有頁面是否必須位於同一個目錄中?或者是否有一些技術可以讓include中的相關鏈接工作,即使include是從子目錄中調用的?

非常感謝。

回答

3

有沒有硬性的規定 - 你可以處理你包括你想要的,但你應該努力是一致的。

我管理的最大的站點有數以千計的包含文件分散在數百個子目錄中。我們始終使用絕對路徑,使用一個變量表示根目錄,然後根據需要連接其餘路徑。當我們需要移動這些文件時,我們需要更改這個變量,並且整個網站都移動了。

您可以使用相對鏈接,但是當您試圖弄清楚從哪裏調用哪些文件時,我發現它們更令人困惑。

3

對於HTML內容,請使用此薈萃:

<head> 
    <base href="http://www.domain.ca/base/website/" target="_blank" /> 
</head> 

此元將適用於每一個環節。因此,如果鏈接是img/blabla,並且您位於子子文件夾內,則加載的映像將是base_href + src ...

而在PHP內部,在腳本的開頭設置一個變量並將其放入每次包括之前。 你也可以在每個圖像加載和東西之前寫這個變量。

1

如果我是你,我會嘗試創建檢查當前工作目錄(各種)的函數,然後相應地

<?php 

// current directory 
echo getcwd() . "\n"; 
0

添加適當的路徑尺寸可以使用__FILE__magic constantdirname (或PHP 5.3+上的__DIR__)構建一個相對於包含文件的路徑。

$image = dirname(__FILE__) . '/images/pic.jpg'; 

$image = __DIR__ . '/images/pic.jpg'; 
1

在我看來,你正在尋找的是..目錄命令。這會說「上一個目錄」。

從/:

include('includes/inc.php');

從/子:

include('../includes/inc.php');


此工程瀏覽器的方太。您可以在HTML,CSS和JavaScript中使用..你可以在任何地方使用它。特別是在你的命令行中。

說實話,我會使用絕對路徑,只是設置一個常量,指向站點的路徑。這樣你就可以將你想要的路徑追加到絕對路徑的那個常量的末尾。

+0

的問題是,包括從主目錄中,也一分豬病文件調用,所以往上走一個目錄意味着不同的事情取決於其中包括被調用。你可能對絕對路徑是正確的。 – user1260310

+0

這很好。如果您的包含文件中包含引用基於自身的特定路徑的代碼,則實際上可以獲取包含文件的路徑,無論它包含在哪裏:'__FILE__' – teh1

1

在規模較小的項目,一個簡單的常量會做好這項工作就好了:假設你有2個文件,/homepage.php/contact/form.php,這兩個文件包括第三文件layout.php - 主文件(網頁+形式)都應該傳播它們的位置相對於所述web服務器的根目錄通過一個常數:

homepage.php

<?php 
define('WEB_ROOT', './'); // relative path to/
include('layout.php'); 

接觸/ form.php的

<?php 
define('WEB_ROOT', '../'); // relative path to/
include('layout.php'); 

layout.php中

<img src="<?php echo WEB_ROOT; ?>images/pic.jpg"> 
相關問題