PHP 包含绝对路径

我的网站上有一个名为$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');?>

它的工作原理。

有人知道可能出了什么问题吗?


答案 1

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

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

答案 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

我可以包含函数.php文件,无论我在哪里,只需复制粘贴

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



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

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

推荐