当我使用以下PHP代码时:
$id = $_GET['page']; $page = include ($id.'.php'); echo $page;
返回$ id.php文件中的代码,但是附加了“1”,知道为什么会发生这种情况吗?
答案 0 :(得分:2)
你不应该回应那样的页面。
include()
用于将文档导入当前的工作文件。
使用$page = include ($id.'.php');
,您将布尔值赋给$page
这将保留include()
声明
1
0
但是,您使用的方式并非完全不正确
例如:创建页面Test.php
以在结尾处返回值
$ t =“一些文字”; 返回$ t;
然后你就可以用它来回应
echo include("test.php"); //outputs "some text"
我建议您阅读documenation获取完整指南
答案 1 :(得分:2)
include()
将返回布尔值TRUE。然后,您回显出该值,该值打印为1
。
值得注意的是:永远不要在文件系统操作中直接使用用户提供的数据($ _GET ['page'])。这是一个可怕的安全风险。你至少有.php
被追加,所以它不是一个大洞,但仍然......不要这样做。
答案 2 :(得分:1)
因为1是include()的返回码,您将保存在$ page变量中。
当你执行include()时返回$ id.php中的代码,你的'echo'唯一打印的是1
答案 3 :(得分:1)
是的!当你include
时,你只是告诉PHP解析附加文件。您设置的变量 - $page
- 只包含include()
函数的返回值。因为它是1,所以我说你成功地包含了另一个文件。
在相关的说明中,通常(意思是,几乎从不)包含基于来自用户请求的未解析参数的任意文件是个好主意。通过操纵传递给脚本的page
的值,理论上的攻击者可以让你的机器执行系统中的任何PHP文件 - 这是一个危险的命题!
答案 4 :(得分:0)
最有可能因为include会返回true或false(0或1)。实际上你包括页面内容然后echo $ page。这将打印“1”。
希望你明白了。最后不要回显$ page。只需使用include。