[英]PHP include absolute path
我的网站上有一个名为$ basePath的变量,其设置为:
$basePath = '/Systems/dgw/';
我在所有的css,js和images标签上都使用了它(为了更好的可见性而缩短了):
<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');?>
有用。
有人知道什么地方可能出问题吗?
您不能以这种方式相对于您的webroot包含php文件,因为如果使用斜杠作为第一个字符,则引用将比仅文档根目录更深。 因此,除了使用您的基本路径,您可以执行以下操作:
<?php
$path = $_SERVER['DOCUMENT_ROOT'];
$path .= "/yourpath/yourfile.php";
include_once($path);
?>
如果您的服务器未填充“ 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");
您可以在您的php.ini
添加一个include_path = ".:/home/myuser/mysite.com/"
,也可以在include
或require
之前在脚本中include
以下内容:
set_include_path(get_include_path() . ":/home/myuser/mysite.com/");
第一个将适用于您网站上运行的所有脚本。
第二个选项仅对在代码上具有setincludepath
的脚本setincludepath
,对于其他应用程序,除非您在每个添加setincludepath
脚本中都有调用的对象,否则该选项将setincludepath
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.