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

时间:2013-04-17 09:01:13

标签: php include relative-path

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

enter image description here

文件包含/ 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">

等...

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

4 个答案:

答案 0 :(得分:6)

包含在PHP

方法1 - 使用常量

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

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

以及包含内容的地方:

//Place this in whatever file
require_once(ROOTDIR . "admin/panels/users.php");

方法2 - 使用set_include_path

或者,在同一个文件中,您可以使用set_include_path而不是常量:

//Place this in a file you always include relatively
set_include_path(dirname(__FILE__) . "/");

当你包括东西时:

//Place this in whatever file
require_once("admin/panels/users.php");

方法3 - 通过PHP配置

如果您不想使用常量和set_include_path并且可以访问PHP配置文件,您还可以将配置中的include_path更改为例如。 /var/www/,然后在包含文件时使用上面的require_onceMore info about that here


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

嗯,我知道你会进入那个。我通常倾向于通过使用/

启动相对于root的路径
<script type="text/javascript" src="/js/jquery-1.8.0.min.js"></script>
<!--                                ^                     -->

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

<head>
    <base href="http://www.mydomain.com/" />
    <script type="text/javascript" src="js/jquery-1.8.0.min.js"></script>
</head>

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

答案 1 :(得分:1)

请执行以下更改而不是include($ _ SERVER [“DOCUMENT_ROOT”]。“includes / scripts.php”);

<script type="text/javascript" src="<?php echo $_SERVER["DOCUMENT_ROOT"];?><js/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="<?php echo $_SERVER["DOCUMENT_ROOT"];?>js/jquery-ui-1.9.2.custom.min.js"></script>
<script type="text/javascript" src="<?php echo $_SERVER["DOCUMENT_ROOT"];?>js/jquery.alerts.js"></script> 
<script type="text/javascript" src="<?php echo $_SERVER["DOCUMENT_ROOT"];?>js/cookie.js"></script> 
<link rel="stylesheet" type="text/css" href="<?php echo $_SERVER["DOCUMENT_ROOT"];?>css/styles.css">
<link rel="stylesheet" type="text/css" href="<?php echo $_SERVER["DOCUMENT_ROOT"];?>css/layout.css">

答案 2 :(得分:0)

解决方案1: 使用html base中的<head>标记,注意:这会影响所有相对链接

<base href="http://yoursite.com/" />

解决方案2: 在htaccess文件中定义环境变量

SetEnv MYSITE_URL http://yoursite.com/

然后在你的html echo环境变量

<script type="text/javascript" src="<?php echo getenv('MYSITE_URL'); ?>js/jquery-1.8.0.min.js"></script>
<script type="text/javascript" src="<?php echo getenv('MYSITE_URL'); ?>js/jquery-ui-1.9.2.custom.min.js"></script>
...

解决方案3: 与解决方案2类似,但改为使用您的网站网址创建一个php常量并在您的html中回显它

解决方案4: 使用/

开始您的资产路径

答案 3 :(得分:0)

尝试使用这些功能,但你需要将它放在调用的根文件夹中它是否需要它

function($_file){
php_uname();
$server_info = PHP_OS; // get host os info
$os = strtoupper(substr(PHP_OS, 0, 3));
if($os === 'WIN'){
    $path = dirname( $file );
    $p = explode(':',$path);
    return str_replace(array('\\','\\'), array('/','/'), $p[1]); //return the absolute path
}else{
    return dirname( $file );
}
}

示例:

include get_path(__DIR__).path/to/asset/file.js