PHP - 在包含文件时使路径相对

bik*_*y77 0 php relative-path include

在站点根目录中,我有以下文件夹和文件:

在此输入图像描述

文件包含/ scripts.php包含指向其余页面运行所需的所有css/js文件的链接.当从站点根目录(ex cart.php)中的任何文件中包含scripts.php时,所有路径都可以正常工作.但是当从文件夹(例如/ admin)中包含路径不正确时,显然是因为/ admin中没有/ js或/ css目录.

我尝试了几个方法,例如将scripts.php中的路径从'./css/styles.css'改为./css/styles.css,或者只改为/css/styles.css但是没有用.也试过include($_SERVER["DOCUMENT_ROOT"] . "includes/scripts.php");但也没有成功.

如何在scripts.php中创建相对路径,以便无论它包含在哪里,所有css/js路径都是正确的并且与站点根相关?

这是scripts.php中一些链接文件的示例:

<script type="text/javascript" src="js/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.9.2.custom.min.js"></script>
<script type="text/javascript" src="js/jquery.alerts.js"></script> 
<script type="text/javascript" src="js/cookie.js"></script> 
<link rel="stylesheet" type="text/css" href="css/styles.css">
<link rel="stylesheet" type="text/css" href="css/layout.css">
Run Code Online (Sandbox Code Playgroud)

等等...

编辑:我看到大多数答案都理所当然地认为文件是在UNIX环境中托管的,这是不正确的,它是在Windows/Apache设置上开发的,并且在完成后将托管在UNIX服务器上.所以我需要一个适用于两个系统的解决方案,因此每当我编辑/上传文件到实时服务器时,我都不需要更改代码.

h2o*_*ooo 6

包含在PHP中

方法1 - 使用常量

ROOTDIR在包含任何其他文件之前,在您的一个根文件中创建一个常量(例如.index.php,或创建一个在任何其他包含之前相对包含的文件):

//Place this in a file you always include relatively
define("ROOTDIR", dirname(__FILE__) . "/");
Run Code Online (Sandbox Code Playgroud)

无论你在哪里包括东西:

//Place this in whatever file
require_once(ROOTDIR . "admin/panels/users.php");
Run Code Online (Sandbox Code Playgroud)

方法2 - 使用set_include_path

或者,在同一个文件中,您可以使用以下内容代替常量set_include_path:

//Place this in a file you always include relatively
set_include_path(dirname(__FILE__) . "/");
Run Code Online (Sandbox Code Playgroud)

当你包括东西时:

//Place this in whatever file
require_once("admin/panels/users.php");
Run Code Online (Sandbox Code Playgroud)

方法3 - 通过PHP配置

如果您不想使用常量并且set_include_path可以访问PHP配置文件,那么您也可以include_path将配置更改为例如./var/www/,然后require_once在包含文件时简单地使用上面的内容.关于这里的更多信息.


但是包含脚本和样式表,h2ooooooo呢?

好吧,我知道你会进入那个.我通常倾向于通过以下方式启动它来创建相对于root的路径/:

<script type="text/javascript" src="/js/jquery-1.8.0.min.js"></script>
<!--                                ^                     -->
Run Code Online (Sandbox Code Playgroud)

或者您也可以<base>在HTML中设置路径:

<head>
    <base href="http://www.mydomain.com/" />
    <script type="text/javascript" src="js/jquery-1.8.0.min.js"></script>
</head>
Run Code Online (Sandbox Code Playgroud)

注意:设置<base>路径时,它还指定所有链接也将相对于基本路径,因此如果您指向管理文件夹中的subdir/链接将链接到http://www.mydomain.com/subdir/不是 http://www.mydomain.com/admin/subdir/.