PHP require_once相对于可变文档根目录

时间:2011-12-07 21:19:17

标签: php

我正在尝试使用require_once,但是,我并不总是知道文件结构相对于DOCUMENT_ROOT ...

可能是...... /config.php或/theapp/config.php或/dev/theapp/config.php或/something_else/theapp/config.php

COULD 从文件返回路径,例如require_once('../ config.php'),除了在某些情况下文件可能在符号链接目录中。

基本上我正试图找到一种不管情况的方法,任何调用config.php文件的文件都可以找到它。

4 个答案:

答案 0 :(得分:2)

这是include_path配置设置的用途。我通常在我的网站的Apache配置中或在本地.htaccess文件中设置它。使用php_value指令。

所以,基本上,在你的Apache配置文件中:

php_value include_path .:/var/www/where-your-site-is

然后,从您的脚本中,您只需使用:

<?php
  require_once 'conf/config.php';
  require_once 'views/template.php';
?>

无论您的网站目录结构在何处。

答案 1 :(得分:2)

如果你有PHP 5.3+,请使用:

// My page: /dir1/dir2/welcome.php
// My include: /inc/top.php 
require_once(__DIR__.'/../../top.php');

来自docs__DIR__是文件的目录。如果在include中使用,则返回包含文件的目录。

答案 2 :(得分:0)

您可以使用dirname(__FILE__) 它返回脚本的完整路径。

例如

require_once(dirname(__FILE__).'/../config/config.php');

答案 3 :(得分:0)

提出了一个非常简单的解决方案,当应用程序作为一个单元运行时,以及通过符号链接链接核心系统时,该解决方案有效:

而不是:

require_once('../../../config.php');

我用:

function changeDir($up_n){
    $split = explode("/",$_SERVER['SCRIPT_FILENAME']);
    array_pop($split); // Remove current file name
    for ($i=1; $i<=$up_n; $i++){ array_pop($split); }
    return implode("/",$split);
}

require_once(changeDir(3)."/config.php");

弹出