1
0
mirror of https://github.com/php/doc-tr.git synced 2026-03-24 07:12:18 +01:00
Files
2022-11-17 16:39:56 +03:00

344 lines
12 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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
ı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>
<para>
<example>
<title>- <code>include</code> ve <code>return</code> deyimleri</title>
<programlisting role="php">
<![CDATA[
return.php
<?php
$var = 'PHP';
return $var;
?>
noreturn.php
<?php
$var = 'PHP';
?>
testreturns.php
<?php
$foo = include 'return.php';
echo $foo; // 'PHP' basar
$bar = include 'noreturn.php';
echo $bar; // 1 basar
?>
]]>
</programlisting>
</example>
</para>
<simpara>
<literal>include</literal> işlemi başarılı olduğundan
<literal>$bar</literal>, <literal>1</literal> değerine sahiptir.
Yukarıdaki örnekler arasındaki farklara dikkat edin. Birincisi
<function>return</function> deyimini dahil edilen dosyada kullanırken
ikincisi kullanmıyor. Dosya dahil edilemediği durumda, &false;
döndürülüyor ve bir <constant>E_WARNING</constant> üretiliyor.
</simpara>
<para>
Dahil edilen dosyanın içinde tanımlanmış işlevler varsa,
<function>return</function> deyiminden önce ya da sonra olduğundan
bağımsız olarak ana betik içersinde kullanılabilirler. Dosya iki defa
dahil edilmişse, PHP ölümcül hata verir çünkü bildirilmiş işlevler
tekrar bildirilmeye calışılmış olur. Dosyanın halihazırda dahil edilip
edilmediğini kendiniz tespit edip koşula bağlı <function>return</function>
çalıştırmak yerine, <function>include_once</function> kullanmanız
önerilir.
</para>
<simpara>
Bir PHP dosyasını bir değişkene "dahil" etmenin diğer bir yolu, çıktıyı
<link linkend="ref.outcontrol">Çıktı Denetim İşlevleri</link>ni
<literal>include</literal> ile birlikte kullanarak yakalamaktır. Örnek:
</simpara>
<para>
<example>
<title>- Bir PHP dosyasını bir dizgeye dahil etmek için tampon
kullanımı</title>
<programlisting role="php">
<![CDATA[
<?php
$string = get_include_contents('somefile.php');
function get_include_contents($filename) {
if (is_file($filename)) {
ob_start();
include $filename;
return ob_get_clean();
}
return false;
}
?>
]]>
</programlisting>
</example>
</para>
<para>
Betiğinize dosyaları otomatik olarak dahil etmek için, &php.ini;
içersindeki <link linkend="ini.auto-prepend-file"
>auto_prepend_file</link> ve <link linkend="ini.auto-append-file"
>auto_append_file</link> yapılandırma seçeneklerini inceleyebilirsiniz.
</para>
&note.language-construct;
<simpara>
Ayrıca, <function>require</function>,
<function>require_once</function>, <function>include_once</function>,
<function>readfile</function>, <function>virtual</function> ve
<link linkend="ini.include-path">include_path</link>'a da bakınız.
</simpara>
</sect1>
<!-- 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
-->