我始终确保PHP函数file_get_contents
和readfile
在任何文件中执行任何PHP代码 - 无论文件类型如何 - 都是给它的。我在多个设置上尝试了这个,它总能工作。
我收到了有关此here的问题,用户似乎认为情况并非如此。
我查看了PHP文档中的函数,并没有提到代码执行(如果通常情况下这是我期望的,因为它具有严重的安全隐患)。
我也搜索过它,并发现很多声称这些函数不执行PHP代码。例如:
readfile不会执行服务器上的代码,因此没有问题。 source
搜索" php file_get_contents代码执行"还会返回尝试执行检索到的PHP代码的各种问题,如果它确实通常会执行任何给定的PHP代码,这似乎很奇怪。
我还发现one question询问不执行PHP代码,因此执行似乎也会发生在其他人身上。
所以我的问题是:
file_get_contents
和readfile
在检索到的文件中执行PHP代码? 答案 0 :(得分:8)
file_get_contents
和readfile
不执行代码。他们只是返回文件的原始内容。这可以是文本,PHP代码,二进制(例如图像文件)或其他任何东西。根本没有对文件内容的解释。
可能出现的唯一情况就像执行一样:
<?php ?>
标记可能会被浏览器隐藏,因为它试图将它们解释为HTML标记,因此这可能会导致PHP消失,因此可能已被执行。http://example.com/foo.php
阅读时。在这种情况下,这些函数与在Web浏览器中访问这些URL具有相同的效果:服务Web服务器正在执行PHP代码并返回结果,但file_get_contents
仅获取该结果并将其返回。答案 1 :(得分:6)
这些函数在本手册的«函数参考/文件系统相关扩展/文件系统»部分中描述,而执行代码的函数在«函数参考/过程控制扩展中描述»
我很确定这种误解来自文件系统和网络之间的某种广泛的混淆,而且PHP流功能提供了更糟糕的功能,它提供了允许使用相同功能透明地打开任何类型资源的协议包装器:本地文件,网络资源,压缩档案等。我在这里看到无数的帖子,有人做这样的事情:
file_get_contents('http://example.com/inc/database.inc.php');
...并且想知道为什么他看不到这个数据库连接。答案很清楚:你没有加载文件,你正在获取一个URL。结果,database.inc.php
内的代码得到了有效执行......而非间接执行。