在网站根目录中,我有以下文件夹和文件:
文件包含/ 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服务器上。因此,我需要一个适用于两个系统的解决方案,因此每当我编辑/上传文件到实时服务器时,我都不需要更改代码。
答案 0 :(得分:6)
在包含任何其他文件之前,在您的一个根文件(例如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");
或者,在同一个文件中,您可以使用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");
如果您不想使用常量和set_include_path
并且可以访问PHP配置文件,您还可以将配置中的include_path
更改为例如。 /var/www/
,然后在包含文件时使用上面的require_once
。 More info about that here
/
:启动相对于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