# 以前のバージョンからの移行

`Zend_File_Transfer` の API は日々変わっています。 `Zend_File_Transfer` やそのサブコンポーネントを 初期のバージョンから使っている方は、以下のガイドラインに従ってスクリプトを変更し、 新しい API にあわせましょう。

## 1.9 から 1.10 以降への移行

### MimeType の検証

セキュリティ上の理由から、 `MimeType`、`ExcludeMimeType`、 `IsCompressed` および `IsImage` バリデータにおけるデフォルトのフォールバック機能を無効にしました。 つまり、fileInfo 拡張モジュールあるいは magicMime 拡張モジュールがなければ、 検証が常に失敗するようになるということです。

ユーザ側から渡された HTTP フィールドを使用して入力を検証する必要がある場合は、 `enableHeaderCheck()` メソッドを使用すればこの機能を有効にできます。

#### セキュリティに関するヒント

ユーザ側から渡された HTTP フィールドに依存するのはセキュリティ上のリスクとなることに注意しましょう。 これは簡単に改ざんすることができ、悪意のあるファイルを受け取る可能性があります。

#### HTTP フィールドの使用を許可する

    // 初期化時に
    $valid = new Zend_File_Transfer_Adapter_Http(array('headerCheck' => true);

    // あるいは後から
    $valid->enableHeaderCheck();

## 1.6 から 1.7 以降への移行

### フィルタやバリデータを使用する際の変更点

`Zend_File_Transfer` のバリデータが `Zend_Config` と組み合わせて使えないという指摘がありました。 名前つき配列を使っていなかったからです。

そこで、`Zend_File_Transfer` 用のすべてのフィルタとバリデータを作り直しました。 古い構文でも動作しますがこれは非推奨となり、 設定せずに実行すると PHP の notice が発生するようになります。

次のリストは、パラメータの使用法に関する変更点をまとめたものです。

#### Rename フィルタ

- 古い形式の API: `Zend_Filter_File_Rename($oldfile, $newfile, $overwrite)`

- 新しい形式の API: `Zend_Filter_File_Rename($options)` $options には次の配列キーを使えます。 source ($oldfile と同等)、 target ($newfile と同等)、 overwrite ($overwrite と同等)

##### rename フィルタの 1.6 から 1.7 での変更点

    // 1.6 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addFilter('Rename',
                       array('/path/to/oldfile', '/path/to/newfile', true));

    // 1.7 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addFilter('Rename',
                       array('source' => '/path/to/oldfile',
                             'target' => '/path/to/newfile',
                             'overwrite' => true));

#### Count バリデータ

- 古い形式の API: `Zend_Validate_File_Count($min, $max)`

- 新しい形式の API: `Zend_Validate_File_Count($options)` $options には次の配列キーを使えます。 min ($min と同等)、 max ($max と同等)

##### count バリデータの 1.6 から 1.7 での変更点

    // 1.6 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('Count',
                          array(2, 3));

    // 1.7 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('Count',
                          false,
                          array('min' => 2,
                                'max' => 3));

#### Extension バリデータ

- 古い形式の API: `Zend_Validate_File_Extension($extension, $case)`

- 新しい形式の API: `Zend_Validate_File_Extension($options)` $options には次の配列キーを使えます。 * ($extension と同等、任意の他のキーを使用可能)、 case ($case と同等)

##### extension バリデータの 1.6 から 1.7 での変更点

    // 1.6 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('Extension',
                          array('jpg,gif,bmp', true));

    // 1.7 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('Extension',
                          false,
                          array('extension1' => 'jpg,gif,bmp',
                                'case' => true));

#### FilesSize バリデータ

- 古い形式の API: `Zend_Validate_File_FilesSize($min, $max, $bytestring)`

- 新しい形式の API: `Zend_Validate_File_FilesSize($options)` $options には次の配列キーを使えます。 min ($min と同等)、 max ($max と同等)、 bytestring ($bytestring と同等)

さらに `useByteString()` メソッドのシグネチャも変わりました。 このメソッドの使用法は、 そのバリデータが生成するメッセージでバイト文字列を使うことを想定しているかどうかを調べるだけになりました。 フラグの値を設定するには `setUseByteString()` メソッドを使用します。

##### filessize バリデータの 1.6 から 1.7 での変更点

    // 1.6 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('FilesSize',
                       array(100, 10000, true));

    // 1.7 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('FilesSize',
                          false,
                          array('min' => 100,
                                'max' => 10000,
                                'bytestring' => true));

    // 1.6 の例
    $upload->useByteString(true); // set flag

    // 1.7 の例
    $upload->setUseByteSting(true); // set flag

#### Hash バリデータ

- 古い形式の API: `Zend_Validate_File_Hash($hash, $algorithm)`

- 新しい形式の API: `Zend_Validate_File_Hash($options)` $options には次の配列キーを使えます。 * ($hash と同等、任意の他のキーを使用可能)、 algorithm ($algorithm と同等)、

##### hash バリデータの 1.6 から 1.7 での変更点

    // 1.6 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('Hash',
                       array('12345', 'md5'));

    // 1.7 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('Hash',
                          false,
                          array('hash1' => '12345',
                                'algorithm' => 'md5'));

#### ImageSize バリデータ

- 古い形式の API: `Zend_Validate_File_ImageSize($minwidth, $minheight, $maxwidth, $maxheight)`

- 新しい形式の API: `Zend_Validate_File_FilesSize($options)` $options には次の配列キーを使えます。 minwidth ($minwidth と同等)、 maxwidth ($maxwidth と同等)、 minheight ($minheight と同等)、 maxheight ($maxheight と同等)

##### imagesize バリデータの 1.6 から 1.7 での変更点

    // 1.6 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('ImageSize',
                          array(10, 10, 100, 100));

    // 1.7 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('ImageSize',
                          false,
                          array('minwidth' => 10,
                                'minheight' => 10,
                                'maxwidth' => 100,
                                'maxheight' => 100));

#### Size バリデータ

- 古い形式の API: `Zend_Validate_File_Size($min, $max, $bytestring)`

- 新しい形式の API: `Zend_Validate_File_Size($options)` $options には次の配列キーを使えます。 min ($min と同等)、 max ($max と同等)、 bytestring ($bytestring と同等)

##### size バリデータの 1.6 から 1.7 での変更点

    // 1.6 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('Size',
                          array(100, 10000, true));

    // 1.7 の例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('Size',
                          false,
                          array('min' => 100,
                                'max' => 10000,
                                'bytestring' => true));

## 1.6.1 から 1.6.2 以降への移行

### バリデータを使う際の変更点

`Zend_File_Transfer` のバリデータが `Zend_Form` のデフォルトのものと同じようには動作しないという指摘がありました。 `Zend_Form` では `$breakChainOnFailure` パラメータを利用でき、検証エラーが発生した際に それ以降のバリデータを動作させないようにすることができます。

そこで、`Zend_File_Transfer` の既存のバリデータにもこのパラメータを追加することにしました。

- 古い形式の API: `addValidator($validator, $options, $files)`.

- 新しい形式の API: `addValidator($validator, $breakChainOnFailure, $options, $files)`.

既存のスクリプトを新しい API に移行するには、バリデータの定義の後に `FALSE` を追加します。

#### ファイルバリデータを 1.6.1 から 1.6.2 に移行する方法

    // 1.6.1 での例
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('FilesSize', array('1B', '100kB'));

    // 同じ例を 1.6.2 以降用にしたもの
    // boolean false が追加されていることに注意しましょう
    $upload = new Zend_File_Transfer_Adapter_Http();
    $upload->addValidator('FilesSize', false, array('1B', '100kB'));