我想编写一个PHP模块来修改$ _POST和$ _FILES变量。目标是在模块中进行预处理,例如,规范输入,不允许具有特定扩展的fies。
这可能吗?似乎you can't modify the $_FILES variable但是,如果您有扩展程序,则可以modify these variables during the RINIT phase。
我该怎么做?
编辑:澄清
我认为规范化数据不是一个很好的例子。我更感兴趣的是如何完成它并学习更多有关PHP和模块的知识。
例如,有一个function that reorganizes $_files。我认为编写一个自动执行此操作的模块会很有趣,就像学术练习一样,并且正在寻找从哪里开始的指针。
答案 0 :(得分: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
}
答案 1 :(得分:0)
'规范化'您的数据可能会特定于上下文,因此我不建议您推荐的内容。
但是,如果您真的想要,我建议编写一个带有assoc数组($ _FILES,$ _POST)的函数并根据需要修改它们,并返回一个包含所需数据的新assoc数组。不要忘记将文件从其位置移动($_FILES['file1']['tmp_name']
)。
但是,编写整个模块似乎是多余的。不要这样吧。 :P