1
0
mirror of https://github.com/php/doc-tr.git synced 2026-03-23 23:02:09 +01:00
Files
archived-doc-tr/chapters/tutorial.xml
Nilgün Belma Bugüner c2b5601293 some corrections
2025-09-02 11:17:47 +03:00

504 lines
21 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"?>
<!-- EN-Revision: 1fd637525fd3bbaec04f6fff80eeb33fce880b10 Maintainer: tpug Status: ready -->
<chapter xml:id="tutorial" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Basit bir eğitmen</title>
<para>
Bu bölümde PHP ile ilgili en temel bilgilerdan bahsedilecek,
kısa ve basit bir eğitmenden yararlanılacaktır. Bu eğitmen yalnızca PHP ile
etkileşimli site sayfaları geliştirmeyi ele alır, ancak PHP'nin yeteneği
yalnızca site sayfaları oluşturmakla sınırlı değildir. Daha fazla bilgi için
<link linkend="intro-whatcando">PHP'nin yapabildikleri</link> bölümü
incelenebilir.
</para>
<para>
PHP tarafından etkinleştirilen site sayfaları normal HTML sayfaları
gibidir ve bu sayfaları normal HTML sayfaları için kullanılan
yöntemlerle oluşturulabilir ve düzenlenebilir.
</para>
<section xml:id="tutorial.requirements">
<title>Neye ihtiyaç var?</title>
<para>
Bu eğitmen süresince HTTP sunucusunda PHP desteğinin etkinleştirilmiş
olduğu ve tüm <filename class="extension">.php</filename> uzantılı dosyaların PHP
tarafından yorumlandığı varsayılacaktır. Çoğu sunucuda, bu uzantı PHP
dosyaları için öntanımlı dosya uzantısıdır, ancak emin olmak için
sunucunun yöneticisinden doğru bilgi edinilebilir. Kullanılan sunucu
PHP'yi destekliyorsa, başka hiçbir şeye ihtiyaç yok demektir.
Yalnızca <filename class="extension">.php</filename> uzantılı dosyaları oluşturup
sunucunun belge dizinlerine koymak, sunucunun bu dosyayı otomatik
olarak işleme koyması için yeterli olacaktır. Herhangi
bir şeyi derlemek ya da fazladan bir araç kurulumu yapmak
gerekmemektedir. PHP tarafından etkinleştirilen dosyalar yeni bir tür
HTML dosyası olarak düşünülebilir. Öyle ki, artık
HTML dosyasının içine sihirli birtakım etiketler konabilir ve bu
etiketler sayesinde istenen her tür işlem gerçekleştirilebilir.
</para>
<para>
Çok değerli olan band genişliği boşa harcanmadan yerel olarak geliştirme
yapılmak isteniyor olsun. Bu durumda,
<link xlink:href="&url.apache;">Apache</link> gibi bir HTTP sunucusunun
ve elbette <link xlink:href="&url.php.downloads;">PHP</link>&apos;nin
indirilmesi ve kurulması gerekecektir. Bu ikilinin yanında,
<link xlink:href="&url.mysql.docs;">MySQL</link> gibi bir veritabanının
da indirilip kurulması iyi olacaktır.
</para>
<para>
Bu üçlüyü tek tek kurmak yerine daha basit bir yol izlenebilir.
Bu kılavuz <link linkend="install">PHP için kurulum bilgileri</link>
(HTTP sunucunuzun halihazırda kurulu olduğunu varsayılır) bölümüne sahiptir.
PHP&apos;yi kurmakta sorun yaşanırsa, sorunların çözümü için
<link xlink:href="&url.php.mailing-lists;">kurulum posta listesi</link>'ne
başvurulabilir. Daha basit bir yoldan gitmek istenirse, işletim
sistemine uygun olan <link xlink:href="&url.installkits;">ön
yapılandırmalı paket</link>ler seçilebilir ve tüm bu araçlar bir kaç fare
tıklamasıyla otomatik olarak yüklenebilir. MacOSX, Linux ve Windows
dahil olmak üzere birçok işletim sistemine PHP destekli bir HTTP sunucusu
kurmak oldukça kolaydır. Linux üzerinde,
<link xlink:href="&url.rpmfind;">rpmfind</link> ve
<link xlink:href="&url.rpmfind.pbone;">PBone</link> gibi araçlar RPM
dosyalarını bulmakta yardımcı olacaktır. Debian için ise
<link xlink:href="&url.apt-get;">apt-get</link> sayfası ziyaret
edilebilir.
</para>
</section>
<section xml:id="tutorial.firstpage">
<title>İlk PHP-etkin sayfa</title>
<para>
<filename>merhaba.php</filename> isimli bir dosya oluşturulup HTTP
sunucusunun belge kök dizinine (<varname>DOCUMENT_ROOT</varname>)
aşağıdaki içerikle kaydedilebilir:
</para>
<para>
<example>
<title>- İlk PHP betiği: <filename>merhaba.php</filename></title>
<programlisting role="php">
<![CDATA[
<?php
echo "Merhaba Dünya";
?>
]]>
</programlisting>
<simpara>
Tarayıcı kullanılarak HTTP sunucusunun adresine erişilebilir, bunun için
sunucu alan adının sonuna <literal>/merhaba.php</literal> eklemek
yeterli olacaktır. Yerel olarak geliştirme yaparken bu URL
<literal>http://localhost/merhaba.php</literal> veya
<literal>http://127.0.0.1/merhaba.php</literal> ya da
<literal>http://[::1]/merhaba.php</literal> gibi bir şey olacaktır,
ancak bu HTTP sunucusunun yapılandırma ayarlarına bağlıdır.
</simpara>
<simpara>
PHP normal bir HTML sayfasına gömülebilir. Bu, HTML belgesinin içine
aşağıdaki örnekte gösterildiği gibi PHP ifadelerinin yazılabileceği
anlamına gelir:
</simpara>
<programlisting role="php">
<![CDATA[
<!DOCTYPE html>
<html>
<head>
<title>PHP Denemesi</title>
</head>
<body>
<?php echo '<p>Merhaba Dünya</p>'; ?>
</body>
</html>
]]>
</programlisting>
<simpara>
Eğer her şey düzgün yapılandırılmışsa, bu dosya PHP tarafından işlenecek
ve tarayıcıya aşağıdaki çıktı gönderilecektir:
</simpara>
<screen role="html">
<![CDATA[
<html>
<head>
<title>PHP Denemesi</title>
</head>
<body>
<p>Merhaba Dünya</p>
</body>
</html>
]]>
</screen>
</example>
</para>
<para>
Bu kod gördüğünüz gibi son derece basittir ve esasında böyle bir sayfa
oluşturmak için PHP&apos;ye gereksinim yoktur. Görüntülenen:
PHP&apos;nin <function>echo</function> deyimi kullanılarak elde edilen
<literal>Merhaba Dünya</literal> cümlesidir. Bu dosyanın hiçbir şekilde
<emphasis>çalıştırılabilir olmasına ya da özel bir türde olmasına ihtiyaç
duyulmaz</emphasis>. Sunucu, bu dosyanın PHP tarafından
işlenmesi gerektiğini bilir, çünkü dosyaya ".php" uzantısı tanımlanmıştır.
Sunucu bu uzantıya sahip dosyaları PHP'ye aktaracak biçimde
yapılandırılmıştır. Bu dosya birtakım özel etiketlerle birçok ilginç
işlem yapılmasını sağlayan bir tür HTML dosyası olarak düşünülebilir.
</para>
<para>
Bu örnek denendiği halde hiçbir çıktı alınamazsa, dosyanın
indirilmesi istendiyse ya da dosyanın tüm içeriği metin olarak ekranda
görünüyorsa, büyük ihtimalle sunucunun PHP desteği etkinleştirilmemiştir
ya da sunucu doğru yapılandırılmamıştır. Sistem yöneticisinden kılavuzdaki
<link linkend="install">Kurulum</link> bölümünü kullanarak PHP&apos;yi
etkinleştirmesi istenebilir. Yerel olarak geliştirme yapılıyorsa, kurulum
bölümü okunarak herşeyin doğru yapılandırılması sağlanabilir. Çıktıyı
sağlayan sunucudaki dosyaya <code>http://</code> üzerinden erişilmelidir.
Dosya <code>file://</code> üzerinden isteniyorsa, PHP tarafından
işlenmeyecektir. Sorun her şeye rağmen devam ediyorsa,
<link xlink:href="&url.php.support;">PHP desteği alma</link> yöntemleri
kullanılabilir.
</para>
<para>
Bu örneğin amacı özel PHP etiketi biçemini göstermektir. Örnekte
<literal>&lt;?php</literal> ile PHP başlangıç etiketi belirtilmektedir.
Sonra PHP komutu yazılmış ve kapanış etiketi <literal>?&gt;</literal>
kullanarak PHP kipinden çıkılmıştır. Bir HTML dosyasında bu yöntem
kullanılarak gereken yerde PHP kipine girip çıkılabilir. Daha fazla bilgi
için, kılavuzun <link linkend="language.basic-syntax">temel PHP sözdimi</link>
bölümünü okunabilir.
</para>
<note>
<info><title>Satır-sonları hakkında</title></info>
<para>
Satır-sonu karakterlerinin HTML içinde bir önemi yoktur, bununla birlikte
HTML kodunun göze hoş görünmesi için satır-sonu karakterlerini kullanmak
gerekir. <literal>?&gt;</literal> kapama etiketinin hemen ardından gelen
satır-sonu karakterini PHP silecektir. Dosyanın içine çok sayıda PHP
kodu konulması veya hiçbir şey çıktılamayan betiklerin dosyaya dahil
edilmesi durumunda bu çok işe yarar. Ancak bu biraz kafa karıştırıcı
olabilir. <literal>?&gt;</literal> kapama etiketinden sonra bir
satır-sonu karakterinin çıktılanması istenirse, ya kapama
etiketinden sonra bir boşluk bırakıp onun ardına satır-sonu karakteri
konulmalı ya da PHP kodunun son echo/print deyiminin sonuna bir satır-sonu
karakteri eklenmelidir.
</para>
</note>
<note>
<title>Metin Düzenleyiciler Hakkında</title>
<para>
PHP dosyalarını oluşturmak, düzenlemek ve yönetmek için birçok metin
düzenleyici ve Bütünleşik Geliştirme Ortamı (BGO) bulunmaktadır.
Bu araçların bir kısmı
<link xlink:href="&url.phpeditorlist;">PHP Düzenleyicileri Listesi</link>
bölümünde listelenmiştir. Önerilmesi istenen bir düzenleyici
varsa, yukarıdaki sayfayı ziyaret edilip sayfa idarecisinden
önerilmek istenen düzenleyicinin bu listeye eklemesi rica edilmelidir. Söz
dizimi vurgulaması olan bir düzenleyicinin büyük yardımı olur.
</para>
</note>
<note>
<title>Kelime İşlemciler Hakkında</title>
<para>
StarOffice Writer, Microsoft Word ve Abiword gibi kelime işlemciler PHP
dosyalarını düzenlemek için uygun değildir. Eğer bu deneme betiği
için bunlardan biri kullanılmak istenirse, dosyanın <emphasis>salt
metin</emphasis> olarak kaydedildiğinden emin olunmalıdır, aksi takdirde
PHP&apos;nin betiği okuması ve çalıştırması mümkün olmayacaktır.
</para>
</note>
<para>
Artık çalışır bir PHP betiği başarıyla oluşturulduğuna göre, PHP
betiklerinin en ünlüsünü oluşturma zamanı geldi demektir!
<function>phpinfo</function> işlevi çalıştırılıp sistem ve
yapılandırma ilgili
<link linkend="language.variables.predefined">öntanımlı değişkenler</link>,
yüklü PHP modülleri ve <link linkend="configuration">yapılandırma</link>
ayarları gibi konularda faydalı birçok bilgiye ulaşılabilir. Bu önemli
bilgiler için biraz vakit ayrılması ve bunların incelenmesi önerilir.
</para>
<para>
<example>
<title>- PHP ile sistem bilgisine ulaşmak</title>
<programlisting role="php">
<![CDATA[
<?php phpinfo(); ?>
]]>
</programlisting>
</example>
</para>
</section>
<section xml:id="tutorial.useful">
<title>İşe yarar bir şey</title>
<para>
Bu kez kod daha işe yarar bir şey yapsın. Ziyaretçinin hangi tarayıcıyı
kullandığı tespit edilebilir. Bunun için, ziyaretçinin tarayıcısı
tarafından HTTP isteği ile birlikte gönderilen kullanıcı aracısı
dizgesine bakılır. Bu bilgi bir
<link linkend="language.variables">değişkende</link> saklanır. Değişkenler
PHP'de her zaman dolar imi ile başlar. Şu an için ilgilenilen değişken
<varname>$_SERVER['HTTP_USER_AGENT']</varname>'tir.
</para>
<note>
<para>
<varname>$_SERVER</varname> PHP kullanımına ayrılmış özel bir değişken
olup HTTP sunucusunun tüm bilgilerini içerir. Bu tür değişkenlere süper
küreseller denir. Bu konuda daha ayrıntılı bilgi <link
linkend="language.variables.superglobals">Süper Küreseller</link>
bölümünde bulunabilir.
</para>
</note>
<para>
Bu değişkenin değerinin görüntülenmesi için yapılacaklar:
</para>
<para>
<example>
<title>- Bir değişkeni (dizi öğesini) yazdırmak</title>
<programlisting role="php">
<![CDATA[
<?php echo $_SERVER['HTTP_USER_AGENT']; ?>
]]>
</programlisting>
<para>
Bu betiğin çıktısı şöyle bir dizge olabilirdi:
</para>
<screen role="html">
<![CDATA[
Mozilla/5.0 (Linux) Firefox/112.0
]]>
</screen>
</example>
</para>
<para>
PHP'de birçok farklı değişken <link linkend="language.types">türü</link>
mevcuttur. Yukardaki örnekte bir
<link linkend="language.types.array">dizi</link>ye ait bir öğe yazdırıldı.
Diziler çok daha kullanışlı olabilir.
</para>
<para>
<varname>$_SERVER</varname> PHP tarafından kullanıma otomatik
olarak sunulan bir değişkendir. Kullanım kılavuzunun
<link linkend="reserved.variables">Öntanımlı Değişkenler</link>
bölümünden tümünün listesine ulaşılabilir ya da önceki örnekte
kullanılan <function>phpinfo</function> işlevi ile üretilen çıktıya
bakarak bütün listeye ulaşılabilir.
</para>
<para>
PHP etiketinin içine birden çok PHP komutu konabilir ve tek bir echo
komutundan daha fazlasını yapan küçük kodlar oluşturulabilir.
Örneğin, ziyaretçin Firefox kullanıp kullanmadığı şöyle saptanabilir:
</para>
<para>
<example>
<title>- <link linkend="language.control-structures">Denetim yapılarının
</link> ve <link linkend="language.functions">işlevlerin</link> kullanım
örneği</title>
<programlisting role="php">
<![CDATA[
<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
echo 'Firefox kullanıldığı saptandı';
}
?>
]]>
</programlisting>
<para>
Bu betiğin çıktısı şöyle olabilirdi:
</para>
<screen role="html">
<![CDATA[
Firefox kullanıldığı saptandı.
]]>
</screen>
</example>
</para>
<para>
Burada birkaç yeni kavram devreye sokuldu. Örneğin, <link
linkend="control-structures.if">if</link> deyimi; C dilinde
kullanılan temel sözdizimine aşinalık varsa, bu kullanım tanıdık
gelecektir. Aksi takdirde, giriş düzeyinde bir PHP kitabı edinilmesi ve ilk
birkaç bölümünün okunması ya da kılavuzun <link linkend="langref">Dil
Başvuru Kılavuzu</link> bölümünün okunması faydalı olacaktır.
</para>
<para>
Devreye sokulan ikinci kavram, <function>str_contains</function> işlevi ile
yapılan çağrı oldu. <function>str_contains</function>, bir dizgeyi başka bir
dizgenin içinde arayan yerleşik bir PHP işlevidir. Burada
<varname>$_SERVER['HTTP_USER_AGENT']</varname> içinde (samanlık)
<literal>'Firefox'</literal> dizgesi (iğne) aranıyor. İğne samanlıkta
bulunursa &true;, aksi takdirde &false; döner.
<link linkend="control-structures.if">if</link> ifadesinin sonucu
&true; olduğu takdirde kaşlı ayraçlar arasındaki kod
çalıştırılır. Aksi takdirde kod çalıştırılmaz. <link
linkend="control-structures.if">If</link>, <link
linkend="control-structures.else">else</link> gibi denetim yapıları ile
<function>strtoupper</function> ve <function>strlen</function> gibi
işlevler kullanılarak benzer örnekler yazılabilir. İlgili her
kılavuz sayfası aynı zamanda örnekler de içermektedir. Bu işlevlerin nasıl
kullanması gerektiğinden emin olunamıyorsa, kılavuzdaki <link
linkend="about.prototypes">bir işlev tanımı nasıl okunur</link> ve <link
linkend="language.functions">PHP işlevleri</link> bölümleri
okunabilir.
</para>
<para>
Bu bir adım öteye taşınabilir ve bir PHP kodunun tam ortasındayken
bile HTML kipine nasıl girilip çıkılabileceği gösterilebilir:
</para>
<para>
<example>
<title>- HTML ve PHP kiplerini karıştırmak</title>
<programlisting role="php">
<![CDATA[
<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
?>
<h3>str_contains() false döndürmemiş olmalı</h3>
<p>Firefox kullanıldığı saptandı.</p>
<?php
} else {
?>
<h3>str_contains() false döndürmüş olmalı</h3>
<p>Firefox kullanılmadığı saptandı.</p>
<?php
}
?>
]]>
</programlisting>
<para>
Bu betikten elde edilebilecek sonuçlardan biri:
</para>
<screen role="html">
<![CDATA[
<h3>str_contains() false döndürmemiş olmalı</h3>
<p>Firefox kullanıldığı saptandı.</p>
]]>
</screen>
</example>
</para>
<para>
Bir çıktı üretmek için PHP echo komutunu kullanmak yerine, PHP kipinden
çıkıldı ve düz HTML gönderildi. Burada dikkat edilmesi gereken önemli
nokta, betiğin mantıksal akışının değişmiyor olmasıdır.
<function>str_contains</function> işlevinden edinilen sonuca göre HTML kod
çiftlerinden yalnızca biri görüntüleyiciye gönderilmektedir. Başka bir
deyişle, bu işleyiş <literal>Firefox</literal> dizgesinin bulunup
bulunmamasına bağlıdır.
</para>
</section>
<section xml:id="tutorial.forms">
<title>Form Kullanımı</title>
<para>
PHP'nin en güçlü özelliklerinden biri HTML formlarına yaklaşım
biçimidir. Bilinmesi gereken ilk önemli durum, form içindeki tüm
elemanların PHP tarafından otomatik olarak kullanılabilir olacağıdır.
PHP ile formların kullanımı ve daha ayrıntılı bilgi için <link
linkend="language.variables.external">Dış kaynaklı değişkenler</link>
bölümü okunabilir. Örnek HTML formu:
</para>
<para>
<example>
<title>- Örnek HTML formu</title>
<programlisting role="html">
<![CDATA[
<form action="action.php" method="post">
<label for="name">İsminiz:</label>
<input name="name" id="name" type="text">
<label for="age">Yaşınız:</label>
<input name="age" id="age" type="number">
<button type="submit">Gönder</button>
</form>
]]>
</programlisting>
</example>
</para>
<para>
Bu formda özel hiçbir şey yoktur. Hiçbir özel etiket içermeyen düz bir
HTML formudur. Kullanıcı formu doldurup 'Gönder' tuşuna bastığında,
<filename>action.php</filename> sayfası çağrılır. Bu dosyaya aşağıdakiler
yazılabilir:
</para>
<para>
<example>
<title>- Formdan veri yazdırmak</title>
<programlisting role="php">
<![CDATA[
Merhaba <?php echo htmlspecialchars($_POST['name']); ?>.
Siz <?php echo (int) $_POST['age']; ?> yaşındasınız.
]]>
</programlisting>
<para>
Bu betikten elde edilecek örnek çıktı:
</para>
<screen role="html">
<![CDATA[
Merhaba Ahmet. Siz 22 yaşındasınız.
]]>
</screen>
</example>
</para>
<para>
<function>htmlspecialchars</function> ve <literal>(int)</literal>
kısımları haricinde yapılan iş oldukça açıktır.
<function>htmlspecialchars</function> işlevi HTML'ye özel karakterlerin
doğru şekilde kodlandığından emin olunmasını sağlar, dolayısıyla
başkaları sayfanıza dışardan HTML etiketleri veya Javascript
yerleştiremez. Yaş alanınında ise değerin bir tamsayı olması gerektiği
bilindiğinden değerin <type>int</type> türüne <link
linkend="language.types.typecasting">dönüştürülmesiyle</link> otomatik
olarak bu alana girilmesi olası başı boş karakterlerden de kurtulmuş
olunmaktadır. Ayrıca, bunun PHP'de otomatik olarak yapılmasını
sağlamak için <link linkend="ref.filter">süzgeç</link> eklentisi de
kullanılabilirdi. <varname>$_POST[&apos;isim&apos;]</varname> değişkeni
ve <varname>$_POST[&apos;yaş&apos;]</varname> değişkenleri
PHP tarafından otomatik olarak oluşturulur. Daha önce
<varname>$_SERVER</varname> süper küresel değişkeni kullanılmıştı,
yukarıda ise tüm POST verisini içeren <varname>$_POST</varname> süper küresel
değişkeni tanıtıldı. Formda tanımlı <emphasis>yöntem</emphasis>in POST
oluşuna dikkat edilmelidir. <emphasis>GET</emphasis> yöntemi kullanılmış
olsaydı, form bilgileri <varname>$_GET</varname> süper küresel değişkenine
atanmış olacaktı. Bunların haricinde, istemciden gelen verinin hangi
kaynaktan geldiği önemli değilse <varname>$_REQUEST</varname>
süper küreseli de kullanılabilirdi. Bu değişken GET, POST ve COOKIE
verilerinin birleşiminden oluşur.
</para>
</section>
<section xml:id="tutorial.whatsnext">
<title>Sonraki adım nedir?</title>
<para>
Edinilen yeni bilgilerle kılavuzun birçok bölümünün daha kolay
anlaşılabilmesi ve okuyucunun örnek arşivinde bulunan birçok betiği
kolayca okuyabilir duruma gelmesi amaçlanmıştır.
</para>
<para>
PHP ile neler yapabileceği ile ilgili sunumlara ulaşmak için,
<link xlink:href="&url.php.talks;">&url.php.talks;</link> adresindeki PHP
Konferans Malzemeleri Sitesi ziyaret edilebilir.
</para>
</section>
</chapter>
<!-- 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
-->