【问题标题】:Alternatives to using absolute paths in included php files在包含的 php 文件中使用绝对路径的替代方法
【发布时间】:2012-06-22 21:41:19
【问题描述】:

我有一个名为“header.php”的文件,我在我网站的每个页面上都包含该文件,该文件包含指向我服务器上其他文件的链接,如 css 文件、jquery 插件等。现在我正在使用这些链接的绝对路径,因此它们将使用与 header.php 文件不在同一目录中的文件,这有效,但正如您在下面的示例中看到的那样,如果您的标题,事情开始变得非常难以管理.php 文件包含很多链接(我的有),所以我想知道是否有其他替代方法可以像我在这里所做的那样在 header.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>

【问题讨论】:

  • 我建议你立即关闭 short_open_tag 并开始使用完整的 &lt;?php 标签。您正在编写不太便携的代码...
  • 我只是在此示例中添加了短标签,以使其更易于阅读。在我的实际工作中,我从不使用简短的开放标签。谢谢。

标签: php include absolute-path


【解决方案1】:

使用 HTML 基础标记来定义您网站的基础。

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

【讨论】:

  • 此方法似乎工作并很好地清理了代码,使用此方法有什么需要注意的警告吗?
  • 我不知道。我结合了这个和我即将无耻地插入我自己的网站的技术 - bit.ly/MPls0E。使用该代码和基础非常有助于确保所有包含的 CSS / JS 都被规范化。
  • 谢谢,我已经测试了大约一个小时,没有发现任何负面影响,所以我会使用这种方法,因为它比我以前的方法更干净。跨度>
【解决方案2】:

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

$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

【讨论】:

    【解决方案3】:

    我在我的一个项目中也有同样的疑问,我已经按照下面的代码完成了。由于路径以“/”开头,文件将在根目录中找到,在这种情况下不需要指定域,如果您要重写 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>
    

    【讨论】:

    • 在我的本地服务器 WAMP 上尝试这个似乎对我不起作用。不确定它如何在 NIX 系统上工作。
    • @nosx,可能是因为您本地环境中的一些安全设置,但请检查路径是否正确。如果你see this page,请注意源代码,我已经完全按照我所说的那样使用它,它在所有浏览器中都能完美运行。奇怪的是我已经在本地服务器 WAPP(带有 Postgres 数据库)中使用它并且工作正常。
    • 如果基本 URL 不在域的根目录中,这将不起作用。例如,如果他使用localhost/site 作为他的根,它会失败。
    • @kingcoyote,只需分析正确的路径,但它应该可以工作。
    • 如果您分析正确的路径并将所有路径添加到前面,您最终会得到问题试图避免的内容。此答案假定该站点必须位于根域,并且根据 nosx 对此答案的评论,我认为情况并非如此。
    【解决方案4】:

    这不是您问题的直接答案,但它可能会对您有所帮助。

    如果你要包含这么多的 css 和 JS 文件,你应该考虑使用 Minify。 Minify 将获取一堆 css/js 文件并将它们压缩/组合成一个文件,这将大大加快您网站的加载速度。

    使用它还可以帮助您解决路径问题,因为您可以非常轻松地指定目录和组。

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

    【讨论】:

      猜你喜欢
      • 2014-05-19
      • 2015-11-08
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 1970-01-01
      • 2013-07-13
      • 1970-01-01
      相关资源
      最近更新 更多