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