3

我想编写一个 PHP 模块来修改 $_POST 和 $_FILES 变量。目标是在模块中进行预处理,例如,规范化输入,不允许具有某些扩展名的文件。

这可能吗?您似乎无法修改 $_FILES 变量,但是,如果您有扩展名,则可以在 RINIT 阶段修改这些变量

我怎样才能做到这一点?

编辑:澄清

我想规范化数据不是一个很好的例子。我对如何完成它更感兴趣,并更多地了解 PHP 和模块。

例如,有一个重新组织 $_files 的函数。我认为编写一个可以自动执行此操作的模块会很有趣,就像学术练习一样,并且正在寻找从哪里开始的指针。

4

2 回答 2

1

也许将“请求”封装为带有(POST/GET 甚至 FILES 等)的对象会更好。然后只引用这个对象而不是单个变量范围。

这将允许您创建所述对象的新实例并执行您选择的任何方法,或者在整个“模块”中的客户端代码中使用它(您也可以修改/规范化它)。另外,这样做的时候不需要修改超模。

非常快速的插图,可以很容易地扩展:

  class Request
  {
    protected $params = array();

    public function __construct()
    {
      return $this;
    }

    public function getParam($key)
    {
      if (isSet($_params[$key])) {
        return $_POST[$key];
      } else if (isSet($_GET[$key])) {
        return $_GET[$key];
      } else if ($_POST[$key]) {
        return $_POST[$key];
      } else if ($_FILES[$key]) {
        // do something special with files here
      }
    }

    public function setParam($key, value);

    public function getParams();

    public function getPostParams();

    ...etc...etc
  }
于 2012-09-21T00:34:01.307 回答
0

“规范化”您的数据可能会非常具体,因此我不会推荐您的建议。

但是,如果您真的想这样做,我建议您编写一个函数,该函数采用 assoc 数组 ($_FILES, $_POST) 并根据需要修改它们,并返回一个包含所需数据的新 assoc 数组。不要忘记将文件从其位置 ( $_FILES['file1']['tmp_name']) 移动。

但是,是的,编写一个完整的模块似乎是多余的。不要这样。:P

于 2012-09-19T23:09:11.533 回答