2013-05-29 10 views
0

儘可能多的用戶的建議我我創建了一個文件globals.php在那裏我:包括路徑,我可以出來這個

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

,然後我包括在網站上的每個文件這個文件。

但現在問題出現時,我將此文件包含在其他文件。

E.g.網站結構:

/en/index.php 
/header.php 
/globals.php 

現在,當我包括header.phpindex.php

<?php 
//header.php 
include 'globals.php'; 

//index.php 
include '../globals.php'; 
include '../header.php'; 
?> 

現在header.php找不到globals.php'因爲它搜索'../globals.php'

我該如何解決這個問題?

+0

使用絕對路徑,而不是親戚? –

+0

它不建議使用'<?php $ _SERVER ['DOCUMENT_ROOT']?>' 我應該總是寫例如:'__DIR __'。/ ../globals。php'; – Perocat

+0

然後當我有兩次''../../''? – Perocat

回答

1

讓我們想象一下,你的globals.php文件在config目錄從您的文檔魯德

所以,你必須

/index.php 
/config/globals.php 

一個很好的方法可能是通過require_once($_SERVER["DOCUMENT_ROOT"]."/config/globals.php);這將包括在globals.php無論你在什麼目錄下工作。

對於我個人的喜好,我喜歡設置固定爲我的項目的根目錄,並從那裏把所有項目的相關數據,例如

if (!defined("APP_ROOT")) define("APP_ROOT", $_SERVER["DOCUMENT_ROOT"]); 

您可能需要重新評估,作爲一個選項作爲您的出發點,而不是DIR

我覺得很自然......

如果我需要包括一個文件我將導航,查看http://www.mysite.com/library/database.php然後我就include(APP_ROOT."/library/database.php");;

另一個禮包可能制定出你是在您的.htaccess文件

SetEnv APP_CONFIG_FILE "/path/to/config/file.php" 

指令,然後在所有腳本只是

include($_SERVER["APP_CONFIG_FILE"]);

+0

我看到的唯一問題是,如果我在另一個位置上開發我的站點而不是'DOCUMENT_ROOT',那麼它將無法工作,我將不得不更改所有'if(!defined ...'寫入的文件 – Perocat

+0

這就是爲什麼你定義一個常量,而不是在任何地方使用$ _SERVER [「DOCUMENT_ROOT」] ......就像你的開發環境隱藏在一個目錄後面,例如localhost/sitename /那麼你只需更新常量來反映完成。 – Orangepill

+0

ok我定義了這個常量'define(「APP_ROOT」,$ _SERVER [「DOCUMENT_ROOT」]);'on'globals.php'。我的問題是當我必須在文件中包含'globals.php'!因爲如果一個文件是包含在另一個文件我總是有同樣的問題,當前的工作目錄 – Perocat

0

從你的問題,我的理解是「header.php文件」是在同一目錄下的「globals.php」因爲這樣,就可以在「header.php文件」

<?php 
//header.php 
include 'globals.php' 
?> 

做這樣的事情這應該做的工作,如果它仍然無法正常工作,請發表評論。

謝謝。

+0

不,因爲當'/ en/index.php'包含'header.php'時,工作目錄是'/ en /',所以'globals.php'不會再被創建! – Perocat

+0

Ohhhh!我想我已經掌握了它。現在試試這個>><?php include'../globals.php'?> – 2013-05-29 02:02:20

+0

OK,然後如果我只打開'header.php'不再工作........... .... – Perocat