2013-03-14 43 views
1

我读过这么多不同的输入,所以我想我会问这里。使用包含内部的完整链接是错误的吗?

有什么问题或危险有关使用PHP里面全环节包括哪些内容?

实例,

<?php include('http://www.domain.com/blah.php'); ?> 


<?php 
define('WEB_ROOT', './'); // relative path to/
include('layout.php'); 
?> 

相比于使用

<?php 
include('../blah.php'); 
?> 
+0

如果你在同一个项目中,并包括同一个项目的文件,他们为什么会使用完整的网址? – ripa 2013-03-14 06:55:54

+0

我们需要使用文档根目录路径文件包括未根目录路径 – 2013-03-14 06:56:30

+0

我更喜欢'包括(目录名(__ FILE __)“/ layout.php中”);' – 2013-03-14 06:58:54

回答

2

include('http://www.domain.com/blah.php')熄灭,使实际的HTTP请求发送到web服务器,返回URL的内容的web服务器已处理后它们就像您在浏览器中输入该网址时看到的一样。

include('../blah.php')包括从磁盘一个目录更高的本地文件。

两者是完全不同的事情,你做要包括URL时,你的意思是包括本地文件。即使这两个文件应该是相同的文件,PHP也无法知道这一点。访问URL和访问本地文件路径是完全不同的事情。无法推断两者是相同的。

+0

我很欣赏你的细节,因为它现在在两者之间有意义。我总是很好奇真正的区别。现在,要验证你的答案和其他答案,说完整的网址是危险的...是define('WEB_ROOT','./');包括( './ layout.php中');就像完整的url一样危险,还是仍在拉本地文件?我将使用多个目录,用户可以实际创建目录,这就是为什么我想要使用某种在整个站点中通用的路径,而不是使用../../来返回目录。 – kdjernigan 2013-03-14 09:16:38

+0

只要路径不以'http://'或其他*协议*开始,它始终是本地路径。所以定义一个常量是好的,但是你应该定义一个* absolute *路径,比如'define('ROOT',dirname(__ FILE__)。DIRECTORY_SEPARATOR)'。更好的选择是使用基于类的编程和自动加载。这对保持代码组织起来更好,并且让你完全不用考虑包含路径。 – deceze 2013-03-14 09:29:22

+0

你有自动加载引用类的例子的链接?以前从未这样做过。 – kdjernigan 2013-03-14 10:26:29

0

<?php include('http://www.domain.com/blah.php'); ?>是很危险的,你可以不知道100%是什么,你会得到的代码!因为PHP做HTTP请求,有人可以做ManInTheMiddel攻击,并改变你将得到的代码,并破解你的网站。

+0

如此完整的网址是坏的...但像define('WEB_ROOT','./');包括( './ layout.php中');会工作,并没有危险的方式是正确的? – kdjernigan 2013-03-14 09:13:48

相关问题