我只是定義了一個根路徑是這樣由PHP define()定義的常量真的是全局的嗎?
define("ROOT_PATH", dirname(__FILE__));
這樣一個常數,在相同的文件,他們能夠認識到ROOT_PATH,然而,在其他文件中,ROOT_PATH是空的,我查了一些論壇上,有人說定義的常量可以在全局中使用,但是,我不能,是否需要在PHP.ini中執行一些配置?
實際上,爲什麼我這樣做是因爲我將網站移動到新服務器,但是,新服務器似乎不喜歡我使用相對路徑,因此,我需要更改爲絕對路徑。
UPDATE:
謝謝大家,我想我抓住的原因,我用AJAX調用文件,所以ROOT_PATH爲空,因此,我在每一個文件中定義ROOT_PATH,但另一個問題是出現,我的文件結構是這樣的
/index.php
/ajax/a1.php
/inc/inc.php
index.php:
<?
define('ROOT_PATH',dirname(__FILE__));
include_once ROOT_PATH."/inc/inc.php";
?>
a1.php:
<?
define('ROOT_PATH',dirname(__FILE__));
include_once ROOT_PATH."/inc/inc.php";
?>
所以,當某事在客戶端調用a1.php,它將包括inc.php,但是,它並不像我想象的,我得到這個從Chrome開發人員工具
<b>Warning</b>: include_once(D:\.............\ajax/inc/a1.php) [<a href='function.include-once'>function.include-once</a>]: failed to open stream: No such file or directory in <b>D:\..................\inc\inc.php</b> on line <b>3</b><br />
我檢查由兩個文件生成的ROOT_PATH,發現,FILE是取決於來電,
如果的index.php稱呼它,
ROOT_PATH = d:\.............\
如果a1.php通話它,
ROOT_PATH = d:\..............\ajax\
但是,這兩個文件我需要調用該文件,任何方法,我可以克服這一點?謝謝。
解決:
嗨,我剛剛弄清楚如何在來的路徑問題,首先,我們需要建立在每一個目錄中的文件,而這個文件存儲的絕對路徑信息,請參閱相關路徑(很難理解:P),我把這個文件path.php
,我的例子
/index.php
/ajax/a1.php
/inc/inc.php
因此,我們需要添加3路。PHP的在這3 directroy,爲遵循,
/index.php
/path.php
/ajax/a1.php
/ajax/path.php
/inc/inc.php
/inc/path.php
的path.php
這樣的每個設置,
/path.php
<?
if(!defined(ROOT_PATH))
define(ROOT_PATH, dirname(__FILE__));
?>
/ajax/path.php
& /inc/path.php
<?
if(!defined(ROOT_PATH))
define(ROOT_PATH, '..');
?>
所以,如果我們有3升前夜結構,讓說:/one/two/
,那麼/one/two/path.php
應該是這樣的
<?
if(!defined(ROOT_PATH))
define(ROOT_PATH, '../..');
?>
我們成立了這一切的文件後,我們需要包括這個path.php
爲遵循,例如與index.php
/index.php
<?
include_once "path.php";
include_once ROOT_PATH."/inc/inc.php";
...
?>
因此,無論誰是來電者,它將首先包括當地的path.php
,並找出相對路徑(/ or .. or ../..)
,因此, cluded文件不會是錯誤的,因爲所有的人都包括有正確的符號,讓說,
如果呼叫者的index.php,然後ROOT_PATH =「FULLPATH」,所以
include_once ROOT_PATH."/inc/inc.php";
=
include_once "FULLPATH"."/inc/inc.php";
如果呼叫者/ ajax/a1.php,則ROOT_PATH =「..」,所以
include_once ROOT_PATH."/inc/inc.php";
=
include_once ".."."/inc/inc.php";
你是否在第二個腳本中包含了包含'define()'語句的php腳本? – KingCrunch 2011-05-09 11:15:49
...或者你是否將第二個腳本包含在定義常量的腳本中? – Eineki 2011-05-09 11:21:59