PHP Echo和包含

时间:2012-03-20 17:40:19

标签: php

当我使用以下PHP代码时:

$id = $_GET['page']; $page = include ($id.'.php'); echo $page;

返回$ id.php文件中的代码,但是附加了“1”,知道为什么会发生这种情况吗?

5 个答案:

答案 0 :(得分:2)

  • 你不应该回应那样的页面。

    include()用于将文档导入当前的工作文件。

  • 使用$page = include ($id.'.php');,您将布尔值赋给$page

    这将保留include()声明

    的成功状态
    • 如果页面加载成功,则为true,其数值为1
    • 如果加载失败,则为false,其数值为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。