【发布时间】:2011-05-08 03:33:59
【问题描述】:
有几个我想包含在“父”文件中的 html sn-ps。
父文件包含相对路径。
这些 sn-ps 还包含相对路径,相对于它们的位置,而不是相对于它们将被包含到的文件。
例如,一个 sn-p 是标题,站点上的所有页面都通用。
<div style='background:url(img/bg.jpg)'>
<img src='img/logo.png'>
</div>
这将被插入到现有页面中,如下所示:
<div style='background:url(img/gradient.jpg)'>
<?php include '../includes/header.txt'; ?>
</div>
示例非常简化,实际文件有很多路径。
我无法控制将要包含的文件。
这意味着我无法将 PHP 变量添加到 url。
我也无法以任何方式使路径成为绝对路径。
对于包含的文件 - 因为我无法控制 html。
对于所有文件 - 因为最终页面是在多台机器上开发的,并且必须在 http://www.mysite/myfile、http://localhost/mysite/myfile 甚至 http://127.0.0.1/~/anyuser/ 上工作...
我的一些想法:
-
php include:
include '../includes/header.txt';- 相对于包含它的文件的路径。
- 将每个 sn-p 包含为 iFrame:
- 页面布局对 iFrame 不太友好。除了搜索引擎优化和页面加载问题。
- 使用解析器解析页面并替换所有路径。
- 页面不是 100% 有效的 HTML(无法控制它们)并且解析器咳嗽并翻滚死了。除了荒谬的服务器负载。
- 使用base tags
- 在每个真正的浏览器中都能完美运行。
但是 Internet Explorer 7、8 和 9 只是忽略了基本标记(在头部之外)。 一个基本标记可以在头部声明,但是页面上的所有其他路径(可能在 CSS 文件中)都将是错误的。
- 在每个真正的浏览器中都能完美运行。
BaseTag 用法:
<?php
echo "<base href='$path_to_includes_folder' />";
include '../includes/header.txt';
echo "<base href='$path_based_on___file__' />";
?>
据我了解,这正是创建基本标记的原因,并且每个体面的浏览器都支持该标记 - 这样我们就可以在一个 HTML 文件的中间告诉浏览器我即将包含第二个 HTML 文件,并且所有路径都应相对于新位置。这在 IE6 中运行良好,我认为放弃对它的支持一定有一些逻辑。一些从 Opera、Webkit 和 Mozilla 中逃脱的逻辑。 我能找到的关于这个主题的唯一帖子称赞微软放弃了支持,甚至没有给出任何理由放弃支持对于某些公认的标准(正在使用)在当时的所有浏览器中)并且有用是一件好事。
现在,我讨厌为 IE 开发热情,但不能忽视它。他们仍然拥有近 1/3 的用户!
那么,如何用相对路径包含php sn-ps,并保持它们相对于被包含的文件?
谁能告诉我是否有任何原因 MS 放弃了基础支持,或者可以做些什么来帮助恢复它?
【问题讨论】:
-
为什么要将基本标签放在除了头部之外的任何地方?您想包含相关的 PHP 脚本(服务器端)还是图像(客户端)?你的问题不是很清楚。
-
我觉得你的问题不是很清楚,但似乎与 include() 或 PHP 没有任何关系。 include() 语句的结果与将包含文件的内容粘贴在源文件中的该点相同。所以想象一下这个 HTML 一开始就在那里,而你没有使用 include()。现在您的问题与 include() 无关,只是要弄清楚您希望如何处理应用程序中的路径。也许你应该为项目中更高级别的图像定义一个基本 URL,并在你的 CSS 中使用它。
-
@Phil - 我正在尝试包含其中包含图像、javascript 或 CSS 文件路径的 html。我将基本标记放置在包含的内容之前的原因是,包含的内容与页面的其余部分具有不同的根,这是相对于位置对象的。如果我将基本标签放在头部,它会使页面上的所有路径都相对于其他位置......我为什么要这样?
-
@Dan Grossman - 问题不在于 PHP 的 include();这是如何使用 PHP 包含一个 sn-p,同时以某种方式保持该 sn-p 中的路径有效。也许是为了理解为什么应该放弃以前接受的机制。没有办法只为图像重新定义基本 URL,但即使有,它也会删除与页面相关的所有图像。作为第三个问题,为什么这不正常 - 我有很多用处将一次编写为 HTML 并在需要的地方包含它。
-
@SamGoody - 基本标签是并且始终只允许在头部部分。它使用影响
href和src属性中的所有相对路径。如果这不足以满足您的需求(图像和 JS 的不同基础),您将需要手动更新您的 relative 路径。
标签: php html include relative-path