繁体   English   中英

PHP包含绝对路径

[英]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/" ,也可以在includerequire之前在脚本中include以下内容:

set_include_path(get_include_path() . ":/home/myuser/mysite.com/");

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

第二个选项仅对在代码上具有setincludepath的脚本setincludepath ,对于其他应用程序,除非您在每个添加setincludepath脚本中都有调用的对象,否则该选项将setincludepath

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM