migration-17.xml 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="migration.17">
  5. <title>Zend Framework 1.7</title>
  6. <para>
  7. Wenn man von einem älteren Release auf Zend Framework 1.7 oder höher hochrüstet sollte
  8. man die folgenden Migrations Hinweise beachten.
  9. </para>
  10. <sect2 id="migration.17.zend.controller">
  11. <title>Zend_Controller</title>
  12. <sect3 id="migration.17.zend.controller.dispatcher">
  13. <title>Änderungen im Dispatcher Interface</title>
  14. <para>
  15. Benutzer haben uns darauf aufmerksam gemacht das
  16. <classname>Zend_Controller_Action_Helper_ViewRenderer</classname> Methoden auf der
  17. abstrakten Dispatcher Klasse verwendet hat die nicht im Dispatcher Interface waren.
  18. Die folgenden Methoden wurden hinzugefügt um sicherzustellen das eigene Dispatcher
  19. weiterhin mit den ausgelieferten Implementierungen funktionieren:
  20. </para>
  21. <itemizedlist>
  22. <listitem>
  23. <para>
  24. <methodname>formatModuleName()</methodname>: sollte verwendet werden um
  25. einen rohen Controllernamen zu nehmen, wie den einen der in einem
  26. Anfrageobjekt gepackt ist, und Ihn in einen richtigen Klassennamen zu
  27. reformatieren den eine Klasse, die
  28. <classname>Zend_Controller_Action</classname> erweitert, verwenden würde
  29. </para>
  30. </listitem>
  31. </itemizedlist>
  32. </sect3>
  33. </sect2>
  34. <sect2 id="migration.17.zend.file.transfer">
  35. <title>Zend_File_Transfer</title>
  36. <sect3 id="migration.17.zend.file.transfer.validators">
  37. <title>Änderungen bei der Verwendung von Filtern und Prüfungen</title>
  38. <para>
  39. Wie von Benutzern erwähnt, arbeiteten die Prüfungen von
  40. <classname>Zend_File_Transfer</classname> nicht in Verbindung mit
  41. <classname>Zend_Config</classname> zusammen, durch den Fakt das Sie keine benannten
  42. Arrays verwendet haben.
  43. </para>
  44. <para>
  45. Deswegen wurden alle Filter und Prüfungen für
  46. <classname>Zend_File_Transfer</classname> überarbeitet. Wärend die alten Signaturen
  47. weiterhin funktionieren, wurden sie als veraltet markiert, und werfen eine
  48. <acronym>PHP</acronym> Notiz mit der Aufforderung das zu beheben.
  49. </para>
  50. <para>
  51. Die folgende Liste zeigt die Änderungen und was für die richtige Verwendung der
  52. Parameter getan werden muß.
  53. </para>
  54. <sect4 id="migration.17.zend.file.transfer.validators.rename">
  55. <title>Filter: Rename</title>
  56. <itemizedlist>
  57. <listitem>
  58. <para>
  59. Alte <acronym>API</acronym> der Methode:
  60. <methodname>Zend_Filter_File_Rename($oldfile, $newfile,
  61. $overwrite)</methodname>
  62. </para>
  63. </listitem>
  64. <listitem>
  65. <para>
  66. Neue <acronym>API</acronym> der Methode:
  67. <methodname>Zend_Filter_File_Rename($options)</methodname> wobei
  68. <varname>$options</varname> die folgenden Schlüssel für das Array
  69. akzeptiert: <emphasis>source</emphasis> identisch mit
  70. <varname>$oldfile</varname>, <emphasis>target</emphasis> identisch mit
  71. <varname>$newfile</varname>, <emphasis>overwrite</emphasis> identisch
  72. mit <varname>$overwrite</varname>
  73. </para>
  74. </listitem>
  75. </itemizedlist>
  76. <example id="migration.17.zend.file.transfer.validators.rename.example">
  77. <title>Änderungen für den Rename Filter von 1.6 zu 1.7</title>
  78. <programlisting language="php"><![CDATA[
  79. // Beispiel für 1.6
  80. $upload = new Zend_File_Transfer_Adapter_Http();
  81. $upload->addFilter('Rename',
  82. array('/path/to/oldfile', '/path/to/newfile', true));
  83. // Gleiches Beispiel für 1.7
  84. $upload = new Zend_File_Transfer_Adapter_Http();
  85. $upload->addFilter('Rename',
  86. array('source' => '/path/to/oldfile',
  87. 'target' => '/path/to/newfile',
  88. 'overwrite' => true));
  89. ]]></programlisting>
  90. </example>
  91. </sect4>
  92. <sect4 id="migration.17.zend.file.transfer.validators.count">
  93. <title>Prüfung: Count</title>
  94. <itemizedlist>
  95. <listitem>
  96. <para>
  97. Alte <acronym>API</acronym> der Methode:
  98. <methodname>Zend_Validate_File_Count($min, $max)</methodname>
  99. </para>
  100. </listitem>
  101. <listitem>
  102. <para>
  103. Neue <acronym>API</acronym> der Methode:
  104. <methodname>Zend_Validate_File_Count($options)</methodname> wobei
  105. <varname>$options</varname> die folgenden Schlüssel für das Array
  106. akzeptiert: <emphasis>min</emphasis> identisch mit
  107. <varname>$min</varname>, <emphasis>max</emphasis> identisch mit
  108. <varname>$max</varname>
  109. </para>
  110. </listitem>
  111. </itemizedlist>
  112. <example id="migration.17.zend.file.transfer.validators.count.example">
  113. <title>Änderungen für die Count Prüfung von 1.6 zu 1.7</title>
  114. <programlisting language="php"><![CDATA[
  115. // Beispiel für 1.6
  116. $upload = new Zend_File_Transfer_Adapter_Http();
  117. $upload->addValidator('Count',
  118. array(2, 3));
  119. // Gleiches Beispiel für 1.7
  120. $upload = new Zend_File_Transfer_Adapter_Http();
  121. $upload->addValidator('Count',
  122. false,
  123. array('min' => 2,
  124. 'max' => 3));
  125. ]]></programlisting>
  126. </example>
  127. </sect4>
  128. <sect4 id="migration.17.zend.file.transfer.validators.extension">
  129. <title>Prüfung: Extension</title>
  130. <itemizedlist>
  131. <listitem>
  132. <para>
  133. Alte <acronym>API</acronym> der Methode:
  134. <methodname>Zend_Validate_File_Extension($extension, $case)</methodname>
  135. </para>
  136. </listitem>
  137. <listitem>
  138. <para>
  139. Neue <acronym>API</acronym> der Methode:
  140. <methodname>Zend_Validate_File_Extension($options)</methodname> wobei
  141. <varname>$options</varname> die folgenden Schlüssel für das Array
  142. akzeptiert: <emphasis>*</emphasis> identisch mit
  143. <varname>$extension</varname> und kann jeden anderen Schlüssel haben
  144. <emphasis>case</emphasis> identisch mit <varname>$case</varname>
  145. </para>
  146. </listitem>
  147. </itemizedlist>
  148. <example id="migration.17.zend.file.transfer.validators.extension.example">
  149. <title>Änderungen für die Extension Prüfung von 1.6 zu 1.7</title>
  150. <programlisting language="php"><![CDATA[
  151. // Beispiel für 1.6
  152. $upload = new Zend_File_Transfer_Adapter_Http();
  153. $upload->addValidator('Extension',
  154. array('jpg,gif,bmp', true));
  155. // Gleiches Beispiel für 1.7
  156. $upload = new Zend_File_Transfer_Adapter_Http();
  157. $upload->addValidator('Extension',
  158. false,
  159. array('extension1' => 'jpg,gif,bmp',
  160. 'case' => true));
  161. ]]></programlisting>
  162. </example>
  163. </sect4>
  164. <sect4 id="migration.17.zend.file.transfer.validators.filessize">
  165. <title>Prüfung: FilesSize</title>
  166. <itemizedlist>
  167. <listitem>
  168. <para>
  169. Alte <acronym>API</acronym> der Methode:
  170. <methodname>Zend_Validate_File_FilesSize($min, $max,
  171. $bytestring)</methodname>
  172. </para>
  173. </listitem>
  174. <listitem>
  175. <para>
  176. Neue <acronym>API</acronym> der Methode:
  177. <methodname>Zend_Validate_File_FilesSize($options)</methodname> wobei
  178. <varname>$options</varname> die folgenden Schlüssel für das Array
  179. akzeptiert: <emphasis>min</emphasis> identisch mit
  180. <varname>$min</varname>, <emphasis>max</emphasis> identisch mit
  181. <varname>$max</varname>, <emphasis>bytestring</emphasis> identisch mit
  182. <varname>$bytestring</varname>
  183. </para>
  184. </listitem>
  185. </itemizedlist>
  186. <para>
  187. Zustätzlich wurde die Signatur der <methodname>useByteString()</methodname>
  188. Methode geändert. Sie kann nur verwendet werden um zu testen ob die Prüfung
  189. ByteStrings in den erzeugten Meldungen verwendet oder ncht. Um den Wert dieses
  190. Flags zu setzen muß die <methodname>setUseByteString()</methodname> Methode
  191. verwendet werden.
  192. </para>
  193. <example id="migration.17.zend.file.transfer.validators.filessize.example">
  194. <title>Änderungen für die FilesSize Prüfung von 1.6 zu 1.7</title>
  195. <programlisting language="php"><![CDATA[
  196. // Beispiel für 1.6
  197. $upload = new Zend_File_Transfer_Adapter_Http();
  198. $upload->addValidator('FilesSize',
  199. array(100, 10000, true));
  200. // Gleiches Beispiel für 1.7
  201. $upload = new Zend_File_Transfer_Adapter_Http();
  202. $upload->addValidator('FilesSize',
  203. false,
  204. array('min' => 100,
  205. 'max' => 10000,
  206. 'bytestring' => true));
  207. // Beispiel für 1.6
  208. $upload->useByteString(true); // Flag setzen
  209. // Gleiches Beispiel für 1.7
  210. $upload->setUseByteSting(true); // Flag setzen
  211. ]]></programlisting>
  212. </example>
  213. </sect4>
  214. <sect4 id="migration.17.zend.file.transfer.validators.hash">
  215. <title>Prüfung: Hash</title>
  216. <itemizedlist>
  217. <listitem>
  218. <para>
  219. Alte <acronym>API</acronym> der Methode:
  220. <methodname>Zend_Validate_File_Hash($hash, $algorithm)</methodname>
  221. </para>
  222. </listitem>
  223. <listitem>
  224. <para>
  225. Neue <acronym>API</acronym> der Methode:
  226. <methodname>Zend_Validate_File_Hash($options)</methodname> wobei
  227. <varname>$options</varname> die folgenden Schlüssel für das Array
  228. akzeptiert: <emphasis>*</emphasis> identisch mit
  229. <varname>$hash</varname> und kann jeden anderen Schlüssel haben
  230. <emphasis>algorithm</emphasis> identisch mit
  231. <varname>$algorithm</varname>
  232. </para>
  233. </listitem>
  234. </itemizedlist>
  235. <example id="migration.17.zend.file.transfer.validators.hash.example">
  236. <title>Änderungen für die Hash Prüfung von 1.6 zu 1.7</title>
  237. <programlisting language="php"><![CDATA[
  238. // Beispiel für 1.6
  239. $upload = new Zend_File_Transfer_Adapter_Http();
  240. $upload->addValidator('Hash',
  241. array('12345', 'md5'));
  242. // Gleiches Beispiel für 1.7
  243. $upload = new Zend_File_Transfer_Adapter_Http();
  244. $upload->addValidator('Hash',
  245. false,
  246. array('hash1' => '12345',
  247. 'algorithm' => 'md5'));
  248. ]]></programlisting>
  249. </example>
  250. </sect4>
  251. <sect4 id="migration.17.zend.file.transfer.validators.imagesize">
  252. <title>Prüfung: ImageSize</title>
  253. <itemizedlist>
  254. <listitem>
  255. <para>
  256. Alte <acronym>API</acronym> der Methode:
  257. <methodname>Zend_Validate_File_ImageSize($minwidth, $minheight,
  258. $maxwidth, $maxheight)</methodname>
  259. </para>
  260. </listitem>
  261. <listitem>
  262. <para>
  263. Neue <acronym>API</acronym> der Methode:
  264. <methodname>Zend_Validate_File_FilesSize($options)</methodname> wobei
  265. <varname>$options</varname> die folgenden Schlüssel für das Array
  266. akzeptiert: <emphasis>minwidth</emphasis> identisch mit
  267. <varname>$minwidth</varname>, <emphasis>maxwidth</emphasis> identisch
  268. mit <varname>$maxwidth</varname>, <emphasis>minheight</emphasis>
  269. identisch mit <varname>$minheight</varname>,
  270. <emphasis>maxheight</emphasis> identisch mit
  271. <varname>$maxheight</varname>
  272. </para>
  273. </listitem>
  274. </itemizedlist>
  275. <example id="migration.17.zend.file.transfer.validators.imagesize.example">
  276. <title>Änderungen für die ImageSize Prüfung von 1.6 zu 1.7</title>
  277. <programlisting language="php"><![CDATA[
  278. // Beispiel für 1.6
  279. $upload = new Zend_File_Transfer_Adapter_Http();
  280. $upload->addValidator('ImageSize',
  281. array(10, 10, 100, 100));
  282. // Gleiches Beispiel für 1.7
  283. $upload = new Zend_File_Transfer_Adapter_Http();
  284. $upload->addValidator('ImageSize',
  285. false,
  286. array('minwidth' => 10,
  287. 'minheight' => 10,
  288. 'maxwidth' => 100,
  289. 'maxheight' => 100));
  290. ]]></programlisting>
  291. </example>
  292. </sect4>
  293. <sect4 id="migration.17.zend.file.transfer.validators.size">
  294. <title>Prüfung: Size</title>
  295. <itemizedlist>
  296. <listitem>
  297. <para>
  298. Alte <acronym>API</acronym> der Methode:
  299. <methodname>Zend_Validate_File_Size($min, $max,
  300. $bytestring)</methodname>
  301. </para>
  302. </listitem>
  303. <listitem>
  304. <para>
  305. Neue <acronym>API</acronym> der Methode:
  306. <methodname>Zend_Validate_File_Size($options)</methodname> wobei
  307. <varname>$options</varname> die folgenden Schlüssel für das Array
  308. akzeptiert: <emphasis>min</emphasis> identisch mit
  309. <varname>$min</varname>, <emphasis>max</emphasis> identisch mit
  310. <varname>$max</varname>, <emphasis>bytestring</emphasis> identisch mit
  311. <varname>$bytestring</varname>
  312. </para>
  313. </listitem>
  314. </itemizedlist>
  315. <example id="migration.17.zend.file.transfer.validators.size.example">
  316. <title>Änderungen für die Size Prüfung von 1.6 zu 1.7</title>
  317. <programlisting language="php"><![CDATA[
  318. // Beispiel für 1.6
  319. $upload = new Zend_File_Transfer_Adapter_Http();
  320. $upload->addValidator('Size',
  321. array(100, 10000, true));
  322. // Gleiches Beispiel für 1.7
  323. $upload = new Zend_File_Transfer_Adapter_Http();
  324. $upload->addValidator('Size',
  325. false,
  326. array('min' => 100,
  327. 'max' => 10000,
  328. 'bytestring' => true));
  329. ]]></programlisting>
  330. </example>
  331. </sect4>
  332. </sect3>
  333. </sect2>
  334. <sect2 id="migration.17.zend.locale">
  335. <title>Zend_Locale</title>
  336. <sect3 id="migration.17.zend.locale.islocale">
  337. <title>Änderungen bei der Verwendung von isLocale()</title>
  338. <para>
  339. Bezugnehmend auf den Codingstandard mußte <methodname>isLocale()</methodname> so
  340. geändert werden das es ein Boolean zurückgibt. In vorhergehenden Releases wurde im
  341. Erfolgsfall ein String zurückgegeben. Für das Release 1.7 wurde ein
  342. Kompatibilitätsmodus hinzugefügt der es erlaubt das alte Verhalten, das ein String
  343. zurückgegeben wird, zu verwenden, aber das triggert auch eine User Warning die
  344. darauf hinweist das man auf das neue Verhalten wechseln sollte. Das Rerouting
  345. welches das alte Verhalten von <methodname>isLocale()</methodname> durchgeführt
  346. hätte ist nicht länger notwendig, da alle I18n Komponenten jetzt das Rerouting
  347. selbst durchführen.
  348. </para>
  349. <para>
  350. Um die Skripte auf die neue <acronym>API</acronym> zu migrieren muß die Methode
  351. einfach wie anbei gezeigt verwendet werden.
  352. </para>
  353. <example id="migration.17.zend.locale.islocale.example">
  354. <title>Wie man isLocale() von 1.6 nach 1.7 ändern muß</title>
  355. <programlisting language="php"><![CDATA[
  356. // Beispiel für 1.6
  357. if ($locale = Zend_Locale::isLocale($locale)) {
  358. // mach was
  359. }
  360. // Selbes Beispiel für 1.7
  361. // Man sollte den Kompatibilitätsmodus ändern um User Warnings zu verhindern
  362. // Aber man kann das in der Bootstrap tun
  363. Zend_Locale::$compatibilityMode = false;
  364. if (Zend_Locale::isLocale($locale)) {
  365. }
  366. ]]></programlisting>
  367. <para>
  368. Es ist zu beachten das man den zweiten Parameter verwendet kann um zu sehen ob
  369. das Gebietsschema richtig ist ohne das ein Rerouting durchgeführt wird.
  370. </para>
  371. <programlisting language="php"><![CDATA[
  372. // Beispiel für 1.6
  373. if ($locale = Zend_Locale::isLocale($locale, false)) {
  374. // mach was
  375. }
  376. // Selbes Beispiel für 1.7
  377. // Man sollte den Kompatibilitätsmodus ändern um User Warnings zu verhindern
  378. // Aber man kann das in der Bootstrap tun
  379. Zend_Locale::$compatibilityMode = false;
  380. if (Zend_Locale::isLocale($locale, false)) {
  381. if (Zend_Locale::isLocale($locale, true)) {
  382. // gar kein Gebietsschema
  383. }
  384. // Original String ist kein Gebietsschema, kann aber Reroutet werden
  385. }
  386. ]]></programlisting>
  387. </example>
  388. </sect3>
  389. <sect3 id="migration.17.zend.locale.islocale.getdefault">
  390. <title>Änderungen bei der Verwendung von getDefault()</title>
  391. <para>
  392. Die Bedeutung der <methodname>getDefault()</methodname> Methode wurde verändert
  393. durch den Fakt das Framework-weite Gebietsschemata integriert wurden welche mit
  394. <methodname>setDefault()</methodname> gesetzt werden können. Deswegen gibe es nicht
  395. mehr die Kette der Gebietsschemata zurück sondern nur die gesetzten Framework-weiten
  396. Gebietsschemata.
  397. </para>
  398. <para>
  399. Um die eigenen Skripte auf die neue <acronym>API</acronym> zu migrieren, muß einfach
  400. die Methode wie unten gezeigt verwendet werden.
  401. </para>
  402. <example id="migration.17.zend.locale.getdefault.example">
  403. <title>Wie man getDefault() von 1.6 auf 1.7 ändert</title>
  404. <programlisting language="php"><![CDATA[
  405. // Beispiel für 1.6
  406. $locales = $locale->getDefault(Zend_Locale::BROWSER);
  407. // Selbes Beispiel für 1.7
  408. // Man sollte den Compatibility Mode setzen um User Notices zu verhindern
  409. // Das kann in der Bootstrap Datei getan werden
  410. Zend_Locale::$compatibilityMode = false;
  411. $locale = Zend_Locale::getOrder(Zend_Locale::BROWSER);
  412. ]]></programlisting>
  413. <para>
  414. Es ist zu beachten das der zweite Parameter der alten
  415. <methodname>getDefault()</methodname> Implementation nicht mehr vorhanden ist,
  416. aber die zurückgegebenen Werte die gleichen sind.
  417. </para>
  418. </example>
  419. <note>
  420. <para>
  421. Standardmäßig ist das alte Verhalten noch immer aktiv, wirft aber eine User
  422. Notice. Wenn man den eigenen Code zum neuen Verhalten geändert hat sollte man
  423. auch den Compatibility Mode auf <constant>FALSE</constant> setzen damit keine
  424. Notices mehr geworfen werden.
  425. </para>
  426. </note>
  427. </sect3>
  428. </sect2>
  429. <sect2 id="migration.17.zend.translate">
  430. <title>Zend_Translate</title>
  431. <sect3 id="migration.17.zend.translate.languages">
  432. <title>Setzen von Sprachen</title>
  433. <para>
  434. Wenn man die automatische Erkennung von Sprachen verwendet, oder Sprachen manuell
  435. auf <classname>Zend_Translate</classname> setzt kann es sein das man von Zeit zu
  436. Zeit eine Notiz geworfen bekommen die über nicht hinzugefügte oder leere
  437. Übersetzungen schreibt. In einigen vorhergehenden Releases wurde in einigen Fällen
  438. auch eine Exception geworfen.
  439. </para>
  440. <para>
  441. Der Grund ist, das wenn ein Benutzer eine nicht existierende Sprache anfragt, man
  442. einfach keinen Weg hat um festzustellen was falsch ist. Deswegen haben wir diese
  443. Notizen hinzugefügt die einem in den eigenen Logs zeigen das der Benutzer eine
  444. Sprache angefragt hat die man nicht unterstützt. Es ist zu beachten das der Code,
  445. selbst wenn eine Notiz getriggert wird, weiterhin ohne Probleme arbeitet.
  446. </para>
  447. <para>
  448. Aber wenn man einen eigenen Fehler oder Exception Handler, wie XDebug, verwendet
  449. wird man alle Notizen zurückerhalten, selbst wenn man das nicht gewollt hat. Das ist
  450. der Fall, weil diese Handler alle Einstellungen von <acronym>PHP</acronym> selbst
  451. überschreiben.
  452. </para>
  453. <para>
  454. Um diese Notizen wegzubekommen kann man einfach die neue Option 'disableNotices' auf
  455. <constant>TRUE</constant> setzen. Der Standardwert ist <constant>FALSE</constant>.
  456. </para>
  457. <example id="migration.17.zend.translate.example">
  458. <title>Setzen von Sprachen ohne das man Notizen erhält</title>
  459. <para>
  460. Nehmen wir an das wir 'en' vorhanden haben und unser Benutzer 'fr' anfragt was
  461. nicht in unserem Portfolio der übersetzten Sprachen ist.
  462. </para>
  463. <programlisting language="php"><![CDATA[
  464. $language = new Zend_Translate('gettext',
  465. '/path/to/translations',
  466. 'auto');
  467. ]]></programlisting>
  468. <para>
  469. In diesem Fall werden wir eine Notiz darüber erhalten das die Sprache 'fr' nicht
  470. vorhanden ist. Durch das einfache Hinzufügen der Option wird die Notiz
  471. abgeschaltet.
  472. </para>
  473. <programlisting language="php"><![CDATA[
  474. $language = new Zend_Translate('gettext',
  475. '/path/to/translations',
  476. 'auto',
  477. array('disableNotices' => true));
  478. ]]></programlisting>
  479. </example>
  480. </sect3>
  481. </sect2>
  482. <sect2 id="migration.17.zend.view">
  483. <title>Zend_View</title>
  484. <note>
  485. <para>
  486. Die Änderung der <acronym>API</acronym> in <classname>Zend_View</classname> sind nur
  487. dann zu beachten wenn man zum Release 1.7.5 oder höher hochrüstet.
  488. </para>
  489. </note>
  490. <para>
  491. Vor dem 1.7.5 Release wurde das Zend Framework Team darauf aufmerksam gemacht das eine
  492. potentielle Local File Inclusion (<acronym>LFI</acronym>) Schwäche in der
  493. <methodname>Zend_View::render()</methodname> Methode existiert. Vor 1.7.5, erlaubte die
  494. Methode standardmäßig, die Fähigkeit View Skripte zu spezifizieren die Schreibweisen für
  495. Eltern-Verzeichnisse enthalten (z.B. "../" oder "..\"). Das öffnet die Möglichkeit für
  496. eine <acronym>LFI</acronym> Attacke wenn ungefilterte Benutzereingaben an die
  497. <methodname>render()</methodname> Methode übergeben werden:
  498. </para>
  499. <programlisting language="php"><![CDATA[
  500. // Wobei $_GET['foobar'] = '../../../../etc/passwd'
  501. echo $view->render($_GET['foobar']); // LFI Einbruch
  502. ]]></programlisting>
  503. <para>
  504. <classname>Zend_View</classname> wirft jetzt standardmäßig eine Ausnahme wenn so ein
  505. View Skript angefragt wird.
  506. </para>
  507. <sect3 id="migration.17.zend.view.disabling">
  508. <title>Ausschalten des LFI Schutzes für die render() Methode</title>
  509. <para>
  510. Da viele Entwickler gemeldet haben das Sie so eine Schreibweise in Ihren
  511. Anwendungen verwenden die <emphasis>nicht</emphasis> das Ergebnis einer
  512. Benutzereingabe sind, wurde ein spezielles Flag erstellt um das Deaktivieren des
  513. standardmäßigen Schutzes zu erlauben. Es gibt 2 Methoden um das Durchzuführen:
  514. Indem der 'lfiProtectionOn' Schlüssel in den Konstruktor-Optionen übergeben wird,
  515. oder durch den expliziten Aufruf der <methodname>setLfiProtection()</methodname>
  516. Methode.
  517. </para>
  518. <programlisting language="php"><![CDATA[
  519. // Ausschalten über den Konstruktor
  520. $view = new Zend_View(array('lfiProtectionOn' => false));
  521. // Ausschalten über expliziten Aufruf der Methode:
  522. $view = new Zend_View();
  523. $view->setLfiProtection(false);
  524. ]]></programlisting>
  525. </sect3>
  526. </sect2>
  527. </sect1>