在包含的php文件中使用绝对路径的替代方法

问题描述:

我有一个名为“header.php”的文件,我在我网站上的每个页面上都包含此文件,其中包含与我的服务器上的其他文件(如css文件,jquery插件,等等。现在我正在为这些链接使用绝对路径,所以他们将使用与header.php文件不在同一目录中的文件,并且这可以工作,但正如您在下面的示例中看到的,事情开始如果你的header.php文件包含大量的链接(我的做法),真的很难管理,所以我想知道在header.php文件中是否有其他替代方法来使用绝对路径,就像我在这里完成的那样。在包含的php文件中使用绝对路径的替代方法

的header.php

<? 
$base_url = "http://example.com"; 
?> 
    <html> 
     <head> 
     <title> <? echo($title); ?> </title> 

     <link rel="stylesheet" type="text/css" href="<? echo($base_url); ?>/styles/some_css_file.css" media="all"/> 
     <link rel="stylesheet" type="text/css" href="<? echo($base_url); ?>styles/another_css_file.css" media="all"/> 
     <link rel="stylesheet" type="text/css" href="<? echo($base_url); ?>styles/another_css_file.css" media="all"/> 
     ... 
     ... 
     ... 

     <script type="text/javascript" src="<? echo($base_url); ?>/scripts/jquery-1.7.2.min.js"></script> 
     <script type="text/javascript" src="<? echo($base_url); ?>/scripts/some_jquery_plugin.js"></script> 
     <script type="text/javascript" src="<? echo($base_url); ?>/scripts/another_jquery_plugin.js"></script> 
     ... 
     ... 
     ... 
     </head> 

一些文件,其中包括的header.php

<? 
    $title = "some page title"; 
    include("header.php"); 
?> 

     <body> 
     PAGE CONTENTS 
     </body> 
    </html> 
+1

我建议你把['short_open_tag'(http://www.php.net/manual/en/ini.core.php#ini.short-open-tag)立即关闭,并开始使用全代替' DaveRandom

+0

我刚刚在此示例中添加了短标签,以便于阅读。我从不使用简短的开放标签来进行真实的工作。 Thx tho。 – nosx

使用HTML基础标签来定义你的网站的基础。

<base href="<?php echo $base_url; ?>" /> 
<link rel="style.css" /> 
+0

这种方法似乎很有效,并很好地清理了代码,使用这种方法我应该注意哪些警告? – nosx

+0

不是我所知道的。我使用了这种技术和我即将无耻地插入我自己的网站的技术 - http://bit.ly/MPls0E。使用该代码和基础确保所有包含的CSS/JS都正常化非常好。 – kingcoyote

+0

谢谢,我一直在测试它大约一个小时,并没有发现任何负面影响,所以我会采用这种方法,因为它比我之前做的更干净。 – nosx

这不是直接回答你的问题,但它可能会帮助你。

如果你包含许多CSS和JS文件,你应该使用Minify进行研究。 Minify会将一堆css/js文件压缩/合并成一个文件,这将大大加快网站的加载速度。

使用这可能也有助于您的路径问题,因为您可以非常容易地指定目录和组。

你可以在这里找到有关它的信息:Minify

绝对路径是走这里的路。但是,如果您有很多打印链接,可以通过将路径存储在数组中并循环访问来简化它。

$base = "http://www.example.com/" 
$links = array("styles/file1.css", "styles/file2.css", ...); 

foreach ($links as $link) { 
    echo '<link rel="stylesheet" href="' . $base . $link . '" type="text/css" media="all" />'; 
} 

作为一个方面说明,你有什么是不是很好的做法。如果您尝试将这些文件中的某些文件组合起来会更好,更高效,因为这样可以减少浏览器向您的服务器发出的HTTP请求数量。 http://developer.yahoo.com/performance/rules.html#num_http

我在我的一个项目中有同样的疑问,我已经完成了代码波纹管。由于路径以“/”开头,因此该文件将在根目录中找到,在这种情况下,不需要指定域,它将使维护变得更容易,并防止出现问题,如果您要重写URL使用(mod_rewrite)。希望它能帮助你!

<html> 
    <head> 
    <title> <? echo($title); ?> </title> 

    <link rel="stylesheet" type="text/css" href="/styles/some_css_file.css" media="all"/> 
    <link rel="stylesheet" type="text/css" href="/styles/another_css_file.css" media="all"/> 
    <link rel="stylesheet" type="text/css" href="/styles/another_css_file.css" media="all"/> 

    <script type="text/javascript" src="/scripts/jquery-1.7.2.min.js"></script> 
    <script type="text/javascript" src="/scripts/some_jquery_plugin.js"></script> 
    <script type="text/javascript" src="/scripts/another_jquery_plugin.js"></script> 
    </head> 
</html> 
+0

在我的本地服务器上试用这个WAMP似乎不适合我。不确定它如何在NIX系统上运行。 – nosx

+0

@nosx,也许这是因为你的本地环境中有一些安全设置,但检查路径是否正确。如果你[看到这个页面](http://evomaster.com.br/),请注意源代码,我完全按照我所说的使用它,它在所有浏览器中都能很好地工作。奇怪的是,我用它在本地服务器WAPP(与Postgres数据库),并正常工作。 –

+0

如果基本URL不在域的根目录下,这将不起作用。例如,如果他使用http:// localhost/site /作为其根目录,则会失败。 – kingcoyote