我编写以下代码
<?php
if ($id = mysql_real_escape_string(@$_GET['pid'])
&& $uid = mysql_real_escape_string(@$_GET['file']))
echo include "foo.php";
else
echo include "bar.php";
?>
Run Code Online (Sandbox Code Playgroud)
当我将include函数与设计用于输出到页面的函数结合使用时(例如,或echo包含'foo.php'),它返回include,但在包含的内容后面带有"1".
小智 23
echo include "foo.php"
Run Code Online (Sandbox Code Playgroud)
应该
include 'foo.php';
Run Code Online (Sandbox Code Playgroud)
小智 6
请注意,在使用不带echo的include时也会发生这种情况:
<?= include 'foo.php'; ?>
Run Code Online (Sandbox Code Playgroud)
在脚本中使用时,这也将打印出返回值1.要摆脱这种情况,您需要删除语句中的'='符号,如下所示:
<? include 'foo.php'; ?>
Run Code Online (Sandbox Code Playgroud)
PHP现在将打印出没有返回值的文件内容.
好吧,所以这里的答案实际上并不完全正确;在某种意义上甚至是误导。
include获取文件的内容并将它们放在上下文中。更常见的用途之一是传递变量范围,即。通过将范围变量包含在处理程序中并include在视图上使用来在视图中传递范围变量。常见,但也有其他用途;你也可以return在一个included文件里面。
假设你有一个这样的文件:
<?php return array
(
'some',
'php'
'based'
'configuration',
'file'
); # config
Run Code Online (Sandbox Code Playgroud)
这样做$config = include 'example-config-above.php';非常好,您将在$config变量中获得上面的数组。
如果您尝试包含一个没有return声明的文件,那么您将获得1.
陷阱时间
您可能认为这include 'example-config-above.php';实际上是在调用 的文件所在的目录中搜索文件include,好吧,但它也在各种其他路径中搜索文件,而这些其他路径优先于本地路径!
所以,如果你知道你有一个像上面这样的文件,return里面有一个,但1可能会出现奇怪的 PEAR 错误之类的东西,那么你可能已经做了这样的事情:
// on a lot of server setups this will load a random pear class
include 'system.php'
Run Code Online (Sandbox Code Playgroud)
由于它正在加载一个没有返回的文件,因此您将获得1(在我们的示例中)而不是我们期望的配置数组。
简单的修复当然是:
include __DIR__.'/system.php'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9212 次 |
| 最近记录: |