3

$_POST および $_FILES 変数を変更する PHP モジュールを作成したいと思います。目標は、モジュール内で前処理を行うことです。たとえば、入力を正規化し、特定の拡張機能を使用しないようにします。

これは可能ですか?$_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

データを「正規化」することは、非常にコンテキスト固有になる可能性が高いため、提案していることはお勧めしません。

ただし、本当にそうしたい場合は、連想配列 ($_FILES、$_POST) を取り、必要に応じてそれらを変更し、必要なデータを含む新しい連想配列を返す関数を作成することをお勧めします。ファイルをその場所 ( ) から移動することを忘れないでください$_FILES['file1']['tmp_name']

しかし、ええ、モジュール全体を書くのは冗長に思えます。そうしないでください。:P

于 2012-09-19T23:09:11.533 に答える