PHP包含完整URL(或网站)

PHP包含完整URL(或网站),php,url,include,Php,Url,Include,我正在尝试做一些我认为很简单但看起来不那么简单的事情 我想要的是能够在我的PHP代码中包含一个单独的网站。基本上,这是因为我正在写一个“主页”,上面有链接,而我的链接下面是同一页面中的“包含”网站。原因是,我只是在为我的所有用户建立一个简单的“主要”位置,让他们能够使用我们的工具。问题是,我们的工具跨越了其他几个网站(都是我们网络的本地和内部)。在PHP中,我不确定您能否做到这一点,而“做到这一点”的方法是使用file\u get\u contents()获取远程站点的内容: 这个解决方案的

我正在尝试做一些我认为很简单但看起来不那么简单的事情

我想要的是能够在我的PHP代码中包含一个单独的网站。基本上,这是因为我正在写一个“主页”,上面有链接,而我的链接下面是同一页面中的“包含”网站。原因是,我只是在为我的所有用户建立一个简单的“主要”位置,让他们能够使用我们的工具。问题是,我们的工具跨越了其他几个网站(都是我们网络的本地和内部)。在PHP中,我不确定您能否做到这一点,而“做到这一点”的方法是使用
file\u get\u contents()
获取远程站点的内容:


这个解决方案的问题是,所有对CSS文件的包含和引用现在都被破坏了,因为我相信,使用
file\u get\u contents()
它只会带来本应生成的源代码,因此链接CSS代码将丢失,并将继承当前页面使用的CSS


这几乎就像我希望它像iframe一样工作,但我不想使用iframe,我只想能够将远程“网站”包含在与前端相同的页面中。

一般来说,解决方案是解析源代码并自行修复链接。尽管我仍然倾向于使用iFrame,但这正是iFrame的用处。

事实上,我自己也能解决这个问题。虽然这不是很好的PHP实践/安全性,但我在PHP.ini中启用了
allow\u url\u include
,这解决了问题。再次强调,这可能是过去的做法,但是,包含的URL是我们组织内部的简单网站/URL,在我们的网络之外也无法访问。

您必须重写所有其他页面,以拥有指向其所有包含资源的绝对链接[css、js等],除此之外,您可以非常透明地编辑iFrame,看看我在哪里做了一些jQuery魔术,在点击事件上附加页面,而您却不知道它们在iframe中。


<HTML>
<HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <META http-equiv="Cache-Control" content="no-cache">
     <meta http-equiv="Description" name="Description" content="">
     <meta http-equiv="Keywords" name="Keywords" content="">
     <TITLE>Title</TITLE>
</HEAD>
<FRAMESET rows="*,0">
    <FRAME src="http://url/folder" frameborder="0" noresize>
    <NOFRAMES>
       Your browser does not support frames.
    </NOFRAMES>
</FRAMESET>
</HTML>
标题 您的浏览器不支持框架。
但是你为什么不喜欢iFrame呢?它们符合你的目的。如果你获取内容,你将获取整个文档(正如你所指出的,没有进一步引用的文件),包括你不能简单地在主文档中呼出的部分(“HTML”、“META”、“TITLE”等等)。哎哟!如何确保CSS和脚本只影响其“原始”作用域?如果这些都在您的本地网络上,那么您可以在不需要HTTP请求的情况下执行包含,只需通过网络(非HTTP)加载代码即可重用代码。你所做的不仅仅是不好的实践,还有低效、不可维护和不安全。这不是一个非常优雅的解决方案,但可以用于简单的事情。更好的方法是,看看LinkedIn的iframe和Javascript。我个人不会在网站上使用iframe,它们对搜索引擎没有好处,而且iframe src可能可以在谷歌上作为自己的网页进行索引。(我知道这是一个非常古老的帖子,但刚刚在谷歌的一些相关搜索中找到了它,所以我想指出这一点)@LaurenceCope这是一个相当愚蠢的论点,因为OP谈论的是一个不会被索引的内联网网站。我最初没有看到任何关于“内联网”的引用,但现在重新阅读我可以看到“(所有本地和我们网络的内部)“因此,假设它们不可公开访问,那么应该可以。此外,如果它们已经是可索引的网站,那么它无论如何都不会有问题。我有一个iframe源被自己索引的确切问题,我不想这样做(例如,菜单边栏)。已尝试删除我的反对票,但Stackoverflow在编辑您的答案之前不允许我!可能添加一条声明,说明它适用于私人页面,或已无法修改的页面,然后我可以删除我的反对票,也可能删除向上投票。
<HTML>
<HEAD>
    <META http-equiv="Content-Type" content="text/html; charset=UTF-8">
     <META http-equiv="Cache-Control" content="no-cache">
     <meta http-equiv="Description" name="Description" content="">
     <meta http-equiv="Keywords" name="Keywords" content="">
     <TITLE>Title</TITLE>
</HEAD>
<FRAMESET rows="*,0">
    <FRAME src="http://url/folder" frameborder="0" noresize>
    <NOFRAMES>
       Your browser does not support frames.
    </NOFRAMES>
</FRAMESET>
</HTML>