【发布时间】:2013-03-06 02:38:42
【问题描述】:
我有以下 PHP 脚本:
<?php
function dump_extracted_post() {
extract($_POST);
var_dump(get_defined_vars());
}
dump_extracted_post();
?>
对于这个脚本,我发布了一个包含一些数据的表单,它会产生以下(意外)结果:
Array(0) {
}
为什么我看不到发布的数据?
我对 extract() 或 get_defined_vars() 的理解是否遗漏了什么?是否有某种安全设置可能会干扰从 $_POST 中提取?
我知道提取的性质令人不悦,所以这可能是一个安全问题,但扫描 php 文档似乎没有提到任何此类问题。我想用它来做一些简单的模板。
如果我将脚本更改为:
<?php
function dump_extracted_post() {
var_dump($_POST);
}
dump_extracted_post();
?>
我按预期看到了发布的数据(所以是的,我肯定在发布数据)。
同样,如果我将脚本更改为:
<?php
function dump_extracted_post() {
$a = 'moocows';
var_dump(get_defined_vars());
}
dump_extracted_post();
?>
我看到了预期的输出:
array(1) {
["a"]=>
string(7) "moocows"
}
【问题讨论】:
-
你的函数在我的本地主机上运行良好。您是否检查过您的服务器上是否禁用了
extract()? -
是的,它已启用并正常工作:
extract(array('a'=>'b')); var_dump(get_defined_vars());按我的预期工作......(只是当我用 $_POST 替换数组时不是这样)。运行 PHP 5.3.2。 -
您的原始功能也适用于我。请出示您的 HTML 表单好吗?