2012-04-08 94 views
4

我不知道這是多麼簡單的解決,但我認爲我做錯了什麼。我是PHP新手,請耐心等待。PHP包括不工作

當我開始學習PHP的,我總是把我的所有項目文件到同一個文件夾index.php一起,從而包括所有這樣的:在學習的過程中後來

<?php 
include('./translation.php'); 
?> 

爲我積累了經驗和我的技能提高了,我不得不開始使用文件夾並將我的文件放入子文件夾中。我結束了成功,包括我的以下文件:

<?php 
include('../translation.php'); 
?> 

我無故障編碼了一個意想不到的轉折,當我決定開始使用子子文件夾。更深把所有的文件到文件的結構後,我很震驚地發現,我無法將它們包含了使用:

<?php 
include('.../translation.php'); 
?> 

現在我迷路了。我做錯了什麼?我能理解,我不能在項目中包含比2個目錄更深的文件嗎?我應該開始使用不同的文件系統嗎?

+0

在大多數文件系統中,'..'是指當前目錄的父目錄,所以你可以通過'../../../../'等鏈接儘可能多的'/'來描述目錄。單點'.'指的是當前目錄,所以'./././././'仍然指向同一個(當前)目錄。 – 2012-04-08 17:26:47

+0

當你創建更大的項目時,定義一個像'define('SITE_ROOT',dirname(__ FILE __));'在頂層,然後包括其他的'include(SITE_ROOT。「/../translation .php「);' – 2012-04-08 17:30:09

+0

我已經在這篇文章中遇到了一些麻煩,也許可以幫助: http://stackoverflow.com/questions/3510909/php-define-doesnt-seem-to-be-working-with-include – 2014-07-30 20:52:40

回答

10

您的概念不正確。

  • .代表當前目錄
  • ..代表父目錄

這是一個文件系統會保持在跟蹤文件和瀏覽深度的方式。您可以使用...更改目錄。當你去更深,你必須使用

例如:

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

包括文件,當前目錄外二級。這可能是你想要做的。

+0

嘿蠕動downvoter,給一些評論。 – Starx 2012-04-08 17:27:24

+1

+1,但我會將「之前」更改爲「父母」。導致「..」與按下「後退」按鈕不一樣。 – 2012-04-08 17:30:21

+0

@jb,謝謝,這是一個很好的建議。我已經更新了我的回答 – Starx 2012-04-08 17:31:48

4

的包括應該是:

<?php 
include('../../translation.php'); 
?> 

每個級別 '向上' 需要自己../

例如,如果你有以下目錄:

a 
    a1 
     filex.php 
    a2 
b 
    b1 
     filey.php 

如果filex.php,你想包括filey.php,你會做以下幾點:

<?php 
include('../../b/b1/filey.php'); 
?> 

最多/出兩次,下/ ib兩次

基本上,任何時候你想要'下'一個級別/進入一個文件夾,你給文件夾的名稱由一個正斜槓。但是要'上'或離開當前文件夾(到當前文件夾的父文件夾),您給..後跟正斜槓

-1

讓我們假設這個文件夾樹。

-> site 
     -> public_html (Inside the site folder) 
      -> index.php (Inside the public_html folder) 
     -> translation.php (Inside the site folder) 
在你的index.php

,你只需要使用include "../translation.php";

如果translation.php是在同一個文件夾中的站點文件夾,您可以使用include "../../translation.php";

如果您translation.php是在與index.php相同的文件夾中,但您只需包含如下內容:include "translation.php";

1

如果您想深入一點(子文件夾的子文件夾),只需使用../../

include("../../translation.php"); 

但是,如果您的項目是中等大小或大尺寸,我寧願建議您定義絕對路徑。在你的index.php或任何你包含的文件是,定義類似SITE_ROOTINCLUDES_ROOT

define("SITE_ROOT", dirname(__FILE__)); 

然後按需使用它。

include(SITE_ROOT."/../../translation.php"); 

這是非常有用的,你是從不同的文件夾

使包括文件的情況下,假設你有這樣的文件夾結構

  • ROOT
    • 包括/
      • boot.php
    • 翻譯
      • en.php
    • AJAX/
      • ajax2/
        • ajaxfile.php
    • 的index.php

CASE1:(失敗)

的index.php包括

<?php 
include("includes/boot.php"); 

AJAX/ajax2/ajaxfile.php包括

<?php 
include("../../includes/boot.php"); 

包括/引導。PHP包括

<?php 
include("translations/en.php"); // from index.php it works but from ajax/ajax2/ajaxfile.php it searches for wrong file 

CASE2:(通過)

AJAX/ajax2/ajaxfile.php和index.php的具有相同內容作爲CASE1

包括/ boot.php包括

<?php 
define("INCLUDES_ROOT", dirname(__FILE__)); 
include(INCLUDES_ROOT."/../translations/en.php"); 

它通過,因爲INCLUDES_ROOT確保整個包含指向正確的目錄!