1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20774 -->
4 <sect1 id="zend.file.transfer.validators">
6 <title>Zend_File_Transfer 用のバリデータ</title>
9 <classname>Zend_File_Transfer</classname> にはファイル関連のバリデータがいくつか同梱されています。
10 これらを使用してセキュリティを向上させ、攻撃から身を守るようにしましょう。
11 バリデータは、それを使ってこそ役に立つものなのですから。
12 <classname>Zend_File_Transfer</classname> が提供するバリデータは
13 <classname>Zend_Validator</classname> コンポーネントに含まれ、
14 <classname>Zend_Validate_File_*</classname> という名前がついています。
21 <code>Count</code>: このバリデータはファイルの数をチェックします。
22 最小値と最大値を指定し、そのいずれかに違反した場合にエラーをスローします。
28 <code>Crc32</code>: このバリデータはファイルの内容の crc32 ハッシュ値をチェックします。
29 <code>Hash</code> バリデータをもとにしたもので、
30 Crc32 のみをサポートする便利でシンプルなバリデータを提供します。
36 <code>ExcludeExtension</code>: このバリデータはファイルの拡張子をチェックします。
37 渡されたファイルの拡張子が定義済みのものだった場合にエラーをスローします。
38 これにより、特定の拡張子だけを除外できるようになります。
44 <code>ExcludeMimeType</code>: このバリデータはファイルの <acronym>MIME</acronym> 型をチェックします。
45 <acronym>MIME</acronym> 型の種類を検証し、指定したファイルの <acronym>MIME</acronym>
46 型がそれと一致するときにエラーをスローします。
52 <code>Exists</code>: このバリデータはファイルの存在をチェックします。
53 指定したファイルが存在しない場合にエラーをスローします。
59 <code>Extension</code>: このバリデータはファイルの拡張子をチェックします。
60 渡されたファイルの拡張子が未定義のものだった場合にエラーをスローします。
66 <code>FilesSize</code>: このバリデータはすべてのファイルのサイズをチェックします。
68 その合計が制限値を超えた場合にエラーをスローします。
75 <code>ImageSize</code>: このバリデータは画像のサイズをチェックします。
76 幅と高さについて、最小値と最大値を検証できます。
82 <code>IsCompressed</code>: このバリデータはファイルが圧縮されているかどうかをチェックします。
83 <code>MimeType</code> バリデータにもとづいて、
84 zip や arc といった圧縮アーカイブ形式かどうかを判断します。
85 特定のアーカイブ形式のみに制限することもできます。
91 <code>IsImage</code>: このバリデータはファイルが画像であるかどうかをチェックします。
92 <code>MimeType</code> バリデータにもとづいて、
93 jpg や gif といった画像ファイルであるかどうかを判断します。
94 特定の画像形式のみに制限することもできます。
100 <code>Hash</code>: このバリデータはファイルの内容のハッシュ値をチェックします。
107 <code>Md5</code>: このバリデータはファイルの内容の md5 ハッシュ値をチェックします。
108 <code>Hash</code> バリデータをもとにしたもので、
109 Md5 のみをサポートする便利でシンプルなバリデータを提供します。
115 <code>MimeType</code>: このバリデータはファイルの <acronym>MIME</acronym> 型をチェックします。
116 <acronym>MIME</acronym> 型の種類を検証し、指定したファイルの <acronym>MIME</acronym>
117 型がそれと一致しないときにエラーをスローします。
123 <code>NotExists</code>: このバリデータはファイルの存在をチェックします。
124 指定したファイルが存在する場合にエラーをスローします。
130 <code>Sha1</code>: このバリデータはファイルの内容の sha1 ハッシュ値をチェックします。
131 <code>Hash</code> バリデータをもとにしたもので、
132 sha1 のみをサポートする便利でシンプルなバリデータを提供します。
138 <code>Size</code>: このバリデータは各ファイルのサイズをチェックします。
139 最小値と最大値を指定し、そのいずれかに違反した場合にエラーをスローします。
145 <code>Upload</code>: このバリデータは内部的に使用するもので、
146 アップロード時に何らかの問題が発生していないかどうかをチェックします。
147 自分でこれを設定してはいけません。これは、
148 <classname>Zend_File_Transfer</classname> 自身が自動的に設定します。
149 ですので、このバリデータのことは忘れてしまってもかまいません。
150 ただ、そういうバリデータが存在することだけを覚えておきましょう。
156 <code>WordCount</code>: このバリデータはファイル内の単語数をチェックします。
157 最小値と最大値を指定し、そのいずれかに違反した場合にエラーをスローします。
162 <sect2 id="zend.file.transfer.validators.usage">
163 <title>Zend_File_Transfer でのバリデータの使用法</title>
167 バリデータを追加したり操作したりするには、次のメソッドを使用します。
173 <methodname>isValid($files = null)</methodname>:
174 指定したファイルがすべてのバリデータを使用したかどうかを調べます。
175 <code>$files</code> には、実際のファイル名あるいは要素名、
182 <code>addValidator($validator, $breakChainOnFailure, $options = null, $files =
183 null)</code>: 指定したバリデータをバリデータスタックに追加します
184 (オプションで、指定したファイルにだけ追加することもできます)。
185 <code>$validator</code> に指定するのは、
186 バリデータのインスタンスかあるいはバリデータの型の短い名前
193 <code>addValidators(array $validators, $files =
194 null)</code>: 指定した複数のバリデータをバリデータスタックに追加します。
195 各エントリは、バリデータの型とオプションのペアか
196 あるいはキー 'validator' を持つ配列となります
197 (配列の場合、バリデータのオプションはインスタンスの作成時に設定するものとします)。
203 <code>setValidators(array $validators, $files =
204 null)</code>: 既存のバリデータを、指定したバリデータで上書きします。
205 バリデータの指定方法は <methodname>addValidators()</methodname>
212 <methodname>hasValidator($name)</methodname>:
213 バリデータが登録されているかどうかを調べます。
219 <methodname>getValidator($name)</methodname>:
226 <methodname>getValidators($files = null)</methodname>:
227 登録されているバリデータを返します。<code>$files</code>
228 を渡すと、そのファイルに関連するバリデータを返します。
234 <methodname>removeValidator($name)</methodname>:
241 <methodname>clearValidators()</methodname>:
242 登録されているすべてのバリデータを消去します。
247 <example id="zend.file.transfer.validators.usage.example">
248 <title>ファイル転送用のバリデータの追加</title>
250 <programlisting language="php"><![CDATA[
251 $upload = new Zend_File_Transfer();
253 // ファイルサイズを 20000 バイトに設定します
254 $upload->addValidator('Size', false, 20000);
256 // ファイルサイズの最小値を 20 バイト、最大値を 20000 バイトに設定します
257 $upload->addValidator('Size', false, array('min' => 20, 'max' => 20000));
259 // ファイルサイズの最小値を 20 バイト、最大値を 20000 バイトに設定し、
261 $upload->setValidators(array(
262 'Size' => array('min' => 20, 'max' => 20000),
263 'Count' => array('min' => 1, 'max' => 3),
268 <example id="zend.file.transfer.validators.usage.exampletwo">
269 <title>特定のファイルに対してのみのバリデータの適用</title>
272 <methodname>addValidator()</methodname>、<methodname>addValidators()</methodname> および
273 <methodname>setValidators()</methodname> は、それぞれ最後の引数
274 <code>$files</code> を指定できます。
275 この引数にはファイル名あるいはファイル名の配列を指定し、
276 指定したファイルに対してのみバリデータを設定します。
279 <programlisting language="php"><![CDATA[
280 $upload = new Zend_File_Transfer();
282 // ファイルサイズを 20000 バイトとし、それを 'file2' にのみ適用します
283 $upload->addValidator('Size', false, 20000, 'file2');
288 一般的には、単純に <methodname>addValidators()</methodname>
293 <example id="zend.file.transfer.validators.usage.examplemultiple">
294 <title>複数のバリデータの追加</title>
297 単に <methodname>addValidator()</methodname> を複数回コールするほうがシンプルに書けます。
298 個々のバリデータごとにコールするというわけです。
299 これはコードの可読性も向上させ、保守性もあがります。
300 すべてのメソッドは流れるようなインターフェイスを提供しているので、
301 複数回のコールは以下のように書くことができます。
304 <programlisting language="php"><![CDATA[
305 $upload = new Zend_File_Transfer();
307 // ファイルサイズを 20000 バイトに設定します
308 $upload->addValidator('Size', false, 20000)
309 ->addValidator('Count', false, 2)
310 ->addValidator('Filessize', false, 25000);
317 同じバリデータを複数回設定することもできます。
319 同じバリデータに異なるオプションを設定したときにおかしなことになるので注意しましょう。
324 最後に、単純にファイルをチェックするには <methodname>isValid()</methodname> を使用します。
327 <example id="zend.file.transfer.validators.usage.exampleisvalid">
328 <title>ファイルの検証</title>
331 <methodname>isValid()</methodname> には、
332 アップロードあるいはダウンロードされるファイル名だけでなく、
333 テンポラリファイル名やフォーム要素の名前を指定することもできます。
334 パラメータを省略したり null を指定したりした場合は、
338 <programlisting language="php"><![CDATA[
339 $upload = new Zend_File_Transfer();
341 // ファイルサイズを 20000 バイトに設定します
342 $upload->addValidator('Size', false, 20000)
343 ->addValidator('Count', false, 2)
344 ->addValidator('Filessize', false, 25000);
346 if ($upload->isValid()) {
355 <methodname>isValid()</methodname> は、
356 ファイルを受け取った際にそれまでコールされていなければ自動的にコールされることに注意しましょう。
361 検証に失敗した場合は、何が問題だったのかについての情報を取得したくなることでしょう。
362 <methodname>getMessages()</methodname> を使うとすべての検証メッセージを配列で取得できます。
363 また <methodname>getErrors()</methodname> はすべてのエラーコードを返し、
364 <methodname>hasErrors()</methodname> は検証エラーが見つかった時点で <constant>TRUE</constant> を返します。
369 <sect2 id="zend.file.transfer.validators.count">
370 <title>Count バリデータ</title>
373 <code>Count</code> バリデータは、
381 <code>min</code>: 転送するファイル数の最小値。
387 このバリデータを最初にコールした際にファイル数の最小値を指定する必要があります。
393 このオプションで、受け取りたいファイル数の最小値を指定できます。
399 <code>max</code>: 転送するファイル数の最大値。
403 このオプションで、受け取りたいファイル数を制限できます。
404 それだけでなく、フォームで定義されている以上の数のファイルを送られるなどの攻撃を防ぐこともできます。
410 文字列あるいは整数値を指定してインスタンス化すると、その値は
411 <code>max</code> とみなされます。あるいは、後から <methodname>setMin()</methodname> や
412 <methodname>setMax()</methodname> でオプションを設定することもできますし、
413 <methodname>getMin()</methodname> や <methodname>getMax()</methodname>
417 <example id="zend.file.transfer.validators.count.example">
418 <title>Count バリデータの使用法</title>
420 <programlisting language="php"><![CDATA[
421 $upload = new Zend_File_Transfer();
423 // ファイルの数を最大 2 に制限します
424 $upload->addValidator('Count', false, 2);
426 // 最大でも 5 個、少なくとも 1 つのファイルが返されるよう制限します
427 $upload->addValidator('Count', false, array('min' =>1, 'max' => 5));
433 このバリデータは、チェックしたファイルの数を内部に保存することに注意しましょう。
434 最大値を超えたファイルはエラーを返します。
439 <sect2 id="zend.file.transfer.validators.crc32">
440 <title>Crc32 バリデータ</title>
443 <code>Crc32</code> バリデータは、転送されたファイルの中身のハッシュをチェックします。
444 このバリデータは、<acronym>PHP</acronym> の hash 拡張モジュールの crc32 アルゴリズムを使用します。
451 <code>*</code>: 任意のキーあるいは数値添字配列を設定します。
452 この値を、検証対象のハッシュと比較します。
456 異なるキーを使用して複数のハッシュを設定できます。
458 どれにも一致しなかった場合にのみ検証が失敗します。
463 <example id="zend.file.transfer.validators.crc32.example">
464 <title>Crc32 バリデータの使用法</title>
466 <programlisting language="php"><![CDATA[
467 $upload = new Zend_File_Transfer();
469 // アップロードされたファイルのハッシュが指定したものと一致するかどうかをチェックします
470 $upload->addValidator('Crc32', false, '3b3652f');
473 $upload->addValidator('Crc32', false, array('3b3652f', 'e612b69'));
478 <sect2 id="zend.file.transfer.validators.excludeextension">
479 <title>ExcludeExtension バリデータ</title>
482 <code>ExcludeExtension</code> バリデータは、
483 渡されたファイルの拡張子をチェックします。
490 <code>*</code>: 任意のキーあるいは数値添字配列を指定します。
491 指定したファイルがこの拡張子を使用していないかどうかをチェックします。
497 <code>case</code>: 検証時に大文字小文字を区別するかどうかを設定します。
498 デフォルトでは大文字小文字を区別しません。
499 このオプションはすべての拡張子に対して適用されることに注意しましょう。
505 このバリデータで複数の拡張子を指定するには、
506 カンマ区切りの文字列あるいは配列を使用します。
507 <methodname>setExtension()</methodname>、<methodname>addExtension()</methodname> および
508 <methodname>getExtension()</methodname> といったメソッドで拡張子の設定や取得が可能です。
512 大文字小文字を区別したチェックが有用なこともあります。
513 そのため、コンストラクタの 2 番目のパラメータ
514 <code>$case</code> を指定できるようになっています。これを <constant>TRUE</constant>
515 に設定すると、大文字小文字を区別して拡張子を検証します。
518 <example id="zend.file.transfer.validators.excludeextension.example">
519 <title>ExcludeExtension バリデータの使用法</title>
521 <programlisting language="php"><![CDATA[
522 $upload = new Zend_File_Transfer();
524 // 拡張子 php あるいは exe のファイルは許可しません
525 $upload->addValidator('ExcludeExtension', false, 'php,exe');
527 // 拡張子 php あるいは exe のファイルを許可しない設定を配列記法で行います
528 $upload->addValidator('ExcludeExtension', false, array('php', 'exe'));
530 // 大文字小文字を区別するチェックを行います
531 $upload->addValidator('ExcludeExtension',
533 array('php', 'exe', 'case' => true));
534 $upload->addValidator('ExcludeExtension',
536 array('php', 'exe', 'case' => true));
542 このバリデータがチェックするのはファイルの拡張子のみであることに注意しましょう。
543 実際の <acronym>MIME</acronym> 型などはチェックしません。
548 <sect2 id="zend.file.transfer.validators.excludemimetype">
549 <title>ExcludeMimeType バリデータ</title>
552 <code>ExcludeMimeType</code> バリデータは、
553 転送されるファイルの <acronym>MIME</acronym> 型をチェックします。
560 <code>*</code>: 任意のキー、あるいは数値添字配列を指定します。
561 検証したい <acronym>MIME</acronym> 型を設定します。
565 このオプションで、許可したくないファイルの <acronym>MIME</acronym> 型を定義できます。
571 <code>headerCheck</code>: <constant>TRUE</constant> に設定すると、
572 <emphasis>fileInfo</emphasis> あるいは <emphasis>mimeMagic</emphasis>
573 拡張モジュールがない場合にも <acronym>HTTP</acronym>
574 情報からファイルタイプをチェックします。このオプションのデフォルト値は
575 <constant>FALSE</constant> です。
581 このバリデータで複数の <acronym>MIME</acronym> 型を指定するには、
582 カンマ区切りの文字列あるいは配列を使用します。
583 <methodname>setMimeType()</methodname>、<methodname>addMimeType()</methodname> および
584 <methodname>getMimeType()</methodname> といったメソッドで <acronym>MIME</acronym> 型の設定や取得が可能です。
587 <example id="zend.file.transfer.validators.excludemimetype.example">
588 <title>ExcludeMimeType バリデータの使用法</title>
590 <programlisting language="php"><![CDATA[
591 $upload = new Zend_File_Transfer();
593 // すべてのファイルで gif 画像の MIME 型を許可しません
594 $upload->addValidator('ExcludeMimeType', false, 'image/gif');
596 // すべてのファイルで gif 画像および jpg 画像の MIME 型を許可しません
597 $upload->addValidator('ExcludeMimeType', false, array('image/gif', 'image/jpeg');
599 // すべてのファイルで画像を許可しません
600 $upload->addValidator('ExcludeMimeType', false, 'image');
605 上の例で示したように、複数の <acronym>MIME</acronym> 型をひとつのグループとして扱うこともできます。
606 画像ファイルならすべて許可したいという場合は、<acronym>MIME</acronym> 型に 'image' と指定します。
607 'image' 以外にも 'audio'、'video'、'text などが使用可能です。
612 <acronym>MIME</acronym> 型のグループを拒否してしまうと、意図していないものも含めて
613 そのグループのすべての形式のファイルを拒否してしまうことに注意しましょう。
614 たとえば 'image' を拒否したら 'image/jpeg' や 'image/vasa'
615 などすべての画像形式を拒否することになります。
616 すべての形式を拒否していいのかどうか不安な場合は、
617 グループ指定ではなく個別の <acronym>MIME</acronym> 型を指定するようにしましょう。
622 <sect2 id="zend.file.transfer.validators.exists">
623 <title>Exists バリデータ</title>
626 <code>Exists</code> バリデータは、
634 <code>*</code>: 任意のキーあるいは数値添字配列を指定し、
635 ファイルが指定したディレクトリに存在するかどうかをチェックします。
641 このバリデータで複数のディレクトリを指定するには、
642 カンマ区切りの文字列あるいは配列を使用します。
643 <methodname>setDirectory()</methodname>、<methodname>addDirectory()</methodname> および
644 <methodname>getDirectory()</methodname> といったメソッドでディレクトリの設定や取得が可能です。
647 <example id="zend.file.transfer.validators.exists.example">
648 <title>Exists バリデータの使用法</title>
650 <programlisting language="php"><![CDATA[
651 $upload = new Zend_File_Transfer();
653 // temp ディレクトリをチェック対象に追加します
654 $upload->addValidator('Exists', false, '\temp');
656 // ふたつのディレクトリを配列記法で追加します
657 $upload->addValidator('Exists',
659 array('\home\images', '\home\uploads'));
665 このバリデータは、ファイルが存在するかどうかをすべてのディレクトリでチェックすることに注意しましょう。
666 指定したディレクトリのうちのどこかひとつでもファイルが存在しなかった場合に検証が失敗します。
671 <sect2 id="zend.file.transfer.validators.extension">
672 <title>Extension バリデータ</title>
675 <code>Extension</code> バリデータは、
676 渡されたファイルの拡張子をチェックします。
683 <code>*</code>: 任意のキーあるいは数値添字配列を設定し、
684 指定したファイルがこの拡張子かどうかをチェックします。
690 <code>case</code>: チェックの際に大文字小文字を区別するかどうかを設定します。
691 デフォルトでは大文字小文字を区別しません。
692 このオプションは、すべての拡張子に対して適用されることに注意しましょう。
698 このバリデータで複数の拡張子を指定するには、
699 カンマ区切りの文字列あるいは配列を使用します。
700 <methodname>setExtension()</methodname>、<methodname>addExtension()</methodname> および
701 <methodname>getExtension()</methodname> といったメソッドで拡張子の設定や取得が可能です。
705 場合によっては大文字小文字を区別してチェックしたくなることもあるでしょう。
706 そんなときのために、コンストラクタで 2 番目のパラメータ
707 <code>$case</code> を指定できます。これを <constant>TRUE</constant>
708 にすると、大文字小文字を区別して拡張子のチェックを行います。
711 <example id="zend.file.transfer.validators.extension.example">
712 <title>Extension バリデータの使用法</title>
714 <programlisting language="php"><![CDATA[
715 $upload = new Zend_File_Transfer();
717 // 拡張子を jpg と png のみに制限します
718 $upload->addValidator('Extension', false, 'jpg,png');
720 // 配列形式で、拡張子を jpg と png のみに制限します
721 $upload->addValidator('Extension', false, array('jpg', 'png'));
723 // 大文字小文字を区別したチェックを行います
724 $upload->addValidator('Extension', false, array('mo', 'png', 'case' => true));
725 if (!$upload->isValid('C:\temp\myfile.MO')) {
726 print 'Not valid because MO and mo do not match with case sensitivity;
733 このバリデータがチェックするのはファイルの拡張子のみであることに注意しましょう。
734 実際の <acronym>MIME</acronym> 型などはチェックしません。
739 <sect2 id="zend.file.transfer.validators.filessize">
740 <title>FilesSize バリデータ</title>
743 <code>FilesSize</code> バリデータは、
744 すべてのファイルの合計サイズをチェックします。
751 <code>min</code>: ファイルサイズの総合計の最小値を設定します。
752 このオプションで、転送されるファイルの合計サイズの最小値を指定します。
758 <code>max</code>: ファイルサイズの総合計の最大値を設定します。
762 このオプションで、転送されるファイルの合計サイズの最大値を指定できます。
763 個別のファイルのサイズはチェックしません。
769 <code>bytestring</code>: 失敗したときに返す情報を、
770 人間が読みやすい形式にするかファイルサイズそのものにするかを設定します。
774 このオプションで、ユーザが受け取る結果が '10864' あるいは '10MB'
775 のどちらの形式になるのかを指定できます。デフォルト値は
776 <constant>TRUE</constant> で、'10MB' 形式となります。
782 文字列を指定してインスタンス化すると、その値は
783 <code>max</code> とみなされます。
784 後から <methodname>setMin()</methodname> や
785 <methodname>setMax()</methodname> でオプションを設定することもできますし、
786 <methodname>getMin()</methodname> や <methodname>getMax()</methodname>
792 これは多くのオペレーティングシステムでもサポートされているものです。
793 <emphasis>20000 bytes</emphasis>
794 と書くかわりに、<emphasis>20kB</emphasis>
795 とすることができるのです。すべての単位は、1024 単位に変換されます。
796 使用できる単位は <code>kB</code>、<code>MB</code>、
797 <code>GB</code>、<code>TB</code>、<code>PB</code> および <code>EB</code>
798 です。先ほど説明したとおり、1kB は 1024 バイトであることに注意する必要があります。
801 <example id="zend.file.transfer.validators.filessize.example">
802 <title>FilesSize バリデータの使用法</title>
804 <programlisting language="php"><![CDATA[
805 $upload = new Zend_File_Transfer();
807 // アップロードされるファイルサイズの合計を 40000 バイトまでに制限します
808 $upload->addValidator('FilesSize', false, 40000);
810 // アップロードされるファイルサイズの合計を最大 4MB、最小 10kB に制限します
811 $upload->addValidator('FilesSize',
813 array('min' => '10kB', 'max' => '4MB'));
815 // さきほどと同じですが、結果をプレーンなファイルサイズで返します
816 $upload->addValidator('FilesSize',
818 array('min' => '10kB',
820 'bytestring' => false));
826 このバリデータは、チェックしたファイルのサイズを内部に保存することに注意しましょう。
827 最大値を超えたファイルはエラーを返します。
832 <sect2 id="zend.file.transfer.validators.imagesize">
833 <title>ImageSize バリデータ</title>
836 <code>ImageSize</code> バリデータは、
844 <code>minheight</code>: 画像の高さの最小値を設定します。
850 <code>maxheight</code>: 画像の高さの最大値を設定します。
856 <code>minwidth</code>: 画像の幅の最小値を設定します。
862 <code>maxwidth</code>: 画像の幅の最大値を設定します。
868 <methodname>setImageMin()</methodname> や <methodname>setImageMax()</methodname>
869 で最小値・最大値を設定することもできますし、
870 <methodname>getMin()</methodname> や <methodname>getMax()</methodname>
875 利便性を考慮して、<methodname>setImageWidth()</methodname> や <methodname>setImageHeight()</methodname>
876 といったメソッドも用意されています。これは、幅や高さの最小値と最大値を設定します。
877 もちろん、それに対応する <methodname>getImageWidth()</methodname> や <methodname>getImageHeight()</methodname>
882 サイズの検証をしたくない場合は、その部分に値 <constant>NULL</constant> を設定します。
885 <example id="zend.file.transfer.validators.imagesize.example">
886 <title>ImageSize バリデータの使用法</title>
888 <programlisting language="php"><![CDATA[
889 $upload = new Zend_File_Transfer();
891 // 画像の高さを 100-200 ピクセル、幅を 40-80 ピクセルに制限します
892 $upload->addValidator('ImageSize', false,
893 array('minwidth' => 40,
900 $upload->setImageWidth(array('minwidth' => 20, 'maxwidth' => 200));
905 <sect2 id="zend.file.transfer.validators.iscompressed">
906 <title>IsCompressed バリデータ</title>
909 <code>IsCompressed</code> バリデータは、
910 転送されたファイルが zip や arc のような圧縮アーカイブ形式であるかどうかをチェックします。
911 このバリデータは <code>MimeType</code> バリデータを使用しており、
912 同じメソッドとオプションをサポートしています。
913 このバリデータを特定の圧縮形式のみに制限するには、
917 <example id="zend.file.transfer.validators.iscompressed.example">
918 <title>IsCompressed バリデータの使用法</title>
920 <programlisting language="php"><![CDATA[
921 $upload = new Zend_File_Transfer();
923 // アップロードされたファイルが圧縮アーカイブであるかどうかチェックします
924 $upload->addValidator('IsCompressed', false);
926 // zip ファイルのみを対象とするようこのバリデータを制限します
927 $upload->addValidator('IsCompressed', false, array('application/zip'));
929 // よりシンプルな記法で、zip ファイルのみを対象とするようこのバリデータを制限します
930 $upload->addValidator('IsCompressed', false, 'zip');
936 指定した <acronym>MIME</acronym>
937 型がアーカイブ型であるかどうかのチェックは行われないことに注意しましょう。
938 たとえば gif ファイルがこのバリデータを通過するように設定することも可能です。
939 アーカイブ型かどうかのチェックには 'MimeType'
940 バリデータを使用したほうが読みやすいコードとなります。
945 <sect2 id="zend.file.transfer.validators.isimage">
946 <title>IsImage バリデータ</title>
949 <code>IsImage</code> バリデータは、
950 転送されたファイルが gif や jpeg のような画像ファイルであるかどうかをチェックします。
951 このバリデータは <code>MimeType</code> バリデータを使用しており、
952 同じメソッドとオプションをサポートしています。
953 このバリデータを特定の画像形式のみに制限するには、
957 <example id="zend.file.transfer.validators.isimage.example">
958 <title>IsImage バリデータの使用法</title>
960 <programlisting language="php"><![CDATA[
961 $upload = new Zend_File_Transfer();
963 // アップロードされたファイルが画像ファイルであるかどうかチェックします
964 $upload->addValidator('IsImage', false);
966 // gif ファイルのみを対象とするようこのバリデータを制限します
967 $upload->addValidator('IsImage', false, array('application/gif'));
969 // よりシンプルな記法で、gif ファイルのみを対象とするようこのバリデータを制限します
970 $upload->addValidator('IsImage', false, 'jpeg');
976 指定した <acronym>MIME</acronym>
977 型が image 型であるかどうかのチェックは行われないことに注意しましょう。
978 たとえば gif ファイルがこのバリデータを通過するように設定することも可能です。
979 image 型かどうかのチェックには 'MimeType'
980 バリデータを使用したほうが読みやすいコードとなります。
985 <sect2 id="zend.file.transfer.validators.hash">
986 <title>Hash バリデータ</title>
989 <code>Hash</code> バリデータは、転送されたファイルの中身のハッシュをチェックします。
990 このバリデータは、<acronym>PHP</acronym> の hash 拡張モジュールを使用します。
997 <code>*</code>: 任意のキーあるいは数値添字配列を設定します。
998 この値と、検証対象のハッシュとを比較します。
1002 配列形式で複数のハッシュを設定できます。
1004 どれにも一致しなかった場合にのみ検証が失敗します。
1010 <code>algorithm</code>: ハッシュの取得に使用するアルゴリズムを設定します。
1014 複数のアルゴリズムを設定するには、<methodname>addHash()</methodname>
1020 <example id="zend.file.transfer.validators.hash.example">
1021 <title>Hash バリデータの使用法</title>
1023 <programlisting language="php"><![CDATA[
1024 $upload = new Zend_File_Transfer();
1026 // アップロードされたファイルのハッシュが指定したものと一致するかどうかをチェックします
1027 $upload->addValidator('Hash', false, '3b3652f');
1029 // ふたつの異なるハッシュを指定します
1030 $upload->addValidator('Hash', false, array('3b3652f', 'e612b69'));
1032 // 別のアルゴリズムでチェックを行います
1033 $upload->addValidator('Hash',
1035 array('315b3cd8273d44912a7',
1036 'algorithm' => 'md5'));
1037 ]]></programlisting>
1042 このバリデータは、役 34 のハッシュアルゴリズムをサポートしています。
1043 よく使われるものとしては 'crc32' や 'md5' そして 'sha1' があります。
1045 <ulink url="http://php.net">php.net</ulink> の
1046 <ulink url="http://php.net/hash_algos">hash_algos メソッド</ulink>
1052 <sect2 id="zend.file.transfer.validators.md5">
1053 <title>Md5 バリデータ</title>
1056 <code>Md5</code> バリデータは、転送されたファイルの中身のハッシュをチェックします。
1057 このバリデータは、<acronym>PHP</acronym> の hash 拡張モジュールの md5 アルゴリズムを使用します。
1064 <code>*</code>: 任意のキーあるいは数値添字配列を設定します。
1068 配列形式で複数のハッシュを設定できます。
1070 どれにも一致しなかった場合にのみ検証が失敗します。
1075 <example id="zend.file.transfer.validators.md5.example">
1076 <title>Md5 バリデータの使用法</title>
1078 <programlisting language="php"><![CDATA[
1079 $upload = new Zend_File_Transfer();
1081 // アップロードされたファイルのハッシュが指定したものと一致するかどうかをチェックします
1082 $upload->addValidator('Md5', false, '3b3652f336522365223');
1084 // ふたつの異なるハッシュを指定します
1085 $upload->addValidator('Md5',
1087 array('3b3652f336522365223',
1088 'eb3365f3365ddc65365'));
1089 ]]></programlisting>
1093 <sect2 id="zend.file.transfer.validators.mimetype">
1094 <title>MimeType バリデータ</title>
1097 <code>MimeType</code> バリデータは、
1098 転送されるファイルの <acronym>MIME</acronym> 型をチェックします。
1105 <code>*</code>: 任意のキーあるいは数値添字配列を指定します。
1106 検証したい <acronym>MIME</acronym> 型を設定します。
1110 許可したいファイルの <acronym>MIME</acronym> 型を定義します。
1116 <code>headerCheck</code>: <constant>TRUE</constant> に設定すると、
1117 <emphasis>fileInfo</emphasis> あるいは <emphasis>mimeMagic</emphasis>
1118 拡張モジュールがない場合にも <acronym>HTTP</acronym>
1119 情報からファイルタイプをチェックします。このオプションのデフォルト値は
1120 <constant>FALSE</constant> です。
1126 <code>magicfile</code>: 使用する magicfile。
1130 このオプションで、使用する magicfile を定義します。
1131 指定しなかったり空だったりした場合は、定数 MAGIC
1132 を使用します。このオプションは Zend Framework 1.7.1
1139 このバリデータで複数の <acronym>MIME</acronym> 型を指定するには、
1140 カンマ区切りの文字列あるいは配列を使用します。
1141 <methodname>setMimeType()</methodname>、<methodname>addMimeType()</methodname> および
1142 <methodname>getMimeType()</methodname> といったメソッドで <acronym>MIME</acronym> 型の設定や取得が可能です。
1146 fileinfo が使用する magicfile を設定するには、オプション 'magicfile' を使用します。
1147 さらに、<methodname>setMagicFile()</methodname> や <methodname>getMagicFile()</methodname>
1148 といったメソッドで後から magicfile の設定や取得が可能です。
1149 これらのメソッドは Zend Framework 1.7.1 以降で使用可能です。
1152 <example id="zend.file.transfer.validators.mimetype.example">
1153 <title>MimeType バリデータの使用法</title>
1155 <programlisting language="php"><![CDATA[
1156 $upload = new Zend_File_Transfer();
1158 // MIME 型を制限し、gif 画像のみを許可するようにします
1159 $upload->addValidator('MimeType', false, 'image/gif');
1161 // すべてのファイルが gif および jpeg 画像でなければならないように MIME 型を制限します
1162 $upload->addValidator('MimeType', false, array('image/gif', 'image/jpeg');
1164 // すべてのファイルが画像であるように MIME 型を制限します
1165 $upload->addValidator('MimeType', false, 'image');
1167 // 別の magicfile を使用します
1168 $upload->addValidator('MimeType',
1171 'magicfile' => '/path/to/magicfile.mgx'));
1172 ]]></programlisting>
1176 上の例で示したように、複数の <acronym>MIME</acronym> 型をひとつのグループとして扱うこともできます。
1177 画像ファイルならすべて許可したいという場合は、<acronym>MIME</acronym> 型に 'image' と指定します。
1178 'image' 以外にも 'audio'、'video'、'text などが使用可能です。
1183 <acronym>MIME</acronym> 型のグループを許可してしまうと、アプリケーション側で対応しているか否かにかかわらず
1184 そのグループのすべての形式のファイルを許可してしまうことに注意しましょう。
1185 たとえば 'image' を許可したら 'image/xpixmap' や 'image/vasa'
1186 も受け付けることになりますが、おそらくこれは問題となるでしょう。
1187 アプリケーション側ですべての形式を処理できるかどうか不安なら、
1188 グループ指定ではなく個別の <acronym>MIME</acronym> 型を指定するようにしましょう。
1194 このコンポーネントは、もし <code>fileinfo</code>
1195 拡張モジュールが使用可能ならそれを使用します。使用できない場合は
1196 <code>mime_content_type</code> 関数を使用します。
1197 この関数コールが失敗した場合は、<acronym>HTTP</acronym> で渡された <acronym>MIME</acronym> 型を使用します。
1201 <code>fileinfo</code> も <code>mime_content_type</code>
1202 も使えない場合は、セキュリティの問題に注意する必要があります。
1203 <acronym>HTTP</acronym> から取得する <acronym>MIME</acronym> 型はセキュアではなく、
1209 <sect2 id="zend.file.transfer.validators.notexists">
1210 <title>NotExists バリデータ</title>
1213 <code>NotExists</code> バリデータは、
1214 指定したファイルの存在をチェックします。
1221 <code>*</code>: 任意のキーあるいは数値添字配列を設定し、
1222 ファイルが指定したディレクトリに存在しないかどうかをチェックします。
1228 このバリデータで複数のディレクトリを指定するには、
1229 カンマ区切りの文字列あるいは配列を使用します。
1230 <methodname>setDirectory()</methodname>、<methodname>addDirectory()</methodname> および
1231 <methodname>getDirectory()</methodname> といったメソッドでディレクトリの設定や取得が可能です。
1234 <example id="zend.file.transfer.validators.notexists.example">
1235 <title>NotExists バリデータの使用法</title>
1237 <programlisting language="php"><![CDATA[
1238 $upload = new Zend_File_Transfer();
1240 // temp ディレクトリをチェック対象に追加します
1241 $upload->addValidator('NotExists', false, '\temp');
1243 // ふたつのディレクトリを配列記法で追加します
1244 $upload->addValidator('NotExists', false,
1245 array('\home\images',
1248 ]]></programlisting>
1253 このバリデータは、ファイルが存在しないかどうかをすべてのディレクトリでチェックすることに注意しましょう。
1254 指定したディレクトリのうちのどこかひとつでもファイルが存在した場合に検証が失敗します。
1259 <sect2 id="zend.file.transfer.validators.sha1">
1260 <title>Sha1 バリデータ</title>
1263 <code>Sha1</code> バリデータは、転送されたファイルの中身のハッシュをチェックします。
1264 このバリデータは、<acronym>PHP</acronym> の hash 拡張モジュールの sha1 アルゴリズムを使用します。
1271 <code>*</code>: 任意のキーあるいは数値添字配列を設定します。
1275 配列形式で複数のハッシュを設定できます。
1277 どれにも一致しなかった場合にのみ検証が失敗します。
1282 <example id="zend.file.transfer.validators.sha1.example">
1283 <title>sha1 バリデータの使用法</title>
1285 <programlisting language="php"><![CDATA[
1286 $upload = new Zend_File_Transfer();
1288 // アップロードされたファイルのハッシュが指定したものと一致するかどうかをチェックします
1289 $upload->addValidator('sha1', false, '3b3652f336522365223');
1291 // ふたつの異なるハッシュを指定します
1292 $upload->addValidator('Sha1',
1293 false, array('3b3652f336522365223',
1294 'eb3365f3365ddc65365'));
1295 ]]></programlisting>
1299 <sect2 id="zend.file.transfer.validators.size">
1300 <title>Size バリデータ</title>
1303 <code>Size</code> バリデータは、
1304 個々のファイルのサイズをチェックします。
1311 <code>Min</code>: ファイルサイズの最小値を設定します。
1315 このオプションで、転送されるファイルの個々のサイズの最小値を指定できます。
1321 <code>Max</code>: ファイルサイズの最大値を設定します。
1325 このオプションで、転送されるファイルの個々のサイズを制限できます。
1331 <code>bytestring</code>: 失敗したときに返す情報を、
1332 人間が読みやすい形式にするかファイルサイズそのものにするかを設定します。
1336 このオプションで、ユーザが受け取る結果が '10864' あるいは '10MB'
1337 のどちらの形式になるのかを指定できます。デフォルト値は
1338 <constant>TRUE</constant> で、'10MB' 形式となります。
1344 文字列を指定してインスタンス化すると、その値は
1345 <code>max</code> とみなされます。あるいは、後から <methodname>setMin()</methodname> や
1346 <methodname>setMax()</methodname> でオプションを設定することもできますし、
1347 <methodname>getMin()</methodname> や <methodname>getMax()</methodname>
1352 サイズの指定には SI 記法も使えます。
1353 これは多くのオペレーティングシステムでもサポートされているものです。
1354 <emphasis>20000 bytes</emphasis>
1355 と書くかわりに、<emphasis>20kB</emphasis>
1356 とすることができるのです。すべての単位は、1024 単位に変換されます。
1357 使用できる単位は <code>kB</code>、<code>MB</code>、
1358 <code>GB</code>、<code>TB</code>、<code>PB</code> および <code>EB</code>
1359 です。先ほど説明したとおり、1kB は 1024 バイトであることに注意する必要があります。
1362 <example id="zend.file.transfer.validators.size.example">
1363 <title>Size バリデータの使用法</title>
1365 <programlisting language="php"><![CDATA[
1366 $upload = new Zend_File_Transfer();
1368 // ファイルサイズを 40000 バイトまでに制限します
1369 $upload->addValidator('Size', false, 40000);
1371 // 指定したファイルのサイズを最大 4MB、最小 10kB に制限し、
1372 // さらにエラー時に返す結果をユーザに優しい形式ではなく
1374 $upload->addValidator('Size',
1376 array('min' => '10kB',
1378 'bytestring' => false));
1379 ]]></programlisting>
1383 <sect2 id="zend.file.transfer.validators.wordcount">
1384 <title>WordCount バリデータ</title>
1387 <code>WordCount</code> バリデータは、
1388 指定したファイル内の単語数をチェックします。
1395 <code>min</code>: 見つかった単語数の最小値を設定します。
1401 <code>max</code>: 見つかった単語数の最大値を設定します。
1407 文字列あるいは整数値を指定してインスタンス化すると、その値は
1408 <code>max</code> とみなされます。あるいは、後から <methodname>setMin()</methodname> や
1409 <methodname>setMax()</methodname> でオプションを設定することもできますし、
1410 <methodname>getMin()</methodname> や <methodname>getMax()</methodname>
1414 <example id="zend.file.transfer.validators.wordcount.example">
1415 <title>WordCount バリデータの使用法</title>
1417 <programlisting language="php"><![CDATA[
1418 $upload = new Zend_File_Transfer();
1420 // ファイル内の単語数を 2000 語までに制限します
1421 $upload->addValidator('WordCount', false, 2000);
1423 // ファイル内の単語数を最大 5000 語、最小 1000 語に制限します
1424 $upload->addValidator('WordCount', false, array('min' => 1000, 'max' => 5000));
1425 ]]></programlisting>
1431 vim:se ts=4 sw=4 tw=80 et: