Zend_Serializer-Adapter.xml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20818 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.serializer.adapter">
  5. <title>Zend_Serializer_Adapter</title>
  6. <para>
  7. <classname>Zend_Serializer</classname> Adapter erzeugen eine Brücke für unterschiedliche
  8. Methoden der Serialisierung mit geringem Aufwand.
  9. </para>
  10. <para>
  11. Jeder Adpater hat andere Vor- und Nachteile. In einigen Fällen kann nicht jeder PHP
  12. Datentyp (z.B. Objekte) in die Repräsentation eines Strings konvertiert werden. In den
  13. meisten dieser Fälle wird der Typ in einen ähnlichen Typ konvertiert der serialisierbar
  14. ist -- zum Beispiel werden PHP Objekte oft zu Arrays gecastet. Wenn dies fehlschlägt wird
  15. eine <classname>Zend_Serializer_Exception</classname> geworfen.
  16. </para>
  17. <para>
  18. Anbei ist eine Liste der vorhandenen Adapter.
  19. </para>
  20. <sect2 id="zend.serializer.adapter.phpserialize">
  21. <title>Zend_Serializer_Adapter_PhpSerialize</title>
  22. <para>
  23. Dieser Adapter verwendet die eingebauten PHP Funktionen
  24. <methodname>un/serialize</methodname> und ist eine gute Wahl für einen Standardadapter.
  25. </para>
  26. <para>
  27. Es gibt keine konfigurierbaren Optionen für diesen Adapter.
  28. </para>
  29. </sect2>
  30. <sect2 id="zend.serializer.adapter.igbinary">
  31. <title>Zend_Serializer_Adapter_Igbinary</title>
  32. <para>
  33. <ulink url="http://opensource.dynamoid.com">Igbinary</ulink> ist eine Open Source
  34. Software welche von Sulake Dynamoid Oy herausgegeben wird. Statt Zeit und Platz auf
  35. eine textuelle Repräsentation zu verschwenden, speichert igbinary Datenstrukturen von
  36. PHP in einer kompakten binären Form. Die Einsparungen sind signifikant wenn memcached
  37. oder ähnliche Hauptspeicher-basierte Speicher für die serialisierung der Daten verwendet
  38. wird.
  39. </para>
  40. <para>
  41. Man muss die PHP Erweiterung igbinary am eigenen System installiert haben um diesen
  42. Adapter verwenden zu können.
  43. </para>
  44. <para>
  45. Dieser Adapter nimnt keine Optionen zur Konfiguration an.
  46. </para>
  47. </sect2>
  48. <sect2 id="zend.serializer.adapter.wddx">
  49. <title>Zend_Serializer_Adapter_Wddx</title>
  50. <para>
  51. <ulink url="http://wikipedia.org/wiki/WDDX">WDDX</ulink> (Web Distributed Data eXchange)
  52. ist eine Programmier-Sprache-, Plattform- und ein transport-neutraler datentauschender
  53. Mechanismus für die Übergabe von Daten zwischen unterschiedlichen Umgebungen und
  54. unterschiedlichen Computern.
  55. </para>
  56. <para>
  57. Der Adapter verwendet einfach die <ulink
  58. url="http://php.net/manual/book.wddx.php">wddx_*()</ulink> PHP Funktionen. Lesen Sie
  59. bitte im PHP Handbuch um herauszufinden ob man Sie in der eigenen PHP Installation
  60. aktivieren kann.
  61. </para>
  62. <para>
  63. Zusätzlich wird die PHP Erweiterung <ulink
  64. url="http://php.net/manual/book.simplexml.php">SimpleXML</ulink> verwendet um zu
  65. prüfen ob ein von <methodname>wddx_unserialize()</methodname> zurückgegebener
  66. <constant>NULL</constant> Wert auf einem serialisierten <constant>NULL</constant> Wert
  67. basiert, oder auf ungültigen Daten.
  68. </para>
  69. <para>
  70. Vorhandene Optionen sind:
  71. </para>
  72. <table id="zend.serializer.adapter.wddx.table.options">
  73. <title>Optionen für Zend_Serializer_Adapter_Wddx</title>
  74. <tgroup cols="4">
  75. <thead>
  76. <row>
  77. <entry>Option</entry>
  78. <entry>Datentyp</entry>
  79. <entry>Standardwert</entry>
  80. <entry>Beschreibung</entry>
  81. </row>
  82. </thead>
  83. <tbody>
  84. <row>
  85. <entry><emphasis>comment</emphasis></entry>
  86. <entry><type>string</type></entry>
  87. <entry></entry>
  88. <entry>Ein optionales Kommentar welches im Paket Header vorkommt.</entry>
  89. </row>
  90. </tbody>
  91. </tgroup>
  92. </table>
  93. </sect2>
  94. <sect2 id="zend.serializer.adapter.json">
  95. <title>Zend_Serializer_Adapter_Json</title>
  96. <para>
  97. Der <acronym>JSON</acronym> Adapter bietet eine Brücke zur Komponente
  98. <classname>Zend_Json</classname> und zu ext/json. Lesen Sie bitte die <link
  99. linkend= "zend.json.introduction">Zend_Json Dokumentation</link> für weitere
  100. Informationen.
  101. </para>
  102. <para>
  103. Vorhandene Optionen sind:
  104. </para>
  105. <table id="zend.serializer.adapter.json.table.options">
  106. <title>Optionen für Zend_Serializer_Adapter_Json</title>
  107. <tgroup cols="4">
  108. <thead>
  109. <row>
  110. <entry>Option</entry>
  111. <entry>Datentyp</entry>
  112. <entry>Standardwert</entry>
  113. <entry>Beschreibung</entry>
  114. </row>
  115. </thead>
  116. <tbody>
  117. <row>
  118. <entry><emphasis>cycleCheck</emphasis></entry>
  119. <entry><type>boolean</type></entry>
  120. <entry>false</entry>
  121. <entry>Siehe <xref linkend= "zend.json.advanced.objects1"/></entry>
  122. </row>
  123. <row>
  124. <entry><emphasis>objectDecodeType</emphasis></entry>
  125. <entry><type>Zend_Json::TYPE_*</type></entry>
  126. <entry>Zend_Json::TYPE_ARRAY</entry>
  127. <entry>Siehe <xref linkend= "zend.json.advanced.objects1"/></entry>
  128. </row>
  129. <row>
  130. <entry><emphasis>enableJsonExprFinder</emphasis></entry>
  131. <entry><type>boolean</type></entry>
  132. <entry>false</entry>
  133. <entry>Siehe <xref linkend= "zend.json.advanced.expr"/></entry>
  134. </row>
  135. </tbody>
  136. </tgroup>
  137. </table>
  138. </sect2>
  139. <sect2 id="zend.serializer.adapter.amf03">
  140. <title>Zend_Serializer_Adapter_Amf 0 und 3</title>
  141. <para>
  142. Die <acronym>AMF</acronym> Adapter <classname>Zend_Serializer_Adapter_Amf0</classname>
  143. und <classname>Zend_Serializer_Adapter_Amf3</classname> bieten eine Brücke zum
  144. Serialisierer der Komponente <classname>Zend_Amf</classname>. Lesen Sie bitte die <link
  145. linkend= "zend.amf.introduction">Zend_Amf Dokumentation</link> für weitere
  146. Informationen.
  147. </para>
  148. <para>
  149. Es gibt keine Optionen für diese Adapter.
  150. </para>
  151. </sect2>
  152. <sect2 id="zend.serializer.adapter.pythonpickle">
  153. <title>Zend_Serializer_Adapter_PythonPickle</title>
  154. <para>
  155. Dieser Adapter konvertiert PHP Typen in eine <ulink
  156. url="http://docs.python.org/library/pickle.html">Python Pickle</ulink> String
  157. Repräsentation. Mit Ihm können die serialisierten Daten mit Python gelesen werden und
  158. Pickled Daten von Python mit PHP gelesen werden.
  159. </para>
  160. <para>
  161. Vorhandene Optionen sind:
  162. </para>
  163. <table id="zend.serializer.adapter.pythonpickle.table.options">
  164. <title>Optionen für Zend_Serializer_Adapter_PythonPickle</title>
  165. <tgroup cols="4">
  166. <thead>
  167. <row>
  168. <entry>Option</entry>
  169. <entry>Datentyp</entry>
  170. <entry>Standardwert</entry>
  171. <entry>Beschreibung</entry>
  172. </row>
  173. </thead>
  174. <tbody>
  175. <row>
  176. <entry><emphasis>protocol</emphasis></entry>
  177. <entry><type>integer</type> (0 | 1 | 2 | 3)</entry>
  178. <entry>0</entry>
  179. <entry>
  180. Die Version des Pickle Protokolls welches bei
  181. <methodname>serialize</methodname> verwendet wird
  182. </entry>
  183. </row>
  184. </tbody>
  185. </tgroup>
  186. </table>
  187. <para>
  188. Der Wechsel von Datentypen (PHP zu Python) findet wie folgt statt:
  189. </para>
  190. <table id="zend.serializer.adapter.pythonpickle.table.php2python">
  191. <title>Wechseln des Datentyps (PHP zu Python)</title>
  192. <tgroup cols="2">
  193. <thead>
  194. <row>
  195. <entry>PHP Typ</entry>
  196. <entry>Python Typ</entry>
  197. </row>
  198. </thead>
  199. <tbody>
  200. <row>
  201. <entry><type>NULL</type></entry>
  202. <entry><type>None</type></entry>
  203. </row>
  204. <row>
  205. <entry><type>boolean</type></entry>
  206. <entry><type>boolean</type></entry>
  207. </row>
  208. <row>
  209. <entry><type>integer</type></entry>
  210. <entry><type>integer</type></entry>
  211. </row>
  212. <row>
  213. <entry><type>float</type></entry>
  214. <entry><type>float</type></entry>
  215. </row>
  216. <row>
  217. <entry><type>string</type></entry>
  218. <entry><type>string</type></entry>
  219. </row>
  220. <row>
  221. <entry><type>array</type></entry>
  222. <entry><type>list</type></entry>
  223. </row>
  224. <row>
  225. <entry><type>associative array</type></entry>
  226. <entry><type>dictionary</type></entry>
  227. </row>
  228. <row>
  229. <entry><type>object</type></entry>
  230. <entry><type>dictionary</type></entry>
  231. </row>
  232. </tbody>
  233. </tgroup>
  234. </table>
  235. <para>
  236. Der Wechsel von Datentypen (Python zu PHP) findet wie folgt statt:
  237. </para>
  238. <table id="zend.serializer.adapter.pythonpickle.table.python2php">
  239. <title>Wechseln des Datentyps (PHP zu Python)</title>
  240. <tgroup cols="2">
  241. <thead>
  242. <row>
  243. <entry>Python Typ</entry>
  244. <entry>PHP Typ</entry>
  245. </row>
  246. </thead>
  247. <tbody>
  248. <row>
  249. <entry><type>None</type></entry>
  250. <entry><type>NULL</type></entry>
  251. </row>
  252. <row>
  253. <entry><type>boolean</type></entry>
  254. <entry><type>boolean</type></entry>
  255. </row>
  256. <row>
  257. <entry><type>integer</type></entry>
  258. <entry><type>integer</type></entry>
  259. </row>
  260. <row>
  261. <entry><type>long</type></entry>
  262. <entry>
  263. <type>integer</type> | <type>float</type> | <type>string</type>
  264. | <classname>Zend_Serializer_Exception</classname>
  265. </entry>
  266. </row>
  267. <row>
  268. <entry><type>float</type></entry>
  269. <entry><type>float</type></entry>
  270. </row>
  271. <row>
  272. <entry><type>string</type></entry>
  273. <entry><type>string</type></entry>
  274. </row>
  275. <row>
  276. <entry><type>bytes</type></entry>
  277. <entry><type>string</type></entry>
  278. </row>
  279. <row>
  280. <entry><type>Unicode string</type></entry>
  281. <entry><type>UTF-8 string</type></entry>
  282. </row>
  283. <row>
  284. <entry><type>list</type></entry>
  285. <entry><type>array</type></entry>
  286. </row>
  287. <row>
  288. <entry><type>tuple</type></entry>
  289. <entry><type>array</type></entry>
  290. </row>
  291. <row>
  292. <entry><type>dictionary</type></entry>
  293. <entry><type>associative array</type></entry>
  294. </row>
  295. <row>
  296. <entry>Alle anderen Typen</entry>
  297. <entry><classname>Zend_Serializer_Exception</classname></entry>
  298. </row>
  299. </tbody>
  300. </tgroup>
  301. </table>
  302. </sect2>
  303. <sect2 id="zend.serializer.adapter.phpcode">
  304. <title>Zend_Serializer_Adapter_PhpCode</title>
  305. <para>
  306. Dieser Adapter erzeugt eine Repräsentation an PHP Code der geparst werden kann indem
  307. <ulink url="http://php.net/manual/function.var-export.php">var_export()</ulink>
  308. verwendet wird. Bei der Wiederherstellung werden die Daten ausgeführt indem <ulink
  309. url="http://php.net/manual/function.eval.php">eval</ulink> verwendet wird.
  310. </para>
  311. <para>
  312. Es gibt keine Optionen für die Konfiguration dieses Adapters.
  313. </para>
  314. <warning>
  315. <title>Objekte deserialisieren</title>
  316. <para>
  317. Objekte werden serialisiert indem die magische Methode <ulink
  318. url="http://php.net/manual/language.oop5.magic.php#language.oop5.magic.set-state">__set_state</ulink>
  319. verwendet wird. Wenn die Klasse diese Methode nicht implementiert wird wärend der
  320. Ausführung ein fataler Fehler auftreten.
  321. </para>
  322. </warning>
  323. <warning>
  324. <title>Verwendet eval()</title>
  325. <para>
  326. Der Adapter <classname>PhpCode</classname> verwendet <methodname>eval()</methodname>
  327. für die Deserialisierung. Das führt sowohl zu Performanz- als auch zu einem
  328. potentiellen Sicherheitsproblem da ein neuer Prozess ausgeführt wird. Typischerweise
  329. sollte der Adapter <methodname>PhpSerialize</methodname> verwendet werden solange
  330. man die Lesbarkeit der serialisierten Daten durch Menschen benötigt.
  331. </para>
  332. </warning>
  333. </sect2>
  334. </sect1>