PHP包括绝对路径

时间:2014-04-07 12:13:37

标签: php include relative-path include-path absolute-path

我的网站上有一个名为$ basePath的变量,它被设置为:

$basePath = '/Systems/dgw/';

我在我的所有css,js和图像标签上使用它(缩短以获得更好的可见性):

<link href="<?php echo $basePath; ?>include/assets/css/bootstrap.min.css">

我对这些包含没有任何问题,它们可以在任何文件和我的文件夹中正常工作。

我有一个包含以下内容的页面:

<img src="<?php echo $basePath; ?>images/new_logo.png" alt="logo"/>

图像显示很好。它后面的一行说明:

<?php include($basePath.'include/assets/common/topMessages.php');?>

但包含不会发生。当我这样尝试时:

<?php include('../../include/assets/common/topMessages.php');?>

有效。

任何人都知道可能出现什么问题?

3 个答案:

答案 0 :(得分:45)

你不能以这种方式包含相对于你的webroot的php文件,因为如果你使用斜杠作为第一个字符,引用将比你的文档根更深入。因此,您可以执行以下操作,而不是使用您的基本路径:

<?php 
   $path = $_SERVER['DOCUMENT_ROOT'];
   $path .= "/yourpath/yourfile.php";
   include_once($path);
?>

答案 1 :(得分:2)

如果您的服务器没有填充“document_root”,则可能需要此



    require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/path/to/file.php");

我使用这行代码。它返回到站点树的“顶部”,然后转到所需的文件 例如,假设我有这个文件树:
domain.com/aaa/index.php
domain.com/bbb/ccc/ddd/index.php
domain.com/_resources/functions.php

我可以在任何地方包含functions.php文件,只需复制粘贴

即可
require(str_repeat('../',(substr_count(getenv('SCRIPT_URL'),'/')-1))."/_resources/functions.php");


如果您需要多次使用此代码,您可以创建一个返回“str_repeat('../',(substr_count(getenv('SCRIPT_URL')'/'的函数')-1))“部分。然后只需在您包含的第一个文件中插入此函数。我有一个“initialize.php”文件,我包含在每个php页面的最顶层,其中包含此功能。下次我必须包含文件时,我实际上只使用该函数(名为“path_back”):

require(path_back()."/_resources/another_php_file.php");

答案 2 :(得分:0)

您可以向include_path = ".:/home/myuser/mysite.com/"添加php.ini,也可以在includerequire之前在脚本中添加set_include_path(get_include_path() . ":/home/myuser/mysite.com/");

setincludepath

第一个适用于您网站上运行的所有脚本。

第二个选项仅适用于代码上有setincludepath的脚本,对于应用程序的其余部分,它将不起作用,除非您在每个添加{{1的脚本的脚本中调用的对象}}