-
Notifications
You must be signed in to change notification settings - Fork 24
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
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ffbe6525350c91d58e1d5b7a52c46c911035c8e0 Maintainer: nilgun Status: ready -->
<sect1 xml:id="function.include" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>include</title>
<?phpdoc print-version-for="include"?>
<simpara>
<literal>include</literal> ifadesi belirtilen dosyayı betiğe ekler ve
içeriğini değerlendirir.
</simpara>
<simpara>
Betiğe dahil edilecek dosyalar önce belirtilen dizinde aranır, eğer bir dizin
belirtilmemişse <link linkend="ini.include-path">include_path</link>
yönergesinde belirtilen yollarda aranır. Dosya
<link linkend="ini.include-path">include_path</link> içinde yoksa
<literal>include</literal> son çare olarak çağrıcı betiğin kendi dizinine ve o
anki çalışma dizinine bakar, bulamazsa bir <constant>E_WARNING</constant>
çıktılar; <function>require</function> için bu davranış bir
<constant>E_ERROR</constant> olarak kendini gösterir.
</simpara>
<simpara>
Son <constant>E_WARNING</constant> veya <constant>E_ERROR</constant>
çıktılanmadan önce, dosyaya erişilemiyorsa, <literal>include</literal> ve
<literal>require</literal>, her ikisi de sırayla ek
<constant>E_WARNING</constant>'leri çıktılar.
</simpara>
<simpara>
Bir dizin belirtilmişse - mutlak (Windows'ta bir sürücü harfi veya
<literal>\</literal> ile başlıyorsa veya Unix sistemlerinde
<literal>/</literal> ile başlıyorsa) veya geçerli dizine göreli
(<literal>.</literal> veya <literal>..</literal> ile başlıyorsa)- <link
linkend="ini.include-path">include_path</link> yönergesine bakılmaz. Örneğin
bir dosya <literal>../</literal> ili başlıyorsa PHP çözümleyicisi dosyayı
betiğin bulunduğu dizinin üst dizininde arayacaktır.
</simpara>
<simpara>
PHP'nin dahil edilen dosyaları nasıl ele aldığı
<link linkend="ini.include-path">include_path</link> yönergesinin
açıklamasında ayrıntılı olarak anlatılmıştır.
</simpara>
<simpara>
Bir dosya bir betiğe dahil edildiğinde, bu dosyanın içerdiği kod,
dosyanın dahil edildiği satır itibariyle ana betikte geçerli olan <link
linkend="language.variables.scope">değişken uzayını</link> miras alır.
Yani, dosyanın dahil edildiği satıra kadar mevcut değişkenlerin hepsi
dahil edilen dosyanın içinde kullanılabilir olacaktır. Bunun yanında,
dahil edilen dosyada tanımlanmış işlevlerin ve sınıfların tamamı ana
betiğin genelinde tanımlanmış sayılır.
</simpara>
<para>
<example>
<title>- Basit bir <literal>include</literal> örneği</title>
<programlisting role="php">
<![CDATA[
vars.php
<?php
$renk = 'yeşil';
$meyve = 'elma';
?>
dnm.php
<?php
echo "Bir $renk $meyve"; / -> Bir
include 'vars.php';
echo "Bir $renk $meyve"; / -> Bir yeşil elma
?>
]]>
</programlisting>
</example>
</para>
<simpara>
<literal>include</literal> deyimi, bir işlevin içinde kullanılırsa dahil
edilmek istenen dosyanın içindeki tüm kodlar sanki o işlev içinde
tanımlanmış gibi çalıştırılacaktır. Bu durumda dahil edilen dosyadaki
kodlar, işlevin, dosyanın dahil edildiği noktadaki değişken uzayını
miras alacaktır. Bu kuralın istisnası dosya dahil edilmeden önce
çözümleyici tarafından işleme sokulan <link
linkend="language.constants.predefined">sihirli sabitler</link>dir.
</simpara>
<para>
<example>
<title>- İşlev içi <code>include</code> kullanımı</title>
<programlisting role="php">
<![CDATA[
<?php
function foo()
{
global $renk;
include 'vars.php';
echo 'Bir $renk $meyve';
}
/* vars.php, foo() işlevinin etki alanındadır
* dolayısıyla $meyve bu alanın dışında
* kullanılamamaktadır. $renk ise global olarak
* tanımlandığından kullanılabilir
*/
foo(); / Bir yeşil elma
echo 'Bir $renk $meyve'; / Bir yeşil
?>
]]>
</programlisting>
</example>
</para>
<simpara>
Bir dosya bir betiğe dahil edildiğinde, çözümleme işlemi PHP kipinden
çıkıp hedef dosyanın başlangıcında HTML kipine geçer ve dosyanın sonuna
kadar HTML kipinde kalır. Bu sebeple, hedef dosyanın içindeki kodlardan
PHP kodları olarak çalıştırılacaklar <link
linkend="language.basic-syntax.phpmode">PHP başlangıç ve bitiş
etiketleri</link> arasına alınmalıdır.
</simpara>
<simpara>
"<link linkend="ini.allow-url-include">URL include sarmalayıcıları</link>"
PHP'de etkinleştirilmiş ise (öntanımlı yapılandırmada etkindirler),
<literal>include</literal> deyiminde yerel dosya yolu belirtmek yerine
(HTTP ya da desteklenen başka bir sarmalayıcı üzerinden - <xref
linkend="wrappers"/> bölümününe bakınız) bir URL kullanabilirsiniz.
Hedef sunucu, hedef dosyayı PHP kodu olarak çalıştırabiliyorsa, ana
betikteki değişkenler dahil edilen dosyaya bir URL istek dizgesi olarak
HTTP GET ile aktarılabilir. Bu durum dahil edilen dosyaya ana dosyanın
değişken uzayını miras olarak bırakmaktan biraz farklı bir şeydir; betik
aslında uzak sunucuda çalıştırılıp yerel betiğe sonuçlar dahil
edilmektedir.
</simpara>
<para>
<example>
<title>- HTTP üzerinden <code>include</code></title>
<programlisting role="php">
<![CDATA[
<?php
/* Bu örnekte mesela.dom sitesinin .php uzantılı dosyaları
* çalıştırabildiği ama .txt uzantılıları çalıştırmadığı
* varsayılmıştır. Ayrıca, buradaki 'Çalışır'ın manası
* $foo ve $bar değişkenlerinin dahil edilen dosyada kullanılabilir
* olduğudur. */
/ Çalışmaz; dosya.txt dosyası mesela.dom sitesinde çalıştırılmaz
include 'http://mesela.dom/dosya.txt?foo=1&bar=2';
/ Çalışmaz; yerel dosya sisteminde 'dosya.php?foo=1&bar=2'
/ adında bir dosya olarak aranır.
include 'dosya.php?foo=1&bar=2';
/ Çalışır.
include 'http://www.example.com/dosya.php?foo=1&bar=2';
?>
]]>
</programlisting>
</example>
</para>
<warning>
<title>Güvenlik uyarısı</title>
<para>
Uzaktaki dosya uzaktaki sunucu tarafından işlenebilir (dosyanın
uzantısına ve uzaktaki sunucunun PHP çalıştırıp çalıştırmadığına bağlı
olarak). Ancak, elde edilecek çıktı yerel sunucuda çalıştırılacağından
bu işlemin sonucu mutlaka geçerli bir PHP betiği üretmek olmalıdır.
Dosyanın uzaktaki sunucuda işlenip sadece sonucun çıktılanmasını
istiyorsanız <function>readfile</function> işlevi daha iyi bir seçim
olacaktır. Aksi takdirde, uzakta çalıştırılan betiğin geçerli ve istenen
kodu üretebilmesini güvence altına alabilmek için özel bir çaba harcamak
gerekir.
</para>
</warning>
<para>
Ayrıca, bu konuyla ilgili olarak <link linkend="features.remote-files"
>Uzaktaki dosyaların kullanımı</link> belgesiyle
<function>fopen</function> ve <function>file</function> işlevlerine de
bakınız.
</para>
<simpara>
<literal>return</literal> kullanımı: <literal>include</literal> başarısız
olursa <literal>FALSE</literal> döndürür ve bir uyarı verir. Başarılı
olursa, içerildikleri dosya tarafından aksi belirtilmedikçe
<literal>1</literal> döndürür. Dahil edilen dosyanın içersinde, bu
dosyanın işlenmesi durdurmak ve dahil eden betiğe geri dönmek için
<function>return</function> kullanılabilir. Ayrıca, dahil edilen
dosyalardan değer döndürmek de mümkündür. Normal bir işlevde olduğu
gibi, <literal>include</literal> çağrısından elde edilen değeri bir
değişkene atayabilirsiniz. Ancak bu durum, uzaktaki dosyalar için,
sadece uzaktaki dosyanın çıktısı <link
linkend="language.basic-syntax.phpmode">geçerli PHP başlangıç ve bitiş
etiketlerine</link> sahipse (herhangi yerel bir dosyada olduğu gibi),
kullanılabilir. Gerekli değişkenler bu etiketlerin arasında
tanımlandığında dosyanın dahil edildiği noktadan itibaren kullanılabilir
olacaklardır.
</simpara>
<para>
<literal>include</literal> özel bir dil oluşumu olduğundan,
bağımsız değişkeninin parantez içine alınması gerekmez. Dönüş değerini
karşılaştırırken buna dikkat edin.
<example>
<title>- <code>include</code> dönüş değerinin karşılaştırılması</title>
<programlisting role="php">
<![CDATA[
<?php
/ çalışmaz, include(('vars.php') == TRUE) olarak değerlendirilir,
/ sonuç include('1') olur
if (include('vars.php') == TRUE) {
echo 'TAMAM';
}
/ çalışır
if ((include 'vars.php') == TRUE) {
echo 'TAMAM';
}
?>
]]>
</programlisting>
</example>
</para>
<