【问题标题】:absolute/relative paths for php includesphp 的绝对/相对路径包括
【发布时间】:2012-09-10 15:58:49
【问题描述】:

我有一个函数(订单),在一个名为 extract.php 的文件中包含许多 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");
    ?>

我怎样才能得到正确的路径引用?

【问题讨论】:

  • 路径必须是绝对的,而不是相对的。尝试使用 $_SERVER['DOCUMENT_ROOT'] 并​​从那里开始导航。
  • 你的意思是include ('../application/dir1/dir2/dir3/extract.php');
  • getorder.php 中的错误

标签: php


【解决方案1】:

来自服务器根目录的引用,使用 $_SERVER['DOCUMENT_ROOT'] 或

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

等等……

【讨论】:

  • ./ ../ 是相对于文档的。 / 相对于文档根目录。
  • 当你的函数从不同的位置被调用时,它仍然遵循相同的指令来查找包含。如果您描述相对于站点根目录的位置,则可以从调用该函数的任何位置找到它们。 / 从站点根目录开始。 ./ 从定义函数的文件的位置开始。
【解决方案2】:

相对文件总是从调用 PHP 二进制文件的目录计算出来的。

为避免您可以使用__FILE__ 常量来引用实际文件。

你可以这样写:

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

include_once $path;

无论脚本在哪里调用,都会产生相同的路径

【讨论】:

  • 在每个需要的地方。我建议您将第一部分 realpath(dirname(FILE) 存储在 main 函数的常量 ('MY_APP_ROOT') 中,并在其余文件中使用该常量。 include_once MY_APP_ROOT . '/my/相对/路径';
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-17
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
相关资源
最近更新 更多