我正在尝试使用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文件的文件都可以找到它。
答案 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");
弹出