2013-05-08 206 views
3

我已經包含在多個文件中,最近我開始了一個新目錄,並且無法獲取我的部分包含文件。PHP包含來自另一個目錄的文件,其中也包含文件

例如我有這個包括我postpage.php這是位於example.com/c/postpage.php:

include '../includes/overall/header.php'; 

其工作,因爲它去到根目錄下,包括的header.php 但我的問題是,header.php還包含未包含的文件。

中的header.php代碼:

include 'includes/head.php'; 

這是不工作

如果我改變的header.php到:

include '../includes/head.php'; 

那麼它打破了我的網站的其餘部分,而只爲postpage.php工作

任何建議是值得歡迎的。

回答

4

,最好的辦法,以防止CWD變化可能會打破相對路徑是包括使用絕對路徑的文件。

一個簡單的方法來完成這個是通過使用__DIR__常數。

例子:

文件結構:

serverRoot (/) 
    |-usr 
     |-local 
      |-www 
       |-index.php 
       |-bootstrap.php 
       |-includes 
        |-a.php 
        |-overall 
         |-b.php 
         |-c.php 

讓我們說:

  • 的index.php包括bootstrap.php中a.php只會
  • a.php只會包括b.php
  • bootstrap.php中包括c.php

的index.php

$basedir = realpath(__DIR__); 
include($basedir . '/bootstrap.php'); 
include($basedir . '/includes/a.php'); 

a.php只會

global $basedir; 
include($basedir . '/includes/overall/b.php'); 

bootstrap 。PHP

global $basedir; 
include($basedir . '/includes/overall/c.php'); 
+0

$ basedir將在a.php和bootstrap.php中包含相同的值,即使它在一個完全不同的文件中聲明? – user2360599 2013-05-08 23:55:47

+0

這就好像我的意思......只是一個更好的方式。這應該鬆弛地解決它。 – alexander7567 2013-05-08 23:56:46

+0

是的,它就像在全局範圍內聲明的任何其他變量一樣。你在腳本的入口點聲明它(通常是index.php文件),並在腳本中使用它 – Tivie 2013-05-09 00:01:19

1

我這樣做是通過在每一頁的開頭創建一個變量。該變量只是頂級目錄的路徑。例如,而不是

...

include 'includes/head.php'; 

使用:

$pathToRoot = '../'; 
include $pathToRoot.'includes/head.php'; 

,但你必須在每個頁面的頂部創建這個變量和更改所有包括和要求聲明。

+0

正確的選擇文件,但大部分我的網頁不想要發送的包括了目錄。我想即時提問可能不可能 – user2360599 2013-05-08 23:29:58

1

您可以查看PHP文檔的這一部分: http://www.php.net/manual/en/function.include.php

文件被基於包含的給予或者,如果沒有給出文件路徑, 的include_path中指定。如果在 include_path中找不到該文件,則包含將最終檢入調用腳本自己的 目錄以及當前工作目錄失敗之前。

我建議您:

  • 包括使用絕對路徑(不推薦,快速和骯髒的)
  • 更改的include_pathphp.ini),所以你不會有任何問題!
  • 設置自動裝載系統http://php.net/manual/en/language.oop5.autoload.php(但它更上課,可能無法幫助你,但要知道它的存在是很重要的)
  • 要使用_ DIR _恆(見Tivie回覆)如果你有一個獨特的PHP文件「入口」(下稱「引導文件」),這被稱爲所有的時間(這應該是這種情況)

此外,當你說:

例如,我有這包括在我的postpage.php這是位於 example.com/c/postpage.php:

一定要充分了解一個事實,即「路徑」的網址(例如。 com/foo)和磁盤上的路徑文件可能完全不同,並且完全不連接。

因此,在你的情況下,因爲你似乎有一個目錄佈局的東西(header/footer/...),也許另外一個模板,最簡單的事情可能是在你的php中添加這2個路徑。 INI。

然後,只需撥打:include('head.php')即可。

你也可以添加在你的include_path你的項目的基本目錄,然後調用include('includes/overall/head.php')

0
include "include/header.php"; 
include "include/head.php"; 

,如果你是從其他文件夾,然後編碼會是這樣

include "foldername/filename.php"; 
相關問題