2012-09-10 165 views
1

我有許多的PHP的功能(命令)包括在一個文件中extract.php絕對/相對路徑包括

http://example.com/application/dir1/dir2/dir3/extract.php

function orders ($username) 
{ 
require ("functions.inc.php"); 
define("DATAGRID_DIR", "./../datagrid/"); 
define("PEAR_DIR", "./../datagrid/pear/"); 
require_once (DATAGRID_DIR . 'datagrid.class.php'); 
require_once (PEAR_DIR . 'PEAR.php'); 
require_once (PEAR_DIR . 'DB.php'); 
require_once ('./../datagrid/classes/database.class.php'); 

//function code here 
} 

我有另一個文件(install.php了)稱爲該在同一個目錄下調用這個函數,它工作得很好。

<?php 
include ("extract.php"); 
orders ("643443876996"); 
?> 

然而,當我包括它在這個路徑中的另一個功能 http://example.com/orders/getorder.php,它給我的錯誤,它無法找到我的文件「datagrid.class.php」;

<?php 
    include ("include('../application/dir1/dir2/dir3/extract.php');"); 
    orders ("643443876996"); 
    ?> 

如何獲取正確的路徑引用?

+0

路徑總是會產生相同的路徑,無論需要是絕對的,而不是相對的。嘗試使用$ _SERVER ['DOCUMENT_ROOT']並從此處導航。 – dbf

+0

你的意思是'include('../ application/dir1/dir2/dir3/extract.php');'? – Spontifixus

+0

如果來自getorder.php – karto

回答

1

從服務器根參考,無論是與$ _SERVER [ 'DOCUMENT_ROOT']或

require_once(DATAGRID_DIR '/application/dir1/dir2/dir3/datagrid.class.php');

等等

+0

./ ../的錯誤與文檔有關。 /是相對於文檔根目錄的。 –

+0

請進一步說明這一點 – karto

+0

當您的功能從不同的位置被調用時,它仍然遵循相同的指令來查找包含。如果您描述了相對於站點根目錄的位置,則可以從調用函數的任何位置找到它們。 /從網站根目錄開始。 ./從函數定義文件的位置開始。 –

1

相對文件總是從那裏PHP程序被稱爲目錄計算。

爲了避免您可以使用__FILE__常量來引用實際文件。

使用,你可以這樣寫:

$path = realpath(dirname(__FILE__)) . '/my/relative/path'; 

include_once $path; 

的是,當腳本被稱爲

+0

ok。謝謝。我在主要功能中使用這個嗎? – karto

+0

在每個需要的地方。我建議您將第一部分realpath(dirname(__ FILE__))存儲在主函數中的一個常量('MY_APP_ROOT')中,並在其餘文件中使用該常量。include_once MY_APP_ROOT。'/ my/relative/path'; – Maks3w