2012-09-10 167 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