PHP模块修改$ _POST,$ _FILES

时间:2012-09-19 21:36:15

标签: php zend-framework cakephp zend-form

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

这可能吗?似乎you can't modify the $_FILES variable但是,如果您有扩展程序,则可以modify these variables during the RINIT phase

我该怎么做?

编辑:澄清

我认为规范化数据不是一个很好的例子。我更感兴趣的是如何完成它并学习更多有关PHP和模块的知识。

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

2 个答案:

答案 0 :(得分:1)

也许最好封装"请求"作为对象(PO​​ST / 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
  }

答案 1 :(得分:0)

'规范化'您的数据可能会特定于上下文,因此我不建议您推荐的内容。

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

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