Zend_File_Transfer-Migration.xml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- Reviewed: no -->
  3. <!-- EN-Revision: 17987 -->
  4. <sect1 id="zend.file.transfer.migration">
  5. <title>以前のバージョンからの移行</title>
  6. <para>
  7. <classname>Zend_File_Transfer</classname> の <acronym>API</acronym> は日々変わっています。
  8. <classname>Zend_File_Transfer</classname> やそのサブコンポーネントを
  9. 初期のバージョンから使っている方は、以下のガイドラインに従ってスクリプトを変更し、
  10. 新しい <acronym>API</acronym> にあわせましょう。
  11. </para>
  12. <sect2 id="zend.file.transfer.migration.fromonenineonetooneten">
  13. <title>1.9 から 1.10 以降への移行</title>
  14. <sect3 id="zend.file.transfer.migration.fromonenineonetooneten.mimetype">
  15. <title>MimeType の検証</title>
  16. <para>
  17. セキュリティ上の理由から、
  18. <classname>MimeType</classname>、<classname>ExcludeMimeType</classname>、
  19. <classname>IsCompressed</classname> および <classname>IsImage</classname>
  20. バリデータにおけるデフォルトのフォールバック機能を無効にしました。
  21. つまり、<emphasis>fileInfo</emphasis> 拡張モジュールあるいは
  22. <emphasis>magicMime</emphasis> 拡張モジュールがなければ、
  23. 検証が常に失敗するようになるということです。
  24. </para>
  25. <para>
  26. ユーザ側から渡された <acronym>HTTP</acronym> フィールドを使用して入力を検証する必要がある場合は、
  27. <methodname>enableHeaderCheck()</methodname> メソッドを使用すればこの機能を有効にできます。
  28. </para>
  29. <note>
  30. <title>セキュリティに関するヒント</title>
  31. <para>
  32. ユーザ側から渡された <acronym>HTTP</acronym>
  33. フィールドに依存するのはセキュリティ上のリスクとなることに注意しましょう。
  34. これは簡単に改ざんすることができ、悪意のあるファイルを受け取る可能性があります。
  35. </para>
  36. </note>
  37. <example id="zend.file.transfer.migration.fromonenineonetooneten.example">
  38. <title>HTTP フィールドの使用を許可する</title>
  39. <programlisting language="php"><![CDATA[
  40. // 初期化時に
  41. $valid = new Zend_File_Transfer_Adapter_Http(array('headerCheck' => true);
  42. // あるいは後から
  43. $valid->enableHeaderCheck();
  44. ]]></programlisting>
  45. </example>
  46. </sect3>
  47. </sect2>
  48. <sect2 id="zend.file.transfer.migration.fromonesixtooneseven">
  49. <title>1.6 から 1.7 以降への移行</title>
  50. <sect3 id="zend.file.transfer.migration.fromonesixtooneseven.validators">
  51. <title>フィルタやバリデータを使用する際の変更点</title>
  52. <para>
  53. <classname>Zend_File_Transfer</classname> のバリデータが
  54. <classname>Zend_Config</classname> と組み合わせて使えないという指摘がありました。
  55. 名前つき配列を使っていなかったからです。
  56. </para>
  57. <para>
  58. そこで、<classname>Zend_File_Transfer</classname> 用のすべてのフィルタとバリデータを作り直しました。
  59. 古い構文でも動作しますがこれは非推奨となり、
  60. 設定せずに実行すると <acronym>PHP</acronym> の notice が発生するようになります。
  61. </para>
  62. <para>
  63. 次のリストは、パラメータの使用法に関する変更点をまとめたものです。
  64. </para>
  65. <sect4 id="zend.file.transfer.migration.fromonesixtooneseven.validators.rename">
  66. <title>Rename フィルタ</title>
  67. <itemizedlist>
  68. <listitem><para>
  69. 古い形式の <acronym>API</acronym>: <classname>Zend_Filter_File_Rename($oldfile, $newfile, $overwrite)</classname>
  70. </para></listitem>
  71. <listitem><para>
  72. 新しい形式の <acronym>API</acronym>: <methodname>Zend_Filter_File_Rename($options)</methodname>
  73. $options には次の配列キーを使えます。
  74. <emphasis>source</emphasis> ($oldfile と同等)、
  75. <emphasis>target</emphasis> ($newfile と同等)、
  76. <emphasis>overwrite</emphasis> ($overwrite と同等)
  77. </para></listitem>
  78. </itemizedlist>
  79. <example id="zend.file.transfer.migration.fromonesixonetooneseven.validators.rename.example">
  80. <title>rename フィルタの 1.6 から 1.7 での変更点</title>
  81. <programlisting language="php"><![CDATA[
  82. // 1.6 の例
  83. $upload = new Zend_File_Transfer_Adapter_Http();
  84. $upload->addFilter('Rename',
  85. array('/path/to/oldfile', '/path/to/newfile', true));
  86. // 1.7 の例
  87. $upload = new Zend_File_Transfer_Adapter_Http();
  88. $upload->addFilter('Rename',
  89. array('source' => '/path/to/oldfile',
  90. 'target' => '/path/to/newfile',
  91. 'overwrite' => true));
  92. ]]></programlisting>
  93. </example>
  94. </sect4>
  95. <sect4 id="zend.file.transfer.migration.fromonesixtooneseven.validators.count">
  96. <title>Count バリデータ</title>
  97. <itemizedlist>
  98. <listitem><para>
  99. 古い形式の <acronym>API</acronym>: <methodname>Zend_Validate_File_Count($min, $max)</methodname>
  100. </para></listitem>
  101. <listitem><para>
  102. 新しい形式の <acronym>API</acronym>: <methodname>Zend_Validate_File_Count($options)</methodname>
  103. $options には次の配列キーを使えます。
  104. <emphasis>min</emphasis> ($min と同等)、
  105. <emphasis>max</emphasis> ($max と同等)
  106. </para></listitem>
  107. </itemizedlist>
  108. <example id="zend.file.transfer.migration.fromonesixonetooneseven.validators.count.example">
  109. <title>count バリデータの 1.6 から 1.7 での変更点</title>
  110. <programlisting language="php"><![CDATA[
  111. // 1.6 の例
  112. $upload = new Zend_File_Transfer_Adapter_Http();
  113. $upload->addValidator('Count',
  114. array(2, 3));
  115. // 1.7 の例
  116. $upload = new Zend_File_Transfer_Adapter_Http();
  117. $upload->addValidator('Count',
  118. false,
  119. array('min' => 2,
  120. 'max' => 3));
  121. ]]></programlisting>
  122. </example>
  123. </sect4>
  124. <sect4 id="zend.file.transfer.migration.fromonesixtooneseven.validators.extension">
  125. <title>Extension バリデータ</title>
  126. <itemizedlist>
  127. <listitem><para>
  128. 古い形式の <acronym>API</acronym>: <classname>Zend_Validate_File_Extension($extension, $case)</classname>
  129. </para></listitem>
  130. <listitem><para>
  131. 新しい形式の <acronym>API</acronym>: <methodname>Zend_Validate_File_Extension($options)</methodname>
  132. $options には次の配列キーを使えます。
  133. <emphasis>*</emphasis> ($extension と同等、任意の他のキーを使用可能)、
  134. <emphasis>case</emphasis> ($case と同等)
  135. </para></listitem>
  136. </itemizedlist>
  137. <example id="zend.file.transfer.migration.fromonesixonetooneseven.validators.extension.example">
  138. <title>extension バリデータの 1.6 から 1.7 での変更点</title>
  139. <programlisting language="php"><![CDATA[
  140. // 1.6 の例
  141. $upload = new Zend_File_Transfer_Adapter_Http();
  142. $upload->addValidator('Extension',
  143. array('jpg,gif,bmp', true));
  144. // 1.7 の例
  145. $upload = new Zend_File_Transfer_Adapter_Http();
  146. $upload->addValidator('Extension',
  147. false,
  148. array('extension1' => 'jpg,gif,bmp',
  149. 'case' => true));
  150. ]]></programlisting>
  151. </example>
  152. </sect4>
  153. <sect4 id="zend.file.transfer.migration.fromonesixtooneseven.validators.filessize">
  154. <title>FilesSize バリデータ</title>
  155. <itemizedlist>
  156. <listitem><para>
  157. 古い形式の <acronym>API</acronym>: <classname>Zend_Validate_File_FilesSize($min, $max, $bytestring)</classname>
  158. </para></listitem>
  159. <listitem><para>
  160. 新しい形式の <acronym>API</acronym>: <methodname>Zend_Validate_File_FilesSize($options)</methodname>
  161. $options には次の配列キーを使えます。
  162. <emphasis>min</emphasis> ($min と同等)、
  163. <emphasis>max</emphasis> ($max と同等)、
  164. <emphasis>bytestring</emphasis> ($bytestring と同等)
  165. </para></listitem>
  166. </itemizedlist>
  167. <para>
  168. さらに <methodname>useByteString()</methodname> メソッドのシグネチャも変わりました。
  169. このメソッドの使用法は、
  170. そのバリデータが生成するメッセージでバイト文字列を使うことを想定しているかどうかを調べるだけになりました。
  171. フラグの値を設定するには
  172. <methodname>setUseByteString()</methodname> メソッドを使用します。
  173. </para>
  174. <example id="zend.file.transfer.migration.fromonesixonetooneseven.validators.filessize.example">
  175. <title>filessize バリデータの 1.6 から 1.7 での変更点</title>
  176. <programlisting language="php"><![CDATA[
  177. // 1.6 の例
  178. $upload = new Zend_File_Transfer_Adapter_Http();
  179. $upload->addValidator('FilesSize',
  180. array(100, 10000, true));
  181. // 1.7 の例
  182. $upload = new Zend_File_Transfer_Adapter_Http();
  183. $upload->addValidator('FilesSize',
  184. false,
  185. array('min' => 100,
  186. 'max' => 10000,
  187. 'bytestring' => true));
  188. // 1.6 の例
  189. $upload->useByteString(true); // set flag
  190. // 1.7 の例
  191. $upload->setUseByteSting(true); // set flag
  192. ]]></programlisting>
  193. </example>
  194. </sect4>
  195. <sect4 id="zend.file.transfer.migration.fromonesixtooneseven.validators.hash">
  196. <title>Hash バリデータ</title>
  197. <itemizedlist>
  198. <listitem><para>
  199. 古い形式の <acronym>API</acronym>: <classname>Zend_Validate_File_Hash($hash, $algorithm)</classname>
  200. </para></listitem>
  201. <listitem><para>
  202. 新しい形式の <acronym>API</acronym>: <methodname>Zend_Validate_File_Hash($options)</methodname>
  203. $options には次の配列キーを使えます。
  204. <emphasis>*</emphasis> ($hash と同等、任意の他のキーを使用可能)、
  205. <emphasis>algorithm</emphasis> ($algorithm と同等)、
  206. </para></listitem>
  207. </itemizedlist>
  208. <example id="zend.file.transfer.migration.fromonesixonetooneseven.validators.hash.example">
  209. <title>hash バリデータの 1.6 から 1.7 での変更点</title>
  210. <programlisting language="php"><![CDATA[
  211. // 1.6 の例
  212. $upload = new Zend_File_Transfer_Adapter_Http();
  213. $upload->addValidator('Hash',
  214. array('12345', 'md5'));
  215. // 1.7 の例
  216. $upload = new Zend_File_Transfer_Adapter_Http();
  217. $upload->addValidator('Hash',
  218. false,
  219. array('hash1' => '12345',
  220. 'algorithm' => 'md5'));
  221. ]]></programlisting>
  222. </example>
  223. </sect4>
  224. <sect4 id="zend.file.transfer.migration.fromonesixtooneseven.validators.imagesize">
  225. <title>ImageSize バリデータ</title>
  226. <itemizedlist>
  227. <listitem><para>
  228. 古い形式の <acronym>API</acronym>: <classname>Zend_Validate_File_ImageSize($minwidth, $minheight, $maxwidth, $maxheight)</classname>
  229. </para></listitem>
  230. <listitem><para>
  231. 新しい形式の <acronym>API</acronym>: <methodname>Zend_Validate_File_FilesSize($options)</methodname>
  232. $options には次の配列キーを使えます。
  233. <emphasis>minwidth</emphasis> ($minwidth と同等)、
  234. <emphasis>maxwidth</emphasis> ($maxwidth と同等)、
  235. <emphasis>minheight</emphasis> ($minheight と同等)、
  236. <emphasis>maxheight</emphasis> ($maxheight と同等)
  237. </para></listitem>
  238. </itemizedlist>
  239. <example id="zend.file.transfer.migration.fromonesixonetooneseven.validators.imagesize.example">
  240. <title>imagesize バリデータの 1.6 から 1.7 での変更点</title>
  241. <programlisting language="php"><![CDATA[
  242. // 1.6 の例
  243. $upload = new Zend_File_Transfer_Adapter_Http();
  244. $upload->addValidator('ImageSize',
  245. array(10, 10, 100, 100));
  246. // 1.7 の例
  247. $upload = new Zend_File_Transfer_Adapter_Http();
  248. $upload->addValidator('ImageSize',
  249. false,
  250. array('minwidth' => 10,
  251. 'minheight' => 10,
  252. 'maxwidth' => 100,
  253. 'maxheight' => 100));
  254. ]]></programlisting>
  255. </example>
  256. </sect4>
  257. <sect4 id="zend.file.transfer.migration.fromonesixtooneseven.validators.size">
  258. <title>Size バリデータ</title>
  259. <itemizedlist>
  260. <listitem><para>
  261. 古い形式の <acronym>API</acronym>: <classname>Zend_Validate_File_Size($min, $max, $bytestring)</classname>
  262. </para></listitem>
  263. <listitem><para>
  264. 新しい形式の <acronym>API</acronym>: <methodname>Zend_Validate_File_Size($options)</methodname>
  265. $options には次の配列キーを使えます。
  266. <emphasis>min</emphasis> ($min と同等)、
  267. <emphasis>max</emphasis> ($max と同等)、
  268. <emphasis>bytestring</emphasis> ($bytestring と同等)
  269. </para></listitem>
  270. </itemizedlist>
  271. <example id="zend.file.transfer.migration.fromonesixonetooneseven.validators.size.example">
  272. <title>size バリデータの 1.6 から 1.7 での変更点</title>
  273. <programlisting language="php"><![CDATA[
  274. // 1.6 の例
  275. $upload = new Zend_File_Transfer_Adapter_Http();
  276. $upload->addValidator('Size',
  277. array(100, 10000, true));
  278. // 1.7 の例
  279. $upload = new Zend_File_Transfer_Adapter_Http();
  280. $upload->addValidator('Size',
  281. false,
  282. array('min' => 100,
  283. 'max' => 10000,
  284. 'bytestring' => true));
  285. ]]></programlisting>
  286. </example>
  287. </sect4>
  288. </sect3>
  289. </sect2>
  290. <sect2 id="zend.file.transfer.migration.fromonesixonetoonesixtwo">
  291. <title>1.6.1 から 1.6.2 以降への移行</title>
  292. <sect3 id="zend.file.transfer.migration.fromonesixonetoonesixtwo.validators">
  293. <title>バリデータを使う際の変更点</title>
  294. <para>
  295. <classname>Zend_File_Transfer</classname> のバリデータが
  296. <classname>Zend_Form</classname> のデフォルトのものと同じようには動作しないという指摘がありました。
  297. <classname>Zend_Form</classname> では <varname>$breakChainOnFailure</varname>
  298. パラメータを利用でき、検証エラーが発生した際に
  299. それ以降のバリデータを動作させないようにすることができます。
  300. </para>
  301. <para>
  302. そこで、<classname>Zend_File_Transfer</classname>
  303. の既存のバリデータにもこのパラメータを追加することにしました。
  304. </para>
  305. <itemizedlist>
  306. <listitem><para>
  307. 古い形式の <acronym>API</acronym>: <methodname>addValidator($validator, $options, $files)</methodname>.
  308. </para></listitem>
  309. <listitem><para>
  310. 新しい形式の <acronym>API</acronym>: <methodname>addValidator($validator, $breakChainOnFailure, $options, $files)</methodname>.
  311. </para></listitem>
  312. </itemizedlist>
  313. <para>
  314. 既存のスクリプトを新しい <acronym>API</acronym> に移行するには、バリデータの定義の後に
  315. <constant>FALSE</constant> を追加します。
  316. </para>
  317. <example id="zend.file.transfer.migration.fromonesixonetoonesixtwo.example">
  318. <title>ファイルバリデータを 1.6.1 から 1.6.2 に移行する方法</title>
  319. <programlisting language="php"><![CDATA[
  320. // 1.6.1 での例
  321. $upload = new Zend_File_Transfer_Adapter_Http();
  322. $upload->addValidator('FilesSize', array('1B', '100kB'));
  323. // 同じ例を 1.6.2 以降用にしたもの
  324. // boolean false が追加されていることに注意しましょう
  325. $upload = new Zend_File_Transfer_Adapter_Http();
  326. $upload->addValidator('FilesSize', false, array('1B', '100kB'));
  327. ]]></programlisting>
  328. </example>
  329. </sect3>
  330. </sect2>
  331. </sect1>