-
Notifications
You must be signed in to change notification settings - Fork 25
Expand file tree
/
Copy pathunserialize.xml
More file actions
300 lines (286 loc) · 9.9 KB
/
unserialize.xml
File metadata and controls
300 lines (286 loc) · 9.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 4150dc92749c177758efe59eab23b6a5d32ffda2 Maintainer: nilgun Status: ready -->
<refentry xml:id="function.unserialize" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>unserialize</refname>
<refpurpose>Bir PHP değerini saklanmış gösteriminden oluşturur
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>mixed</type><methodname>unserialize</methodname>
<methodparam><type>string</type><parameter>veri</parameter></methodparam>
<methodparam choice="opt"><type>array</type><parameter>seçenekler</parameter><initializer>[]</initializer></methodparam>
</methodsynopsis>
<simpara>
<function>unserialize</function> işlevi tek bir dizgeleştirilmiş değişken
alır ve bunu tekrar bir PHP değeri haline getirir.
</simpara>
<warning>
<para>
<literal>allowed_classes</literal> seçeneğine bakmaksızın işleve
güvenilmeyen kullanıcı girdisini aktarmayın. Nesneleştirme, nesne
örnekleme ve otomatik yükleme nedeniyle kodun yüklenmesine ve
yürütülmesine neden olabilir ve kötü niyetli bir kullanıcı bundan
yararlanabilir. Kullanıcıya dizeleştirilmiş verileri iletmeniz
gerekiyorsa JSON (<function>json_decode</function> ve
<function>json_encode</function>) aracılığıyla) gibi güvenli,
standart bir veri değişim biçimi kullanın.
</para>
<para>
Harici olarak depolanan dizeleştirilmiş verileri nesneleştirmek gerekirse,
veri doğrulama için <function>hash_hmac</function> kullanımı düşünülebilir.
Verilerin sizden başka hiç kimse tarafından değiştirilmediğinden emin olun.
</para>
</warning>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<variablelist>
<varlistentry>
<term><parameter>veri</parameter></term>
<listitem>
<para>
Dizeleştirilmiş değer.
</para>
<para>
Dizeleştirilmiş bir değişkeni bir nesne haline getirmeye çalışırsanız
PHP nesneyi oluşturduktan sonra otomatik olarak
<link linkend="object.unserialize">__unserialize()</link> veya
<link linkend="object.wakeup">__wakeup()</link> üye işlevini (varsa)
çağıracaktır.
</para>
<note>
<title><link linkend="ini.unserialize-callback-func">
unserialize_callback_func</link> yönergesi</title>
<para>
<link linkend="ini.unserialize-callback-func">unserialize_callback_func</link>
yönergesinde belirtilen geriçağırım işlevi tanımsız bir sınıfın
dizgeleştirmesi kaldırılırken çağrılır. Geriçağırım işlevi
belirtilmezse, nesne <classname>__PHP_Incomplete_Class</classname>
olarak örneklenir.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>seçenekler</parameter></term>
<listitem>
<para>
<function>unserialize</function> işlevine aktarılacacak seçenekleri
içeren ilişkisel bir dizi.
</para>
<table>
<title>Geçerli seçenekler</title>
<tgroup cols="3">
<thead>
<row>
<entry>İsim</entry>
<entry>Tür</entry>
<entry>Açıklama</entry>
</row>
</thead>
<tbody>
<row>
<entry><literal>allowed_classes</literal></entry>
<entry><type>mixed</type></entry>
<entry>
<simpara>
Üç değerdem biri: Kabul edilmesi gereken sınıf isimleri dizisi,
hiçbir sınıfı kabul etmemek için &false; ya da tüm sınıfları
kabul etmek için &true;. Bu seçenek tanımlanırsa ve
<function>unserialize</function>), kabul edilmeyen bir sınıfla
karşılaşırsa, bu sınıf yerine
<classname>__PHP_Incomplete_Class</classname> örneklenecektir.
</simpara>
<simpara>
Bu seçeneğin atlanması, onu &true; olarak tanımlamakla aynıdır:
PHP, belirtilen sınıfları örneklemeye çalışır.
</simpara>
</entry>
</row>
<row>
<entry><literal>max_depth</literal></entry>
<entry><type>int</type></entry>
<entry>
<simpara>
Nesneleştirme sırasında izin verilen veri yapılarının azami
derinliği olup yığıt taşmalarını engellemek için tasarlanmıştır.
Öntanımlı derinlik sınırı <literal>4096</literal> olup
<literal>max_depth</literal>'e <literal>0</literal> atanarak
devre dışı bırakılabilir.
</simpara>
</entry>
</row>
</tbody>
</tgroup>
</table>
</listitem>
</varlistentry>
</variablelist>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Dönüştürülerek döndürülen değer <type>bool</type>,
<type>int</type>, <type>float</type>, <type>string</type>,
<type>array</type> veya <type>object</type> türünde olabilir.
</para>
<para>
Nesneleştirilemeyen bir dizge belirtilmesi durumunda işlev &false; döndürür
ve bir <constant>E_WARNING</constant> çıktılar.
</para>
</refsect1>
<refsect1 role="errors">
&reftitle.errors;
<para>
Nesneler, kendi nesneleştirme işleyicilerinde <classname>Throwable</classname>
yavrulayabilir.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.3.0</entry>
<entry>
Nesneleştirilemeyen bir dizge belirtilmesi durumunda artık bir
<constant>E_WARNING</constant> üretiliyor. Evvelce
<constant>E_NOTICE</constant> üretilirdi.
</entry>
</row>
<row>
<entry>7.4.0</entry>
<entry>
Nesneleştirme sırasında izin verilen yapıların azami derinliğini
ayarlamak için <parameter>seçenekler</parameter> bağımsız
değişkenine <literal>max_depth</literal> öğesi eklendi.
</entry>
</row>
<row>
<entry>7.1.0</entry>
<entry>
<literal>allowed_classes</literal> seçeneği artık katı türde, yani
<type>array</type> veya <type>bool</type> türü dışında bir değer
aktarılırsa <function>unserialize</function> işlevi &false; döndürür ve
bir <constant>E_WARNING</constant> oluşturur.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>- <function>unserialize</function> örneği</title>
<programlisting role="php">
<![CDATA[
<?php
// Burada, oturum verisini $session_data dizisine yüklemek
// için bir veritabanından seçilmiş bir dizgeyi nesneleştireceğiz
// Bu örnek serialize() işlevi örneğinin tamamlayıcısıdır.
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn, "SELECT data FROM sessions WHERE id = ?");
$sqldata = array($_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata) || !odbc_fetch_into($stmt, $tmp)) {
// çalıştırma veya alım başarısız olursa boş bir dizi ilklendireceğiz
$session_data = array();
} else {
// artık dizgeleştirilmiş veri $tmp[0] içinde.
$session_data = unserialize($tmp[0]);
if (!is_array($session_data)) {
// birşeyler yanlış gitmiş, boş bir dizi ilklendirelim
$session_data = array();
}
}
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>- <link linkend="unserialize-callback-func">
unserialize_callback_func</link> örneği</title>
<programlisting role="php">
<![CDATA[
<?php
$serialized_object='O:1:"a":1:{s:5:"value";s:3:"100";}';
// kendi geriçağırım işlevimizi belirtelim
ini_set('unserialize_callback_func', 'mycallback');
function mycallback($classname)
{
// Sınıf tanımınızı içeren bir dosyayı dahil etmeniz yeterlidir
// Hangi sınıf tanımının gerçekleneceğini $classname değişkenine
// bakarak saptayacaksınız
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<warning>
<para>
Hata durumunda veya dizgeleştirilmiş bir &false; değerini nesneleştirmeye
çalışıyorsanız işlev &false; döndürür. Bu özel durumu
<parameter>veri</parameter> bağımsız değişkenini
<literal>serialize(false)</literal> ile karşılaştırarak veya
<constant>E_NOTICE</constant> çıktısını inceleyerek yakalayabilirsiniz.
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>json_encode</function></member>
<member><function>json_decode</function></member>
<member><function>hash_hmac</function></member>
<member><function>serialize</function></member>
<member><link linkend="language.oop5.autoload">Otomatik Yüklenen
Sınıflar</link></member>
<member><link linkend="ini.unserialize-callback-func"
>unserialize_callback_func</link></member>
<member><link linkend="object.wakeup">__wakeup()</link></member>
<member><link linkend="object.serialize">__serialize()</link></member>
<member><link linkend="object.unserialize">__unserialize()</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->