2012-01-11 235 views
30

我需要將父目錄和其他子目錄中的文件包含到子目錄中。我之前通過簡單地使用include('/ rootdirectory/file.php');但現在它似乎不起作用。包含來自父級或其他目錄的文件

只是想知道我該如何做到這一點,謝謝。

這裏是我的確切路線:

include('/forums/groups.php'); 

它給我這個錯誤(頁面仍然運行):

警告:包括(/forums/groups.php)功能。包括]:未能 打開流:沒有這樣的文件或目錄在 C:\ XAMPP \ htdocs中\論壇\在線博客\ posts.php

Warning: include()[function.include]:打開 '/forums/groups.php'包含在 (include_path ='.; C:\ xampp \ php \ PEAR')中失敗 C:\ xampp \第3行的htdocs \ forums \ blog \ posts.php

+0

一個經常運行到這個錯誤,並迅速解決它,請按照下列步驟操作:stackoverflow.com/a/36577021/2873507 – 2016-04-12 15:18:12

回答

58

include()及其親屬採取文件系統路徑,而不是相對於文檔根目錄的網絡路徑。獲取父目錄,使用../

include('../somefilein_parent.php'); 
include('../../somefile_2levels_up.php'); 

如果您有/開始,一個絕對的系統文件路徑將用於:

// Full absolute path... 
include('/home/username/sites/project/include/config.php'); 
+3

嘗試這樣做的,它不起作用的問題,因爲我有同樣的問題。 – ubique 2013-10-19 18:14:28

+0

@ubique如果它不能像應用程序中發佈的那樣工作,那是因爲您的文件系統佈局可能與您的期望不同,而不是因爲這是不正確的。發佈有關您試圖包含的文件以獲得幫助的信​​息。 – 2013-10-19 22:41:20

+1

@ubique ..或者你的腳本改變了當前的工作目錄。 getcwd()看看它是什麼。 – 2013-10-19 22:57:48

2

任何以斜線開頭的路徑將是絕對路徑。從服務器的根文件夾而不是文檔根目錄的根文件夾。您可以使用../進入父目錄。

+0

我已經開始了一個故障排除清單的這種頻繁的錯誤在這裏:stackoverflow.com/a/36577021/2873507 – 2016-04-12 15:18:52

4

取決於您嘗試包含的文件位於何處。

例子:

/rootdir/pages/file.php

/someotherDir/index.php

如果你在寫的index.php以下幾點: include('/rootdir/pages/file.php');會出錯,原因是其將嘗試獲得:

/someotherDir/rootdir/pages/file.php這當然不存在...

所以,你將不得不使用include('../rootdir/pages/file.php');

+0

我已經開始了一個故障排除此處出現此頻繁錯誤的清單:stackoverflow.com/a/36577021/2873507 – 2016-04-12 15:18:46

5

這裏的東西我記住這一問題寫道:

<? 
function absolute_include($file) 
     { 
     /* 
     $file is the file url relative to the root of your site. 
     Yourdomain.com/folder/file.inc would be passed as 
     "folder/file.inc" 
     */ 

     $folder_depth = substr_count($_SERVER["PHP_SELF"] , "/"); 

     if($folder_depth == false) 
      $folder_depth = 1; 

     include(str_repeat("../", $folder_depth - 1) . $file); 
     } 
?> 

希望它幫助。

2

從外行人的角度和實用性來看,我認爲這是一種老式的DOS技巧。哇!那是什麼? DOS?從來沒有聽說過!

「..「支持你退出當前子目錄一次到更高的文件夾/目錄,並且..輸入鍵入兩次後退出2更高的父文件夾。請繼續添加」..輸入「背對揹你很快就會發現自己處於目錄的最高層

至於新手爲了更好地理解這一點,考慮一下(如果你知道這是什麼意思,那麼考慮這個問題(根據家庭PC或「C:\驅動器」)而不是網絡服務器/主機的「根目錄」),當你在網上時,考慮你的網站存在於家用電腦的硬盤驅動器上,埋在C:\驅動器下的某個文件夾中,最後你可以把它看作是「 ..「回到一個目錄,」/「轉發一個目錄/文件夾。

現在! 如果您正在使用命令提示符並位於PC的「myDocuments」文件夾中,則必須退出該文件夾才能通過鍵入「../」以更靠近較高的目錄「C:\」 。 如果您想訪問位於widows目錄中的文件,但仍然位於myDocuments文件夾中,理論上您應該輸入../windows;在DOS命令提示符的實際情況下,您只需鍵入..,但我爲您設置了網絡。 /自然重定向到另一個目錄。

使用 「我的文檔」 讓假裝你創建2個文件夾內,它被稱爲 「PHP1」 和 「PHP2」,在這樣的,我們現在有文件夾:

  • C:\我的文檔\ PHP1
  • C:\我的文檔\ PHP2

在PHP1你把一個名爲index.php文件。並在PHP2文件夾中放置一個名爲Found.php的文件。現在變成了:

  • C:\我的文檔\ PHP1 \ 的index.php
  • C:\我的文檔\ PHP2 \ found.php

裏面的 C:\ myDocuments \ PHP1 \ index.php文件您需要編輯並鍵入類似內容:

<?php include ('../php2/found.php')?> 

../是位置因此它認爲當前的文件位置「C:\我的文檔\ PHP1 \的index.php」,是一個指令,告訴它要背出PHP1目錄的輸入或前進到PHP2目錄下查找Found.php文件。但是它讀了嗎?請參閱我的想法,瞭解下面的疑難解答

Now!假設有1個文件夾PHP1和子文件夾PHP2:

  • C:\我的文檔\ PHP1 \ PHP2

則只需引用/代碼

<?php include('/PHP2/found.php') ?> 

如PHP2作爲子目錄存在,位於PHP1目錄的下面或內部。

如果上述不起作用,它可能與訪問/ htaccess或目錄權限或打字錯誤有關。爲了加強這一點......陷入困境......如果「found.php」文件中包含錯誤/錯字,它將在錯誤渲染時崩潰,這可能是您((要求/ require_once))的原因體驗到它不會改變目錄或訪問文件的錯覺。 在對此事的最後一個念頭,你可能需要實例化功能或引用,以使用附帶/要求「無所謂」通過創建一個新的變量或對象,如

$newObject = new nameobject("origianlThingy"); 

記住,只是因爲你是包括/需要的東西,有時意味着,它包含/需要運行,但可能需要重新創建才能使其處於活動狀態或訪問它。 肯定會重新創建一個「如果它是可讀的」實例,並使其在當前文檔中可用,同時保留原始文檔。但是,您應該在所有實例中引用新創建的變量$ newObject ....如果其全局。

把這個放在一些網絡主機帳戶的角度來看;網絡主機是一個大小超過硬盤驅動器(就像你的電腦上),你的域只不過是他們分配給你的文件夾。您的文件夾被稱爲根。在該文件夾內,你可以做任何你可以做的事情。 您的「」之一在目錄/文件夾之間移動的方法是使用../多次退出您當前的參考到您想要查找的文件夾位置。

在我醉酒狀態我意識到,我知道太多要理智,而不是 足以成爲瘋狂!」

0

我從坦率和我在我的「settings.php」文件中添加了這樣的內容,然後在有鏈接時包含在所有頁面中:

「的settings.php」

$folder_depth = substr_count($_SERVER["PHP_SELF"] , "/"); 

    $slash=""; 

    for ($i=1;$i<=($folder_depth-2);++$i){ 

     $slash= $slash."../"; 

    } 

在我的header.php被包含在所有的網頁:

A HREF = .... PHP的echo $ slash.'index.php」。 ...

似乎它適用於本地和託管環境....

(注:我是一個絕對的初學者)

0

曾有同樣的問題早解決這樣的:

包括( '/../包括/ config.php文件'); //注意 '/' '../includes/config.php'

0

出庭。如果你的服務器是不解析該文件使用

include '../somefilein_parent.php'

試試這個父目錄:

include __DIR__ . "/../somefilein_parent.php";

相關問題