|
Dizi Değişkenler
Nesneler
PHP İşbaşında
Dosya İşlemleri
PHP'ye Giriş
C/C++, Pascal,
hatta Visual Basic bilen kişiler için PHP öğrenmek hemen hemen
bir öğleden sonrayı ayırmak suretiyle yapılabilecek bir iştir.
Bu dillere aşina olmayanlar ise belki bir kaç öğleden
sonralarını ayırmak zorunda kalabilirler! PHP, bir Script
dilidir; yani kodları düz yazı dosyaları halinde kaydedilir ve
kullanılacağı ortamda bir yorumlayıcı tarafından yorumlanır. Bu,
PHP ile yazacağınız programları, derlemek yani ortaya bir EXE
veya çalıştırılabilir başka bir dosya çıkartmaya gerek olmadığı
anlamına gelir. Fakat PHP Script'lerinizi çalıştırabilmek için
bu dili bilen bir programa ihtiyacınız vardır. Bu programın tek
başına (komut istemci penceresinde veya terminal ekranında)
çalışması mümkün olduğu gibi, Web Server tarafından da
çalıştırılabilir olması gerekir. Başka bir deyişle Web Sunucu
programının PHP anlar hale getirilmesini sağlamak zorundayız.
PHP yorumcusu,
bugün Zend-çekirdeği adı verilen bir Scripting teknolojine
dayalı olarak, Zeev Suraski ile Andi Gutmans tarafından
sıfırdan, tamamen yeniden yazılmış bulunuyor. Zend, tıpkı
Windows Script Host ve mesela Visual Basic for Applications (VBA)
gibi, işletim sistemine kendisi ile uyumlu Script dilleriyle
yazılmış programları çalıştırma imkanı kazandıran bir
teknolojidir (Zend konusunda ek bilgiyi Internet'te www.zend.com
adresinde bulabilirsiniz.) Bugün bu dilin resmî adı "PHP:
Hypertext Preprocessor" (Hiper-metin ön-işlemcisi) olarak
değiştirildi, ve çeşitli Web Server'ların PHP dili anlaması için
gerekli yorumlayıcıları yeniden üretlidi. 20 Ocak 200'de
İsrail'de PHP'nin ilk uluslararası konferansı yapıldı ve 4'ncü
sürümünün betası ortaya kondu.
Peki ama PHP
nedir?
PHP ile artık
oturup her türlü işlevselliği sahip programlar yazabilirsiniz;
yani PHP başlı başına uygulama alanları bulabilecek düzeye
ulaşmıştır. Başka bir deyişle PHP ile oyun programından tutun
veritabanı yönetimine kadar hemen her türlü programı
yazabilirsiniz. Bizi bu kitapçıkta ilgilendiren tarafıyla PHP,
Web Sunucu'ya bir takım işler yaptırmak için program yazma
dilidir. Tıpkı CGI/Perl veya ASP ya da ColdFusion, Java (Javascript
değil!) gibi! PHP kodları, oluşturacağımız HTML sayfalarında
HTML etiketlerinin arasında kendi özel ayracı içinde yazılır:
<html>
<?PHP
echo ("Merhaba
Dünya!");
?>
</html>
İster kişisel
bilgisayarımızda, ister gerçek Internet ortamında olsun, bir Web
Sunucu, ziyaretçinin (Internet istemci programının, Browser'ın)
talep ettiği dosya adının uzatması olarak ".PHP," ".PHP2,"
".PHP3," veya ".PHP4" görünce, kendine kendine, "Yine bana iş
çıktı!" diye düşünür! Çünkü Web Server, uzatması ".htm" veya
".html" olan bir dosyayı, kendi sabit disklerinden birinde bulur
ve zahmetsizce, ziyaretçinin bilgisayarına gönderir. Fakat, ".asp,"
.pl," ".cfm" gibi, ".PHP" uzatması, Web Sunucu'ya bu sayfayı
olduğu gibi, alıp ziyaretçinin Browser'ına göndermek yerine,
önce PHP yorumlayıcıyı çağırarak, ona teslim etmesi gerektiğini
bildirir. PHP yorumlayıcısı (yani Windows ortamında PHP.exe veya
4'ncü sürümle gelen PHP4isapi.dll, Unix ve türevlerinde
çalıştırılabilir PHP dosyası), kendisine teslim edilen bu
belgede önce "<?PHP" ve "?>" ayraçları arasındaki PHP kodlarını
seçerek alır ve gereği ne ise onu yapar. Bu ayraçların içinde
kalan kodlar, bizim yapılmasını istediğimiz işlemin
komutlarıdır. HTML ile yetinmeyip, PHP kullanmamızın sebebi, bu
komutların HTML'in yapayacağı şeyleri yapmasıdır.
HTML'in
yapamayacağı şeylerin başında, Web Sunucusu'nda yapılacak işler
vardır. Sözgelimi HTML etiketlerini kullanarak, Web
Sunucusu'ndaki bir veritabanı dosyasını açıp, içindeki verileri
okuyamayız. HTML yoluyla Web Sunucusu'nun sabit disklerindeki
düz yazı dosyalarını da okuyamayız ve bu disklere dosya
yazamayız. HTML etiketleri ile Web ziyaretçimizden bilgi
edinebilir ve bunları Sunucu'ya yollayabiliriz; ama o kadar! Bu
bilgileri işe yarar şekle sokmak için bize Server'da çalışan bir
program gerekir. Server'da çalışan program, EXE ve DLL veya JSP
(Java Server Pages) gibi bir "gerçek program"; veya Perl, ASP ve
PHP gibi Script diliyle yazılmış bir program olabilir. (Gerçek
programları yazanlar, tabiî, sizin Script diliyle yazılmış
programlara "program" demenize çok kızarlar! Ama bu Script
pogramlarının program olmasını hiç engellemez.)
Ne diyorduk? Web
Sunucu, ".PHP" uzatmasını görünce telaşa kapılır, bu dosyayı PHP
yorumlayıcısına verir ve o da "<?PHP" ve "?>" ayraçları içindeki
kodları icra eder, demiştik. Bu icraatın sonunda ortaya çıkan
ürün eğer ziyaretçiye gönderilecekse, HTML etiketleri içinde
gönderilir; yani ziyaretçi asla PHP kodlarını göremez. Kimi
zaman PHP programımızın çalışması sonucu ortaya ziyaretçiye
gönderilecek bir ürün çıkmaz; elde edilen sonuç ya başka bir
programa (örneğin elektronik ileti gönderen bir Sendmail
progamına) hammadde olarak verilir, ya da Server'da sabit diske
yazılır. Fakat her durumda, Web ziyaretçimiz bizim PHP
kodlarımızı göremez; bu Web sayfalarımızda PHP kodu kullanmamız
halinde, sayfalarımızın Browser tarafından tanınması veya
tanınmaması gibi bir durumun ortaya çıkmaması demektir.
Ziyaretçi ne tür Browser kullanırsa kullansın, kendisine
Sunucu'dan daima saf HTML kodu geleceği için, sayfalarımızı
rahatça görebilecektir. Tabiî bir nokta var: Sayfalarımızda
herhangi bir Browser'ın arızalı yorumladığı veya hiç
yorumlayamadığı HTML etiketleri bulunabilir; ya da söz gelimi
ziyaretçiye giden HTML'in içinde Browser'da çalıştırılacak olan
başka Script kodları bulunabilir; ve Browser bu kodları
anlamayabilir. Örneğin, HTML sayfanızda VBScript kodları
kullanmış iseniz, Netscape ile sitenize bağlanmış olan kişiler
bu kodun oluşturmasını istediğiniz etkiyi göremeyeceklerdir;
çünkü Netscape VBScript anlamaz! PHP ile yazacağınız Web
programlarının (eski deyimiyle "sayfaların") oluşturacağı HTML
belgesinin Browser türleri ve sürümleri ile uyarlılığını
sağlamak yine Web programcısı olarak sizin sorumluluğunuzdadır.
Özetlersek, PHP
bir CGI programlama dilidir; bu dille, Web Sunucusu ile Web
ziyaretçisi arasındaki buluşma noktası olan CGI'da bilgi
alışverişi yapılabilir; Sunucu'da bulunan başka programlar
çalıştırılabilir ve böylece Web sayfalarımıza HTML'in
sınırlamalarının ötesinde hareket ve ziyaretçi ile etkileşme
olanağı kazandırılabilir.
Sanırım iyi bir
Web programcısı olarak şu anda ekrana "Merhaba Dünya!" yazdırmak
için sabırsızlanıyorsunuz. Ama bunun için, PHP sayfanızı ya
PHP-uyumlu bir Web Sunucusu'ndaki Web sitenize yüklemek, ya da
kişisel bilgisayarınızdaki kişişel Web Sunucusu'na PHP öğretmek
zorundasınız. Bu ikinci yöntemi kuvvetle tavsiye ederim; çünkü
yazacağınız PHP programlarını gerçek Internet Sunucusunda
sınamak, bazen arzu edilmeyen durumlara yol açabilir. Oysa
kişinin bu denemeleri, evinde ve işyerinde kendi bilgisayarında
yapması, çoğu zaman daha az başağrısı ve gözyaşına yol açar! En
azından, PHP hatalarınızı ve gözyaşlarınızı sizden başka gören
olmaz!
PHP ve
Veritabanı
Kişisel
bilgisayarınızdaki kişisel Web sunucusuna PHP öğretme işlemine
geçmeden önce, hemen hemen PHP'nin ikiz kardeşi sayılan
MySQL'den ve onun rakibi PostgreSQL'den kısaca söz edelim.
PHP'nin varlık
sebeplerinin başında, ticarî Unix ve Microsoft Windows işletim
sistemlerinden ayrı, ticarî olmayan Açık Sistem ortamlarında
çalışan bir Script dili ile bu dille kullanılabilecek yine Açık
Sistem ürünü bir veritabanı erişim ve yönetim aracına sahip
olmak gelir. Perl, gerçi PHP'den çok önce Açık Sistem ürünü
olarak, isteyen Web Programcısı'nın ücretsiz edineceği bir CGI
programlama dili olarak Web'in ilk gününden beri Web
Programcısının emrinde idi. Ama Perl, metin dosyalarından yazı
çekmek ve bunları biçimlendirerek rapor haline getirmek amacıyla
geliştirilen bir dil olduğu için, özellikle veritabanına dayalı
işlemlerde programcıya çok güçlük çıkartıyordu. ASP ise (ASP
desteği sağlayan ve ücretsiz Web sitesi veren firmaların giderek
artmasına ve veritabanı konusunda hem kolaylık, hem de büyük bir
etkinlik sağlamasına rağmen) çoğunlukla ücretli Web sitesi
aldığımız ticarî amaçlı evsahibi (Hosting) firmalarının
sağladığı bir teknoloji olarak görüldü. PHP, tasarımcılarının
MySQL ve PostgreSQL teknolojilerini geliştiren kurum ve
firmalarla yaptığı yakın işbirliği sonucu ikinci sürümünden
itibaren veri-yönlendirmeli Web uygulaması alanında önemli bir
araç olarak belirdi. Dolayısıyla, PHP kurulumu dendiği zaman,
kendiliğinden, MySQL kurulumu da kastedilmiş olur. Şimdi
PostgreSQL da ekleyebiliriz.
PHP, bir dildir;
MySQL ve PostgreSQL ise bir demet sürücüdür. PHP ile, Web
Server'a sayfanızı Internet ziyaretçisine göndermeden önce bir
takım komutları icra etmesini, bir takım veri dosyalarını açıp
içindeki bilgileri alıp bunları HTML kodlarıyla bezeyip,
Browser'a bildiğimiz klasik HTML sayfası olarak göndermesi
talimatını veririz. MySQL ve PostgreSQL ise, Windows
sistemlerinde Denetim Masası'nda gördüğünüz ODBC Veri Kaynağı
Yönetmeni adlı araç gibi, bir vertabanı sunucusu, yani Database
Server pprogramlarıdır. Yakın zamana kadar bu iki veritabanı
yönetim aracı arasında fazla bir çekişme yoktu. Ancak şimdi
özellikle Linux kullanıcıları topluluklarında iki program
arasında verimlilik testleri yapılıyor; hangisinin daha iyi
olduğnuna ilişkin yoğun bir tartışma sürüyor. PHPBuilder.com
uzmanları, yaptıkları bir çok denemede, MySQL'in daha hızlı ve
daha etkin çalıştıkları sonucuna varıyorlar. (Bu konuda daha
geniş bilgi edinmek için Internet'te
www://PHPbuilder.com/columns/tim20000705.PHP3 adresine
bakabilirsiniz.)
MySQL, bir
kullanıcı lisansı 200 Dolar olan ticarî bir program iken 2000
yılı ortalarında GPL (GNU General Public License/GNU Kamusal
Lisans) uygulamasına geçmiş ve ücretsiz dağtılır hale gelmiş
bulunuyor. Buna göre MySQL'i bir ticarî uygulamanın içinde motor
olarak kullanacaksanız üreteci firmaya lisans ücreti ödemeniz
gerekir; bunun dışındaki uygulamalar için programı Internet'ten
indirerek kullanabilirsiniz. PHP için MySQL'e gerek yoktur. PHP,
bir NT veya Win9x tabanlı Web Server'da çalıştırılıyorsa,
Microsoft'un ODBC sürücüleri ile çalışabilir; ve ODBC'nin
okuduğu bütün veritabanlarından veri çekebilir. (ODBC'nin
Unix-Linux sürümü de vardır.) Ayrıca PHP için Adabas, dBase,
Empress, FilePro, Informix, InterBase, mSQL, Oracle, Solid,
Sybase, Velocis ve bir çok Unix veritabanı yöneticisi için
geliştirilmiş add-on (sonradan eklenen) modüller vardır. PHP,
bir çok LDAP istemci programı için yazılmış API'lere de
sahiptir. PHP ile IMAP, SMTP gibi Internet elektronik mektup
protokollerini kullanmak da mümkündür.
Biz bu
kitapçıkta örneklerimizde ve uygulamalarımızıda MySQ'den
yararlanacağız. PHP-MySQL ikilisini kişisel bilgisayarımıza
kurmak için önce gerekli programları Internet'ten indirmemiz
gerekir. Bunun için şu adreslerden yararlanabilirsiniz:
http://www.PHP.net/downloads.PHP
http://www.mysql.com/downloads/index.html
PHP ve Web
Sunucusu
Bizim açımızdan
PHP, bir Web sunucu programıdır; kurulacağı sistemdeki Web
sunucusu ile uyumlu olması gerekir. 4'ncü sürümü itibariyle, PHP
bütün Unix-türevi sistemler (örneğin Linux) ve Microsoft Windows
sistemleri ile uyumludur. Birlikte çalışabileceği Web sunucu
programları arasında Apache, IIS, FHTTP, Omni HTTPd, Xitami ve
Windows 95/98 için PWS (Personal Web Server) vardır. Gerçek
Internet ortamında sunucu programlara PHP yeteneği kazandırma
işlemi, Web Pnogramcısı olarak bizi ilgilendirmez; bizim için
Internet sitemize evsahipliği yapan Hosting firmasının PHP
desteği verip vermediğini bilmek yeter. Fakat tasarımlarımızı
sınayabilmek için kendi bilgisayarımıza bir kişisel Web Server
kurmak ve bu programı PHP-uyumlu hale getirmek gerekir. Burada
sadece iki örnek ele alacağız: Linux için Apache sunucu programı
ve MS-Windows için PWS. Bu iki programdan hangisi sizin
sisteminize uygunsa onu kendi bilgisayarınıza kuracağınızı
varsayarak, şimdi PHP ve MySQL kurulumu ile uğraşabiliriz.
Unix/Linux
Sistemleri
Kurma işlemine
Unix ortamından başlayalım. Burada Unix sistemi dediğimiz zaman
Unix'in tekrar bilişim haritasında yerini almasını sağlayan
Linux'u kastediyorum. Bunun için önce http://www.PHP.net/
adresini ziyaret etmemiz gerekiyor. Eğer PHP uzmanı olacaksanız,
burası sizin ikinci eviniz olabilir. Downloads köprüsünü
tıklayarak açılacak sayfada Unix/Linux için kaynak kodunu
bilgisayarınıza aktarın. PHP'yi kuracağınız bilgisayarda bir Web
sunucu programı yoksa, http://www.apache.org/dist/ adresinden
apache_1.3.12.tar.gz (veya daha ileri) dosyasını da indirmeniz
gerekir. Unix-Linux sistemleri için bilgisayarınızda "gcc C
derleyici" bulunması gerekir. Linux sisteminizde örneğin Red Hat
Linux sürüm 5.2 gibi eski bir gcc derleyici varsa, gcc sürüm
2.8.1'i Internet'ten bulmanız gerekir.
Başa
dön
Linux'ta program
derlediniz mi?
Daha önce hiç
Linux programı derlemediyseniz, önce bazı kavramları açıklığa
kavuşturalım:
tar: (tape
archiver) birden fazla dosyayı tek dosya haline getirir ve
sıkıştırır. Teyplere yedekleme amacıyla geliştirilmiştir. tar
dosyaları sıkıştırılmışsa uzatması .gz, değilse .tar olur.
gcc: GNU'nun C
derleyicisidir. İnsan tarafından okunabilen kaynak kodlarını
makina tarafından okunabilen nesne (object) dosyalarına
dönüştürür. C programlama diliyle yazılmış kaynak kodları içeren
dosyaların uzantını .c olur. Nesne dosyalarının adının uzantısı
genellikle .o olur. Derleyici başlık (header, uzantısı .h olan)
dosyalarını bulamazsa derleme hatası verir.
make: henüz
derlenmemiş kaynak dosyalarını derleyen yardımcı bir programdır.
make, derleme talimatlarını Makefile adlı bir dosyadan alır.
ld: GNU'nun
bağlayıcı (linker) programıdır. Nesne dosyalarını ve kitaplık
denen dosyaları birbirine bağlayarak ortaya çalıştırılabilir bir
program dosyası çıkartır. Genellikle Makefile'ın içinde
linker'ın çalıştırılması talimatı bulunur ve sizin bu programı
kullanmanız gerekmez.
ldconfig :
paylaşılan kitaplık dosyalarını (shared librari) arar. Bu
dosyalardan birden fazla program tarafından paylaşılır, ve dosya
adlarında .so bulunur.
./configure : C
derleyecisi ve header dosyalarının nerede olduğunu araştırır, ve
vardığı sonuca göre Makefiles dosyasında değişiklik yapar.
PHP, bir
Unix/Linux sisteminde müstakil yorumlayıcı veya Apache Web
sunucusunun bir modülü olarak çalışmak üzere derlenebilir. PHP,
müstakil yorumlayıcı olarak kurulduğunda, Web sunucusu, her
ihtiyaç halinde PHP yorumlayıcısının bir örneğini çalıştırır.
Bu, bir süre sonra Web sunucusunun bulunduğu işletim sisteminin
yükünün artmasına ve işleyişinde yavaşlamaya yol açabilir. Oysa
PHP, sunucunun bir modülü olarak kurulduğunda, bu sakınca ortaya
çıkmaz. (Bu özelliği ile PHP, klasik CGI/Perl'ün çalışma
tarzından ayrılır, ASP'nin ve ColdFusion'ın çalışma tarzına
yaklaşır.) Bununla birlikte kötü niyetle veya beceriksizce
yazılmış PHP programları modül olarak kurulmuş PHP'yi
çökertirlerse, Web sunucusunu da çökertmiş olurlar; oysa
müstakil PHP yorumlayıcı çökerse, Web sunucusuna bir şey olmaz.
Burada
yapacağımız kurulum işlemi sırasında Linux kurulu olan
bilgisayarımıza Apache Web sunucu programını, bu sunucunun
kullanacağı güvenli Socket katmanını sağlayacak Mod_SSL
programını, bu programın gerektirdiği OpenSSL aracını, MySQL
veritabanı sunucusunu ve PHP Scripting dilini kurmuş olacağız.
PHP'yi Linux
ortamında Apache Web sunucusuna modül olarak kurmak için
sırasıyla şu işlemleri yapmamız gerekir (Sisteminizde gzip veya
gunzip ile gcc and GNU make kurulu olduğunu varsayıyorum):
1. Sisteminizi
root olarak başlatın ve sıkıştırılmış olarak alacağınız PHP ve
Apache dosyalarını geniş yer olan geçici bir dizinde açın, ve o
dizine gidin. Sözgelimi, Apache'nin tar-zip olarak sıkıştırılmış
kaynak dosyalarının tmp adlı dizinde olduğunu varsayalım:
# cd /tmp
# gunzip –c
apache_1.3.12.tar.gz | tar xf –
Burada,
indirdiğiniz Apache sürümü farklı ise onun adını yazacaksınız.
Şimdi Apache'yi açtığınız klasöre gidin ve buradaki configure
dosyasını çalıştırın:
# cd
apache_1.3.12
# ./configure
--prefix=/usr/local/apache
Buradaki örnekte
Apache'yi /usr/local/apache dizinine koyduğumuza dikkat edin. Bu
dizini, bir çok kurulumun varsayım olarak arayacağı dizin olduğu
için tercih ediyoruz. Ama isterseniz siz Apache'yi başka dizine
de kurabilirsiniz.
2. Sıra MySQL
veritabanı sunucusunda. Linux'ta root oturumunda iken
sıkıştırılmış dosyaları indirdiğiniz geçici dizine geçin ve
dosyaları açın; sonra oluşturulan dizine giderek, configure
komutu ile veritabanı sürücüsünü yapılandırın:
# cd /tmp
# gunzip -dc
mysql-3.22.32.tar.gz | tar xvf -
# cd
mysql-3.22.32
# configure
--prefix=/usr/local/mysql
Şimdi make
komutu ile binary dosyalarını oluşturarak, ve sisteme
yükleyelim:
# make
# make install
MySQL'in
kullanım izinlerini belirlememiz gerekir. Aşağıdaki komutları
yazarken "parola" kelimesi yerine vermek istediğiniz parola
kelimesini yazmanız gerekir:
#
scripts/mysql_install_db
# cd
/usr/local/mysql/bin
# ./safe_mysqld
&
# ./mysqladmin
-u root password 'parola'
Kurulum
işleminin başarılı olup olmadığını sınamak için, kurulum
sırasında oluşturlan örnek veritabanı dosyalarını bulunup
bulunmadığını soruşturabilir ve kendimiz yeni bir veritabanı
oluşturabiliriz. Bunun için şu komutu yazalım:
#
BINDIR/mysqlshow -p
# mysql -u root
-p
Sistem "Enter
password:" karşılığını verdiğinde, yukarıda kullanım izinlerini
belirlerken yazdığınız parolayı yazın; MySQL sunucusu çalışacak
ve size kullanıcı izinlerinin bulunduğu "mysql" ve sınama
amacıyla oluşturulan "test" adlı iki veritabanının bulunduğunu
bildirecektir. Şimdi kendi veritabanımızı oluşturalım. MySQL
sunucu komut istemcisi satırına şunu yazın (Bilgisayarın
vereceği karşılıklardan ayırt etmek için kendi yazdıklarımızı
koyu renkle gösteriyoruz):
mysql> create
database deneme;
Sunucu "Query
OK, 1 row affected (0.00 sec)" şeklinde karşılık verecektir.
Şimdi bu veritabanını seçerek içinde deneme adlı ve içinde "no"
ve "isim" adlı iki alan bulunan bir tablo oluşturalım (MySQL
komutları büyük harf-küçük harf ayrımı yapmaz; komutlardan sonra
noktalı virgül konur). Burada koyu renkle gösterilen satırlar ve
işaretler bize aittir:
mysql> use
deneme;
Database changed
mysql> CREATE
TABLE books (
-> no int(3) not
null auto_increment,
-> isim char(50)
not null,
-> unique(no),
-> primary
key(no)
-> );
Query OK, 0 rows
affected (0.00 sec)
Bakalım tablomuz
başarılı şekilde oluşmuş mu?
mysql> show
tables;
mysql> describe
deneme;
Field Type Null
Key Default Extra
no int(3) PRI 0
auto_increment
isim char(50)
2 rows in set
(0.00 sec)
Çok güzel! Hem
MySQL'i kurmuş, hem de ilk tablomuzu oluşturmuş bulunuyoruz.
MySQL komutlarını daha ayrıntılı öğrenebilmek için MySQL'in
http://www.mysql.com adresindeki sitesini ziyaret edebilirsiniz.
Şimdilik MySQL'den çıkalım ve kuruluma devam edelim.
3. Sıra geldi
PHP'ye! PHP kaynak dosyasının bulunduğu geçici dizine geçin, ve
dosyaları açın; sonra açılan dosyaların bulunduğu dizine gidin:
# gunzip -c
PHP-4.0.1pl2.tar.gz | tar xf -
# cd
PHP-4.0.1pl2
Şimdi configure
dosyasını çalıştıracağız; bu komutun bir çok opsiyonu vardır;
bunların tümünü görmek istiyorsanız, "configure --help" komutunu
verebilirsiniz. Biz sadece PHP'ye MySQL ve Apache opsiyonlarını
eklemekle yetineceğiz:
# ./configure
--with-mysql=/usr/local/mysql \
--with-xml \
--with-apache=../apache_1.3.12 \
--enable-track-vars
Oluşan binary
dosyalarını program dosyasına çevirerek, yükleyelim:
# make
# make install
Oluşan ini
dosyasını lib dizinine koplayalım:
# cp
PHP.ini-dist /usr/local/lib/PHP.ini
PHP.ini
dosyasındaki bir çok özelliği değiştirerek, PHP'nin çalışma
tarzını ayarlayabilirsiniz; örneğin şu satırı ekleyerek, PHP'nin
azamî çalışma süresini arttırabilirsiniz:
max_execution_time = 60;
Güvenli socket
ve Internet Erişimi Katmanı
Kuracağınız Web
sunucusu gerçek Internet'e açılacaksa, sisteminize Mod_SSL
yeteneğini kazandırmanız gerekir. Bu sistemin rsaref-2.0 adında
bir eki vardır; ancak Amerika dışında kurulan Web Sunucularda
rsaref-2.0 ekinin kurulması gerekmez. Apache sunucusunu sadece
PHP dosyalarınızı sınamak amacıyla kendi bilgisayarınıza
kuruyorsanız, Mod_SSL kurmak şart değildir.
Bu işlemi yapmak
zorunda iseniz, önce http://www.openssl.org/ adresinden
openssl-0.9.1c.tar.gz adlı dosyayı, http://www.modssl.org/
adresinden de mod_ssl-2.6.5-1.3.12.tar.gz dosyasını indirin.
Sonra sırasıyla şu işlemleri yapabilirsiniz:
# gunzip -dc
openssl-0.9.5c.tar.gz | tar xvf -
# cd
openssl-0.9.x
#./config
--prefix=/usr/local/ssl \
-L`pwd`/../rsaref-2.0/local/rsaref -fPIC
# make
# make test
# make install
# cd ..
Şimdi Mod_SSL
modülünü Apache ile kullanılacak şekilde kuralım:
# gunzip -dc
mod_ssl-2.6.4-1.3.12.tar.gz |tar xvf -
# cd
# ./configure
--with-apache=../apache_1.3.12
# cd ..
# cd
apache_1.3.12
#
SSL_BASE=../openssl-0.9.x \
RSA_BASE=../rsaref-2.0/local \
./configure \
--enable-module=ssl \
--activate-module=src/modules/PHP4/libPHP4.a \
--enable-module=PHP4 \
--prefix=/usr/local/apache \
--enable-shared=ssl
[...ISS'ler
buraya arzu ettikleri diğer opsiyonları ekleyebilirler..]
# make
Bu noktada
sistem binary dosyaların oluşturulduğunu ve kurulumun gerekli
güvenlik sertifikalarını istediğini bildirecektir. Sertifika
oluşturma konusunda fazla bilgi için,
http://www.modssl.org/docs/2.6/ssl_faq.html#ToC25 adresine
bakabilirsiniz.) Diyelim ki sadece ISS'in yeri, firma adı ve bir
iki diğer bilgiden oluşan özel bir sertifika oluşturmakla
yetineceksiniz. Bunun için şu komutu girin ve sistemin soracağı
sorulara cevap verin:
# make
certificate TYPE=custom
Şimdi Apache'yi
yeniden kurabiliriz:
# make install
Herşey yolunda
gittiyse, sistem "You now have successfully built and installed
the Apache 1.3 HTTP server," şeklinde başlayan uzun bir mesaj
verecektir. Bu durumda Apache sunucusu şu komutla
başlatılabilir:
/usr/local/apache/bin/apachectl start
Apache'yi
güvenli iletişim katmanı desteği ile başlatmak istiyorsanız şu
komutu yazın:
/usr/local/apache/bin/apachectl startssl
Bu işlemleri
başarıyla bitirmiş olsak bile sistemin çalıştığını kontrol
etmemiz gerekir. Önce Apache'nin çalıştığından emin olalım.
Bunun için önce Apache'nin yapılandırılmasına PHP'nun
eklendiğinden emin olmamız gerekir. Kurulumu buradaki gibi yaptı
iseniz /usr/local/apache/conf dizininde bulunan httpd.conf
dosyasını açın; ve "addtype for PHP4" satırların önündeki yorum
(#) işaretlerini kaldırın; yani bu satır yorum olmaktan çıkıp
yapılandırma komutu olsun:
#AddType
application/x-httpd-PHP .PHP
#AddType
application/x-httpd-PHP-source .PHPs
şeklindeki
satırları şu şekle getirin:
AddType
application/x-httpd-PHP .PHP
AddType
application/x-httpd-PHP-source .PHPs
Şimdi Apache
sunucusunu çalıştırabilir ve PHP desteğinin bulunup
bulunmadığını sınayabilirsiniz:
# cd
/usr/local/apache/bin
# ./apachectl
configtest
Syntax OK
# ./apachectl
start
./apachectl
start: httpd started
"httpd started"
ifadesi bize Apache'nin çalıştığını gösteriyor. Şimdi
Browser'ınızı açın ve HTTP sunucusu olarak Apache'nin adresini
yazın. Bu, bilgisayarınızın Domain adıdır; Apache'nin kurulu
olduğu bilgisayarın IP numarasını da yazabilirsiniz.
Şimdi, bir
düzyazı dosyasına şunları yazın:
<? PHPinfo(); ?>
Dosyayı PHP.PHP
adıyla Apache'nin Web sunucu için kök dizin saydığı klasöre
kaydedin. Browser'ınızın URL adresi alanına sunucu adıyla
birlikte dosyanın adını yazın.
Aldığınız sonuç,
PHP'nin sistem ve sunucu hakkında ayrıntılı raporu ise, kendi
kendinizi kutlayabilirsiniz: hem Apache sunucu, hem de PHP
çalışıyor!
Windows-PWS ve
IIS
PHP'yi Windows
95/98/NT/2000 işletim sistemlerinden biri ile çalışan
bilgisayara kurmak için önce http://www.PHP.org adresinden
PHP-4.0.1pl2-Win32.zip veya daha ileri sürümdeki zip dosyasını
almamız gerekir. Bu dosyayı açın ve içindekileri sözgelimi
c:\PHP dizinine kopyalayın. (Dizini oluştururken "PHP," "PHP"
veya "PHP" yazdığınıza dikkat edin!)
Daha önce
Wihdows sistemine PHP 3.x kurmuş olanlar PHP 4.0'ün kurulumumu
biraz farklı bulacaklardır. Bu, daha önce PHP kişisel ve
Internet amaçlı Web sunucuda (PWS veya IIS) müstakil bir CGI
programı olarak çalışırken şimdi buna ek olarak (tıpkı ASP gibi)
DLL yoluyla, bir ISAPI modülü olarak çalışmasının sağlanmış
olmasından kaynaklanıyor.
PHP'yi Windows
95 veya NT4.0 sisteminde kurulu bir PWS veya IIS için
kuracaksınız, önce bazı önlemler almanız gerekiyor. NT 4.0
sistemlerinde IIS 4.0'ün bulunduğu Option Pack'in kurulması
şart. Windows 95 sistemlerinde ise önce DCOM bileşenlerinin
günceleştirilmesi gerekiyor. Bu dosyayı,
http://download.microsoft.com/msdownload/dcom/95/x86/en/dcom95.exe
adresinden alabilirsiniz.
PHP'yi müstakil
çalışan CGI programı olarak kullanmayı düşünseniz bile daha
önceki sürümlerinden farklı olarak bazı DLL dosyalarının Windows
dizininde sistem alt-dizinine kopyalanması gerekir. Açtığınız
Zip dosyasından çıkan ve C:\PHP dizinine kopyaladığınız dosyalar
arasında bulunan MSVCRT.DLL ve PHP4TS.DLL adlı dosyaları Windows
9x sistemlerinde WINDOWS dizininde SYSTEM, NT/2000'de ise WINNT
dzininde SYSTEM32 dizinine kopya edin. (Windows, MSVCRT.DLL
dosyasının kullanılmakta olduğu bildirerek, kopyalamayı
reddederse, kopyalamaya gerek yok demektir.)
IIS 4.0 ve 5.0
Windows
NT/2000'e kurulu olan IIS 4.0 veya 5.0'e PHP desteği kazandırmak
için, önce yukarıdaki gibi DLL dosyalarını gerekli yere
kopyalayın. Açtığınız Zip dosyasından çıkmış olan PHP.ini-dist
isimli düz yazı dosyasını Notepad ile açın ve "extension_dir="
satırını bularak, karşısındaki "./" yazısını silip yerine PHP
dosyalarını kopyaladığınız dizinin adını (örneğin C:\PHP) yazın.
PHP dizinin adını doğru yazdığınızı kontrol etmekte daima yarar
vardır! Sonra ";browscap =" satırını bulun ve önündeki noktalı
virgülü kaldırarak karşısındaki "extra/browscap.ini"
kelimelerini c:\Winnt\browscap.ini olarak değiştirin. Bu
dosyayı, PHP.ini adıyla Winnt dizinine kaydedin. (Windows
dizininin Winnt adını taşıdığını varsayıyorum. Sizin Windows
dizininiz başka ise, gerekli düzeltmeyi yapmanız gerekir.)
Browser Yetenek
Dosyası: Browscap.ini
Windows
sistemine kurulu bir Web Sunucu programına (PWS, IIS veya Apache
Win32) PHP yeteneği kazandırabilmek için PHP'nin talep sahibi
Browser'ın yeteneklerini bir dosyadan okuması gerekir. Bu
dosyanın adı browscap.ini dir.
Internet'te
http://asptracker.com/browscap.zip dosyasını alarak açın ve
çıkacak "browscap.txt" dosyasının adını "browscap.ini" olarak
değiştirerek Windows/Winnt klasörüne kopyalayın.
Internet
Services Manager'ı açın; bu araç, NT 4.0'te Start menüsünde
Programs/Option Pack'te, 2000'de ise Control
Panel/Administrative Tools'dadır. Açılacak pencerede muhtemelen
Default Web Server adını taşıyan Web sunucusunun adını sağ
tıklayın:
Açılan listede
Properties maddesini; açılan kutuda Home Directory sekmesini
seçin; Configuration düğmesini tıklayın ve yeni bir Application
Mappings satırı eklemek üzere, Executable kutusuna PHP4isapi.dll
dosyasının tam yolunu ve adını (örneğin C:\PHP\ PHP4isapi.dll);
Extension kutusuna ise .PHP yazın (IIS 4.0'te Method exclusions
kutusunu boş bırakın) ve Script engine kutusuna işaret koyun.
ISAPI Filters
sekmesini seçin. Add düğmesini tıklayarak yeni bir ISAPI
filtresi kaydı yapın. Açılacak kutuda filtre adı olarak PHP, yol
olarak da PHP4isapi.dll dosyasının bulunduğu dizinin yolunu
(örneğin C:\PHP\ PHP4isapi.dll) yazın.
IIS'i tamamen durdurun; ama bunun için sadece Internet Services
Manager'daki Stop düğmesini tıklamak yetmez; komut istemci
(MSDOS Prompt) penceresinde net stop iisadmin yazın. Windows, bu
servisin bağlı olduğu diğer bazı hizmetlerin de durdurulacağını
bildirince "Y" yazın ve Enter'a basın. Şimdi IIS'i tekrar
başlatmak için aynı pencerede net start w3svc yazın. Artık
IIS'iniz PHP anlar hale gelmiş olmalı. Bunu, hemen sınayalım.
Notepad veya bir başka düzyazı programıyla şunları yazın:
<? PHPinfo(); ?>
Dosyayı PHP.PHP
adıyla IIS'in kök dizin saydığı klasöre kaydedin. Browser'ınızın
URL adresi alanına sunucu adıyla birlikte dosyanın adını yazın.
Bravo! İşte yeni
bir dil öğrenmiş Web sunucuya sahip oldunuz.
PWS 4.0
Windows'un
95/98/SE/Me türlerine kişisel Web sunucu programı olarak
Personal Web Server (PWS 4.0) kurulmalıdır. PHP Zip dosyasından
çıkacak DLL'leri Windows dizininde System klasörüne
kopyaladıktan sonra, Zip dosyasından çıkmış olan PHP.ini-dist
isimli düzyazı dosyasını Notepad ile açın ve "extension_dir="
satırını bularak, karşısındaki "./" yazısını silip yerine PHP
dosyalarını kopyaladığınız dizinin adını (örneğin C:\PHP) yazın.
PHP dizinin adını doğru yazdığınızı kontrol edin! Sonra
";browscap =" satırını bulun ve önündeki noktalı virgülü
kaldırarak karşısındaki "extra/browscap.ini" kelimelerini
c:\Windows\browscap.ini olarak değiştirin. Bu dosyayı, PHP.ini
adıyla Windows dizinine kaydedin. Daha önceki sayfalarda
göreceğiniz şekilde Browscap.ini dosyasının dosyasını Windows
dizinine kopyalamış olmanız gerekir. (Windows dizininin Windows
adını taşıdığını varsayıyorum. Sizin Windows dizininiz başka
ise, gerekli düzeltmeyi yapabilirsiniz.)
Şimdi, açtığınız
PHP Zip dosyasının içinden çıkan PWS-PHP4.reg adlı dosyayı bir
düzyazı programıyla, örneğin Notepad ile açın. ".PHP"="[PUT PATH
HERE]\\PHP4isapi.dll" yazılı satırı PHP dosyalarını koyduğunuz
dizine göre, örneğin şöyle değiştirin:
".PHP" =
"C:\\PHP\\PHP4isapi.dll"
Burada çok
dikkat etmeniz gereken nokta, ters-bölü işaretlerinin başka
yerlerde normal olarak yazdığımız gibi bir adet değil, iki adet
olmasıdır. Dosyayı kaydettikten sonra, iki kere tıklayın ve
Windows'un Registry'de değişiklik yapmayı isteyip,
istemediğinize ilişkin sorusuna Evet yanıtını verin. Tamaam!
Sizin de PHP bilen bir PWS'iniz oldu. Ama bunu bir sınayalım. Ve
bunu bir Merhaba Dünya programı ile yapalım ki, gelenek
bozulmasın!
Düzyazı
programınızla şu metni merhaba.PHP adıyla PWS'in Web için kök
dizin saydığı (muhtemelen C:\Inetpub\wwwroot) klasöre kaydedin:
<html>
<?PHP
echo ("Merhaba
Dünya!");
?>
</html>
Sonra Personal
Web Manager kutusunda, Ana başlıklı bölümde, Yayımlama
kısmındaki "http://" diye başlayan ve kişisel Web sunucunuzun
adı ile devam eden köprüyü tıklayın. Varsayılan Browser'ınız,
kişisel Web sunucunuzun ana sayfasını açacaktır. Browser'ın URL
adres bölümüne, merhaba.PHP yazın ve klavyede Enter tuşuna
basın. Eğer gerçekten PWS'iniz, PHP öğrenmişse, size ve dünyaya
merhaba diyecektir.
Windows'da
Apache!
NT sisteminizde
ISS değil de Apache for Win 32 Web Server programını
çalıştırıyorsanız, sürümüne göre httpd.conf veya srm.conf
dosyasına şu ekleri yapmanız gerekir:
ScriptAlias
/PHP3/"c:/path-to-PHP-dir/"
AddType
application/x-httpd-PHP3 .PHP3
Action
application/x-httpd-PHP3"/PHP3/PHP.exe"
Windows'da MySQL
PHP, Windows
ortamında, Windows'un ODBC sürücülerini kullanarak, sürücüsü
bulunan bütün veritabanlarına ulaşabilir. Ancak Windows
ortamında geliştirseniz bile, Web sitenizi, Unix tabanlı ve
ODBC-uyumlu olmayan bir sunucuya gönderebilirsiniz. Bu durumda
sayfalarınızda kullanacağınız verileri muhtemelen MySQL
aracılığıyla veritabanından çekeceksiniz demektir. Bu yüzden
Windows sisteminize MySQL kurmak ve veritabanlarını bu araçla
geliştirmeniz yerinde olur. Unix/Linux ortamında ücretsiz
olmakla birlikte MySQL, Windows için bedeli paylaşımlı
(shareware) olarak edinilebilir. Benioku dosyasında
belirtildiğine göre, programı eğitim amacıyla ve 30 günü aşmamak
kaydıyla kullanıyorsanız, ücret ödenmesi gerekmiyor. Diğer
durumlarda TCX firmasının Internet'te http://www.tcx.se
adresindeki sitesindeki formları doldurarak lisans alınması
gerekiyor. Bu programı, MySQL'in http://www.mysql.com/downloads/
adresinden edinebilirsiniz. Bu adresteki
mysql-shareware-3.22.34-win.zip dosyasını alarak, bir geçici
dizinde açın. (Sisteminiz gerçek Internet sunucusu olarak ticarî
amaçlı hizmet sağlayacaksa şu dosyayı almanız gerekir:
http://www.mysql.com/Downloads/MySQL-3.23/mysql-3.23.21-win-src.zip)
Shareware sürümünü içeren dosyayı açtığınızda ortaya çıkacak
setup.exe programı MySQL'i kuracaktır.
MySQL Server'ın
Windows'da da tıpkı Linux'ta olduğu gibi çalıştırılması ve
durdurulması gerekir. MySQL'in paylaşım sürümünü kullanmak için
Windows sistemlerinde mysqld-shareware.exe programını
çalıştırmanız gerekir. DOS komut istemcisini açın ve
"C:/mysql/bin" dizinine giderek, sırasıyla şu komutları verin:
mysqld-shareware
mysqlshow
mysqlshow -u
root mysql
mysqladmin
version status proc
Şimdi MySQL
server çalışıyor ve biraz sonra PHP yoluyla kişisel Web
Server'ınıza hizmet vermeye hazır demektir. Bu komutları icra
ettiğiniz sırada bir hata mesajı ile karaşılaşırsanız, MySQL'in
kuruluşunda hata yapmış olabilirsiniz. DOS ekrarında test ve
MySQLl veri tabanlarının varlığını ve hizmete girdiğini gösteren
mesajlar görürseniz, MySQL güzelce çalışıyor demektir. Bunu bir
de Browser ile ve PHP yoluyla sınayalım:
Yukarıda IIS'e
PHP desteği kazandırma çalışmaları sırasında oluşturmadı iseniz,
düz yazı programınızda şu tek satırı yazın; php.php adıyla,
kişisel Web'inizin kök dizinine kaydedin:
<? PHPinfo(); ?>
Browser'ınızı
açın; URL hanesine örneğin http://localhost/PHP.PHP3 yazın.
Açılacak sayfada iki şeye dikkat edin: MySQL ve ODBC bölümleri
var mı? MySQL bölümü varsa; kendinizi yeniden kutlayın! ODBC
bölümü yoksa, muhtemelen sisteminizde Microsoft'un Open Database
Connectivity (Açık Veribanı Bağlantısı) sürücüleri kurulu değil
demektir. (Windows'da Denetim Masası'nda ODBC simgesini
görmüyorsanız, MS'un sitesinden gerekli kur programını
indirmeniz gerekebilir. Linux'ta ise MyODBC programı ile bu
imkanı kazanabilirsiniz.)
Bir kere daha tekrar etmek gerekirse, PHP ile veritabanına
dayanan sayfalar yapmak için mutlaka ve sadece MySQL
sürücülerini kullanmak gerekmez. Bunun yerine MS'un ODBC
sürücülerini kullanabilirsiniz. Ancak Web sitenize evsahipliği
yapan firmanın size ODBC desteği verip vermediğini öğrenmeniz
gerekir. Aslında aynı şekilde, evsahibi firmanın MySQL desteği
verip vermediğini de öğrenmek zorundasınız. (PHP ile MS-ODBC
sürücülerini kullanabilmek için Andrew Stopford'un ASPToday
sitesindeki http://www.asptoday.com/articles/20000202.htm
yazısında geniş bilgi bulabilirsiniz.)
Geçmiş olsun.
Bana sorarsanız, PHP ile dolu yeni bir hayata başlamak için en
önemli adımı attınız. Bundan sonrası, sadece PHP dilini
öğrenmekten ibaret. Dilin üretecilerinden Zeev Suraski, bu yılın
başında İsrail'de yapılan ilk uluslararası PHP Konferansı'nda
"PHP öğrenmek zor mu?" diye soran bir bilgisayar meraklısına şu
cevabı veriyordu: "Bir haftadan fazla zaman ayırmanız
gerekiyorsa, sizin için zor demektir!"
Başa
dön
PHP'nin Yapı
Taşları
PHP, bir
programlama dili olarak, değişkenler, değişkenlerin değerleriyle
bir işlem yapmayı sağlayan işlemciler, işlemcilerle oluşturulan
deyimler ve nihayet bunların tümünü toplu olarak kullanmamızı
sağlayan işlevlere (fonksiyonlara) sahiptir. PHP,
nesne-yönelimli (object-oriented) bir dil olduğu için, nesne
oluşturma imkanına ve bunların kullanılmasını sağlayan metodlara
da sahiptir. Bütün bu imkanları kullanarak, PHP ile bir
veritabanından veri alarak, bunları HTML etiketlerinin değerleri
olarak kullanabiliriz; Web sitemizi ziyaret eden kişilerden
bilgi alabiliriz, bu bilgilerle işlemler yapabiliriz. PHP'nin
çeşitli komutlarını, deyimlerini ve fonksiyonlarını kullanarak,
programımızın çalıştığı Web sunucusunun bulunduğu bilgisayara da
çeşitli dosya işlemleri yaptırabiliriz.
PHP programını
durdurmak
Şimdi belki
PHP'yi durdurmayı hiç düşünmüyorsunuz; ama ilerde bir
fonksiyonun vereceği sonucun bütün programın durdurulmasını
gerektiği zamanlar olabilir. PHP'nin resmî el kitabına bile ilk
baskısında konulması unutulmuş olan programı durdurma komutu,
exit kelimesidir; hiç bir parametre almadan çalışır.
Bu tür karmaşık uygulamalara geçebilmek için önce, PHP dilinin
unsurlarını biraz yakından inceleyelim.
Değişkenler
Programcılıkta
işlemlerimizi değişkenlerle yaparız. Değişkeni bir kap gibi
düşünebilirsiniz. Sözgelimi "Gün," değişkenin adı ise bu
değişkenin değeri Pazar, Pazartesi, Salı, vd., olabilir. Her
değişken, türüne göre, ya bir ya da daha fazla değer tutar.
Adından da anlaşılacağı gibi değişkenin değeri değişir! Bu
değişikliği biz yapabiliriz; programın kendisi yapabilir.
PHP'de de, bir
çok başka bilgisayar programlama dilinde olduğu gibi
değişkenlerin içine bir değer konmadan önce tanımlanması
mümkündür; fakat gerekli değildir. Değişkenleri adının önüne $
işareti koyarak tanımlarız:
$adi;
$soyadi;
$123;
$sevdigiRenk;
Değişkenler,
harf, rakam veya alt çizgi (_) ile başlayabilirler; bu
karakterleri içerebilirler; ama içinde boşluk veya diğer
işaretler bulunamaz. PHP değişkenleri her türlü değişken
tutabilirler: bir değişkenin adının yazılış şekli onun
tutabileceği değerin niteliğini belirlemez. Dolayısıyla, "$adi"
değişkenin değeri "Reşit" da olabilir, "1255" de olabilir.
PHP'de
genellikle değişkenleri değerini atayarak belirleriz:
$adi = "Reşit";
$soyadi =
"Gülen";
$123 = 123;
$sevdigiRenk =
"yeşil";
Değişkenler,
kullanıldıkları işleme, taşıdıkları değeri verirler:
print $adi;
komutu, eğer
değeri "Reşit" ise "Browser penceresine "Reşit" kelimesini
yazdırır.
PHP'de özel bir
değişkene değişken adı olarak kullanılacak değerleri de
atayabiliriz:
$adi = "Reşit";
$degisken =
"adi";
print
$$degisken;
Burada Browser
penceresine yine "Reşit" kelimesi yazılacaktır; çünkü PHP
$degisken adlı değişkenin "adi" adlı değişkeni tuttuğunu bilecek
ve iki Dolar işaretini görünce, $degisken'in değerini değil,
onun tuttuğu değişkenin değerini yazacaktır. Bu, size şu anda
karışık görünebilir. Daha sonra döngüleri gördüğümüzde bu
tekniği bir satırlık kod ile yüzlerce değeri yazdırmakta
kullanacağız. Bu teknik şöyle de kullanılabilir:
$degisken =
"adi";
$$degisken =
"Reşit";
print "$adi";
print
$$degisken;
print
"${$degisken}";
print
"${'adi'}";
Buradaki dört
"print" komutu da Browser'a "Reşit" kelimesini yazdıracaktır.
PHP'de bir
değişkenin tuttuğu değer, bir başka değişkene atanabilir. Bu ya
duragan, ya da dinamik olarak yapılır. Duragan yöntemde:
$birinci_degisken = "Nurcan";
$ikinci_degisken
= $birinci_degisken;
$birinci_degisken = "Tülay";
print
$ikinci_degisken;
Buradaki "print"
komutu Browser penceresine "Reşit" kelimesini yazdıracaktır. İki
değişken arasındaki değer alış-verişi birinci değişkenin tuttuğu
değeri değiştirmeden önce olduğu için, ikinci değişken birinci
değişkenin ilk değerini almış oldu. Fakat kimi zaman iki
değişken arasındaki değer alış-verişi sürekli (dinamik) olsun
isteriz. PHP, buna, ilk atama sırasında & işareti kullanırsak
izin verir:
$birinci_degisken = "Nurcan";
$ikinci_degisken
= &$birinci_degisken;
$birinci_degisken = "Tülay";
print
$ikinci_degisken;
Buradaki "print"
komutu ise Browser penceresine "Tülay" kelimesini yazdıracaktır.
Çünkü iki değişken arasındaki değer alış-verişi birinci
değişkenin tuttuğu değeri değiştirmeden önce halde, ikinci
değişkene birinci değişkenin değerini dinamik olarak atamış
olduk. Atama işlemi sırasında & işareti kullandığımız için,
birinci değişkenin değeri değiştiğinde ikinci değişkenin de
değeri değişecektir.
Veri Türleri
PHP,
değişkenlere, tuttukları değere göre farklı bellek alanı tahsis
eder; bu bakımdan verilerimizin türü etkin bir programcılık
açısından önem taşır. Ayrıca PHP, diğer bütün programlama
dilleri gibi belirli veri türleri ile belirli işlemleri yapar
veya yapamaz. Örneğin, ancak iki sayı arasında aritmedik toplama
yapılabilir. İki metin tutan değişken aritmetik olarak
toplanamaz; ancak içerdikleri değerler ardarda eklenebilir. Ne
var ki, PHP sizin aritmetik toplama mı, yoksa ardarda ekleme mi
yapmak istediğinizi bilmek durumunda değildir. (PHP'ye 'muazzam
dil' dedik; içinde yapay zekâ var demedik!) Dolayısyla değerleri
5 ile 6 olan iki değişkeni topladığınız zaman ortaya 11 yerine
56 çıkarsa, kabahati PHP'de değil, değişkenlere veri atayan
kişide (büyük bir ihtimalle kendinizde) aramalısınız.
PHP açısından
dünyada altı tür değer vardır:
Tamsayı
(Integer): 5,124, 9834 gibi
Çift (Double):
3,567 gibi
Alfanümerik
(String): "Reşit" gibi
Mantıksal
(Boolean): doğru (true)/yanlış (false) gibi
Nesne (Object)
Dizi (Array)
Bazı uzmanlara
göre, gerçekte PHP'de mantıksal (boolean) değişken türü yoktur.
B kanının sebebi, PHP'nin true (doğru) ya da false (yanlış)
olarak atadığımız değerleri 1 ve boş/null değerlere çevirmesi,
mantıksal olarak sorgulandığında 0 dışındaki tam ve ondalık
değişkenleri TRUE, 0'ı FALSE sayması, ve boş alfanümerik
değişkenleri FALSE, dolu alfanümerik değişkenleri ise TRUE
olarak değerlendirmesidir. Ancak daha sonra gereceğimiz gibi
PHP, Mantıksal/Boolean adında bir değişken değiştirme
fonksiyonuna sahiptir ve bu tür değişkenlerin türü sorulduğunda
"boolean" karşılığını verir.
Tür Değiştirme
Değişkenlere
atadığımız değerlerinin türlerini genellikle biliriz; ama
yüzlerce değişkenle uğraştığımız bir Web programında değişken
türünü unutmak çok kolaydır. Kimi zaman da değişkenlere program
yoluyla değer atarız; başka bir deyişle programımız bazı
değişkenleri kendisi oluşturabilir, ve bunlara kendisi değer
atayabilir. Bu tür program yoluyla atanan değerlerin de türünde
kuşkuya kapıldığımız anlar olabilir. Bir değişkenin değerinin
türü hakkında kuşkunuz varsa, en emin yol bunu PHP'nin kendisine
sormaktır. Bu sorgulamayı gettype() fonksiyonu ile yaparız.
Başa
dön
Fonksiyonlar
PHP'nin
gettype() ve print() gibi, kendi içinde bulunan kullanılmaya
hazır bir çok fonksiyonu vardır. Daha sonra kendi
fonksiyonlarımızı yazmanın yollarını da göreceğiz. Programcılık
dilinde ister dile ait olsun, ister kendimiz yazmış olalım, bir
fonksiyonu kullanmaya "fonksiyon çağırma" denir. Fonksiyonlar da
fonksiyon çağırabilirler. Çağrılan bir fonksiyon ya kendisinden
beklenen işi yapar, ya da kendisini çağıran işleme veya
fonksiyonu bir değer sunar. Buna fonksiyondan dönen değer denir.
Şimdi, bir PHP programı yazalım, bir takım değişkenlere değerler
atayalım ve bunların türlerini PHP'ye soralım. Bir düzyazı
programı ile şu metni yazın ve turler.php adıyla kaydedin:
<HTML>
<HEAD>
<TITLE>PHP'de
Degisken Turleri</TITLE>
<meta
http-equiv="content-type" content="text/html;
charset=ISO-8859-9">
<meta
http-equiv="Content-Type" content="text/html;
charset=windows-1254">
</HEAD>
<BODY>
<B>
<H2>
<?php
$sayi = 5;
print("Birinci
değişkenin adı: \$sayi<br>");
print("Değeri :
");
print
"$sayi<br>";
print("Türü :
");
print gettype(
$sayi ) ; //tamsayi/integer
print "<br>";
print "<br>";
$alfanumerik =
"Reşit";
print "İkinci
değişkenin adı: \$alfanumerik<br>";
print "Değeri :
";
print
"$alfanumerik<br>";
print("Türü :
");
print gettype(
$alfanumerik ) ; //alfanümerik/string
print "<br>";
print "<br>";
$ondalik =
5.1234;
print "Üçüncü
değişkenin adı: \$ondalik<br>";
print "Değeri :
";
print
"$ondalik<br>";
print("Türü :
");
print gettype(
$ondalik ) ; //çift,ondalık/double
print "<br>";
print "<br>";
$mantiksal =
true;
print "Üçüncü
değişkenin adı: \$mantiksal<br>";
print "Değeri :
";
print
"$mantiksal<br>";
print("Türü :
");
print gettype(
$mantiksal ) ; //mantıksal/boolean
print "<br>";
print "<br>";
?>
</H2>
</B>
</BODY>
</HTML>
Bu programı
çalıştığımızda karşımıza şöyle bir görüntünün gelmesi gerekir:
Burada mantıksal (boolean) değer olarak doğru anlamına true
değeri atadığımız halde, PHP'nin bu değişkenin değeri olarak 1'i
gösterdiğine dikkat edin. PHP'de bir fonksiyon, elde ettiği
değer doğru ise sonuç olarak 1 değerini verir. (Yanlış/false
değerinin neye çevrildiğini bulabilir misiniz?)
Escape
turler.php dosyasını yazdıysanız, şu satırdaki, ters-bölü
işareti dikkatinizden kaçmamış olmalı: print "İkinci değişkenin
adı: \$alfanumerik
"; Daha önce gördük ki, tek veya çift tırnak içine de alsak,
PHP, bir değişken adını gördüğü zaman onun yerine o değişkenin
tuttuğu değeri yazar. PHP bunu, değişken adının başındaki $
görerek yaparak. $ işareti gibi PHP için özel anlamı olan
işaretlerin anlamlandırılmasını önlemek ve bu işaretleri düz
metin saymasını sağlamak için bu işaretlerin önüne ters-bölü
işareti koyarız. Buna o karakteri kurtarma veya ESCaping denir.
PHP'nin anlamlı işaretleri ve bunların ESCape-yazılışı şöyledir:
\' Tek tırnak \" Çift tırnak \\ Ters-bölü \$ Dolar işareti \n
Yeni Satır (New Line) \r Satır Başı (Return) \t Sekme (Tab)
karakteri Kimi zaman bir değişkene atadığımız değerin türünü
değiştirmek gerekir. Bunu settype() fonksiyonu ile yaparız.
Elimizde böyle bir imkan var diye, bir değişkenin alfanümerik
(String) olan değerini sayıya çevirebileceğini sanmayın. PHP
buna çok kızar! Şu örneği de tur_degistir.php adıyla kaydedelim:
PHP'de Degisken Turleri
";
print("Türü : ");
print gettype( $degisken ) ; //çift,ondalık/double
print " ";
print " ";
print "İlk değiştirme işlemi: Alfanümerik/String: ";
settype( $degisken, string ); //alfanümerik/string
print "Değeri : ";
print "$degisken ";
print("Türü : ");
print gettype( $degisken ) ; //alfanümerik/string
print " ";
print " ";
print "İkinci değiştirme işlemi: Tamsayı/Integer: ";
settype( $degisken, integer ); //Tamsayı/Integer
print "Değeri : ";
print "$degisken ";
print("Türü : ");
print gettype( $degisken ) ; //Tamsayı/Integer
print " ";
print " ";
print "Üçüncü değiştirme işlemi: Ondalık/Double: ";
settype( $degisken, double ); //çift,ondalık/double
print "Değeri : ";
print "$degisken ";
print("Türü : ");
print gettype( $degisken ) ; //çift,ondalık/double
print " ";
print " ";
print "Dördüncü değiştirme işlemi: Mantıksal/Boolean: ";
settype( $degisken, boolean ); // Mantıksal/Boolean
print "Değeri : ";
print "$degisken ";
print("Türü : ");
print gettype( $degisken ) ; // Mantıksal/Boolean
print " ";
print " ";
?>
Bu programı
çalıştırdığımızda, ilk atadığımız değerin ondalık/double olarak
belirlendiğine dikkat edin. Bu değerin türünü alfanümerik/string
olarak değiştirdiğimizde değişmediğini görüyoruz. Fakat
tamsayı/integer'a çevirdiğimizde PHP değerin tamsayı bölümünü
alıyor; ondalık-kesir bölümünü atıyor. Nitekim daha sonra
değişkerin türünü yeniden ondalık yaptığımız halde, atılan bu
bölüm geri gelmiyor. Son olarak değişkeni mantıksal ifade olarak
değiştirdiğimizde, değerin doğru/true olduğunu anlıyoruz; değer
olarak bize 1 dönüyor. PHP, sıfır dışındaki tüm değerleri
doğru/true'ya çevirir; sıfır'ı ise yanlış/false olarak atar ve
boş/null değer verir. Şu anda PHP'yi tam bilemediğimiz için
nerede kullanılır kestiremiyoruz, ama diyelim ki burada olduğu
gibi, değişkeni bir daha düzelmeyecek şekilde değişikliğe
uğratmak istemeyebiliriz; fakat yine de değerinin türünü
değiştirmek isteyebiliriz. Bunu da nerede kullanabiliriz, şu
anda bilmiyoruz. Ama diyelim ki, böyle bir işlem yapmaya
ihtiyacımız oldu! Hatırlıyor musunuz, biraz önce özel bir
şekilde bir değişkene başka bir değişkenin adını değer olarak
vererek, aslında bu değişkenin ilk değişkenin değerini almasını
sağlamıştık. Burada da aynı tekniği kullanabiliriz. Bu kodu da
tur_kopyala.php adıyla kaydedin:
PHP'de Degisken Turleri Kopyalama (Casting)
";
print("Türü : ");
print gettype( $degisken ) ; //çift,ondalık/double
print " ";
print " ";
print "İlk kopyalama işlemi: Alfanümerik/String: ";
$kopya_degisken = ( string ) $degisken; //alfanümerik/string
print "Değeri : ";
print "$kopya_degisken ";
print("Türü : ");
print gettype( $kopya_degisken ) ; //alfanümerik/string
print " ";
print " ";
print "İkinci kopyalama işlemi: Tamsayı/Integer: ";
$kopya_degisken = ( integer ) $degisken; //Tamsayı/Integer
print "Değeri : ";
print "$kopya_degisken ";
print("Türü : ");
print gettype( $kopya_degisken ) ; //Tamsayı/Integer
print " ";
print " ";
print "Üçüncü değiştirme işlemi: Ondalık/Double: ";
$kopya_degisken = ( double ) $degisken; //çift,ondalık/double
print "Değeri : ";
print "$kopya_degisken ";
print("Türü : ");
print gettype( $kopya_degisken ) ; //çift,ondalık/double
print " ";
print " ";
print "Dördüncü kopyalama işlemi: Mantıksal/Boolean: ";
$kopya_degisken = ( boolean ) $degisken; // Mantıksal/Boolean
print "Değeri : ";
print "$kopya_degisken ";
print("Türü : ");
print gettype( $kopya_degisken ) ; // Mantıksal/Boolean
print " ";
print " ";
?>
Bu programın can
alıcı noktası örneğin "$kopya_degisken = ( boolean ) $degisken;"
şeklindeki komut; burada $kopya_degisken adlı değişkene
$degisken adlı değişkenin değerini (eşittir işareti ile)
kazandırırken, arada yeni değişkenin kazanmasını istediğimiz
türün adını parantez içinde yazıyoruz. Burada gerçekte,
$degisken adlı değişkenin değerine hiç bir şey olmuyor. Bu
programı çalıştırırsanız, ilk değerin ontalık kısmının önceki
örnekte olduğu gibi değişim işlemi sonunda tamamen yok
olmadığını görebilirsiniz. $degisken adlı değişkenin değeri
değişmeden durduğu için üçüncü adımda yıptığımız ondalık tür
olarak kopyalama sonucu yeni değişkenin değeri yine kesiri ile
karşımıza çıkıyor.
Dört yararlı
fonksiyon
PHP'de değişken
değer türü değiştirmekte kullanabileceğimiz kullanılmaya hazır
fonksiyon vardır. ilerde döngüleri ele aldığımızda daha çok
anlam kazanacak olan bu değişkenleri şimdilik bir kenara
kaydedin:
isset() ve
unset()
PHP, bir
değişken tanımlandığı anda, sanki içinde değer varmış gibi,
bilgisayarın belleğinde yer ayırır. Bu bazen bilgisayarın kıt
kaynaklarını zorlayabilir. isset() fnksiyonu, PHP'nin bir
değişkenin içinde değer bulunup bulunmadığını sınamasını sağlar.
unset() ise varolan bir değişkeni yok eder. Bu iki fonksiyonu
birlikte kullanabiliriz ve boş değişkenleri yok ederek,
bilgisayarın belliğinde yer açabiliriz:
if
(isset($bir_degisken)) {
print(
$bir_degisken );
}
else {
unset($bir_degisken);
}
Bu kod parçası,
$bir_degisken isimli dğişkenin içi boş değişse, içeriğini
görüntüleyecek, içi boş ise varlığına son verecektir.
empty()
isset()
fonksiyonun tersi işleve sahiptir; bir değişkene değer
atanmamışsa, veya değeri sıfır veya boş alfanümerik (null
string) ise, doğru (True) değeri verir.
$bir_degisken =
123;
echo
empty($bir_degisken);
$bir_degisken =
"";
echo
empty($bir_degisken);
Bu program
parçası Browser penceresine sadece empty() fonksiyonun doğru
sonuç verdiği birinci echo() deyiminde 1 yazdıracaktır.
is_string(),is_integer(),is_double(),
Sınadıkları
değişkenin aradıkları türden değer içermesi halinde doğru 'True)
sonuç verirler.
<?php
$a = 6.567;
if
(is_double($a)) {
print ("A
Double'dır<br>");
}
$b = "Reşit";
if
(is_double($a)) {
print ("B
String'dir<br>");
}
$c = 6;
if (is_int($c))
{
print ("C
Integer'dır<br>");
}
?>
Bu kod, Browser
penceresine "A double'dır, B String'dir, C Integer'dır"
yazdıracaktır. PHP'de bu fonksiyonlara benzeyen fakat başka tür
değer arayan şu fonksiyonlar da vardır: is_array(), is_object.
intval(),
doubleval(), doubleval()
Bir değişkenin
değerinin türünü başka bir türe çevirmeye yararlar. intval(),
ortaya çıkartacağı tamsayı değişkenin 10 tabanlı (decimal) veya
16 tabanlı (hexadecimal) olmasını sağlayan ikinci bir argüman
alabilir:
<?php
$a = "123ABC";
$b = inval($a,
16)
print ($b);
?>
Bu program
Browser penceresine, 123'ün hexadecimal ifadesi olan "1194666"
yazdıracaktır.
İşlemciler
(Operatörler)
Yukarıdaki
örnekleri birlikte yaptıysak, = işaretini bol bol kullandık ve
böylece PHP'nin bir çok operatöründen biriyle tanıştık. Buna PHP
dilinde "atama operatörü" denir. Bu işlemci sadece yukarıda
kullandığımız gibi, bir değişkenin bir değere eşitliğini ilan
etmek amacıyla kullanılmaz. Örneğin:
print ( $sayi =
123 ) ;
ifadesinde
olduğu gibi, bir fonksiyonun içinde de hem atama işlemi
yapılabilir; hem de işlem yürütülür. PHP'nin aritmetik,
birleşik-atama, birleştirme, karşılaştırma ve mantıksal sınama
operatörleri vardır.
Aritmetik
işlemciler:
+ Toplama 6+5 =
11
- Çıkartma 6-5 =
1
/ Bölme 6/5 =
1.2
* Çarpma 6*5 =
30
% Kalan
(Modulus) 6%5 = 1
Aritmetik
işlemleri gerçek sayılarla yaptığımız gibi, tuttuğu değer sayı
olan değişkenlerle de yapabiliriz.
Daha önce,
PHP'de değişken tanımlar ve bunlara değer atarken sayı olan
değişkenleri tırnak işareti kullanmadan, alfanümerik
değişkenleri ise tırnak içinde yazdığımızı hatırlayacaksınız.
Bu, geleneksel hale gelmiş olan bir programcılık alışkanlığıdır.
PHP, tırnak kullanmasanız da bir değişkenin sayı olup olmadığını
anlar; daha sonra bu değişkenlerle aritmetik işlem yapabilir.
PHP ayrıca rakamla başlayan alfanümerik değişkenleri sayı olarak
kullanmaya kalktığınızda, bu değerin başındaki bütün rakamları
sayı olarak kabul eder. PHP açısından harf veya işaretle
başlayan alfanümerik değişkenlerin sayı olarak değeri sıfırdır.
Örnek:
$a = 6;
$b = "22/A"
print ($a + $b)
sonuç olarak
28'i verecektir; veya
$a = 6;
$b = "A/22"
print ($a + $b)
sonuç olarak 6
çıkacaktır. Bu küçük deneyi yaparsanız, PHP ile program yazarken
hangi değişkenin ne sonuç vermesi gerektiğini dikkatle düşünmek
zorunda olduğunuzu görürsünüz. Bir kişinin geliri ile adresini
toplamak, programcı olarak arzu ettiğiniz bir işlem olmayabilir!
Bununla birlikte
elimizde bir kişinin adı ve soyadı ayrı değişkenler halinde ise,
bunları birbirine ekleyerek (concatenation) ortaya yeni bir
alfanümerik değişken çıkartabiliriz:
<?php
$adi = "Reşit";
$soyadi =
"Muhtar";
$adi_soyadi =
$adi . " " . $soyadi;
print ("<br>");
print
($adi_soyadi);
print ($adi .
"'nın soyadı " . $soyadi . "'dir.")
?>
Bu örnekte,
sadece ekleme yoluyla yeni bir değişken oluşturmakla kalmıyoruz;
fakat alfanümerik değişkenleri, başka metinlerle de birbirine
ekleyebildiğimizi görüyoruz. Bu işlemi nokta işaretiyle (.)
yapıyoruz. Bu işlemciyle sadece değişkenlerin değerlerini değil
fakat metinleri de birbirine ekleyebiliriz:
<?php
print ("İyileri
iyikleri ile alkışla; " . "..." . "ve sen soluklarında daima
Mesîh ol..! ")
?>
PHP'nin atama
işlemcisinin eşittir (=) işareti olduğunu hatırlıyorsunuz
birleşik-atama (combined-assignment) işlemcileri, bu işarete
diğer aritmetik işlemciler eklenerek oluşturulur.
İşlemci Örnek
Anlamı
+= $a += 5 $a =
$a + 5
-= $a -= 5 $a =
$a - 5
/= $a /=5 $a =
$a / 5
*= $a *= 5 $a =
$a * 5
%= $a %= 5 $a =
$a % 5
.= $a .= "metin"
$a = $a" metin"
Bu işlemi
zihnimizde, "A değişkeninin mevcut değerine 5 ekle, çıkan sonucu
A değişkenin yeni değeri yap!" şeklinde canlandırabiliriz.
Bir Arttırmak
veya Azaltmak için
Değerleri sadece
1 arttırmak veya azaltmak için PHP, bir kolaylık sağlar:
$a++veya ++$a:
$a'nın değerini 1 arttırır;
$a--veya --$a:
$a'nın değerini 1 eksiltir.
++ veya --
işaretinin değişken adından önce veya sonra olmasının sonucu
farklı olur. İşaretler değişkenin adından önce ise PHP önce
değişkenin değerini bir arttırır veya eksiltir, sonra bu yeni
değeri işleme katar; işaretler değişken adından sonra ise, PHP
değişkenin o andaki değerini işleme kadar, sonra değeri bir
arttırır veya eksiltir.
PHP'nin
karşılaştırma yapması için kullandığımız işlemciler ise işlem
işaretinin sağı ve solundaki değerleri veya değişkenlerin
değerlerini işaretin belirttiği karşılaştırmayı yaptıktan sonra
ortaya ya doğru (true) ya da yanlış (false) sonucunu
çıkartırlar. Söz gelimi, değeri 6 olan değişkenin 5'ten büyük
olup olmadığını sınarsak, sonuç doğru; 5'ten küçük olup
olmadığını sınarsak sonuç yanlış çıkacaktır. PHP'nin
karşılaştırma işlemcileri şunlardır:
İşlemci Örnek
Örnek $a=6 ise:
== eşitse $a ==
5 Yanlış/False
!= eşit değilse
$a != 5 Doğru/True
=== aynı ise $a
=== 5 Yanlış/False
> büyükse $a > 5
Doğuru/True
< küçükse $a < 5
Yanlış/False
<= küçükse $a <=
5 Yanlış/False
veya eşitse
>= büyükse $a >=
5 Doğru/True
veya eşitse
PHP'nin
karşılaştırma işlemcileri hem tam ve ondalık sayı türü
değerlerle, hem de alfanümerik değerlerle kullanılabilir.
Daha ileri
aşamalarda, bazen değişkenlerimizin karşılaştırmasının bu kadar
basit olamayacağını; kimi zaman iki grup değişkenin
karşılaştırılması gerektiği durumların bulunduğu göreceğiz.
Diyelim ki, bir öğrencinin başarılı sayılması için hem vize
notunun, hem de yılsonu sınav notunun belirli sayılardan büyük
olması gerekiyor. Bu durumu ancak karmaşık-mantıksal sınamadan
geçirmemiz gerekir. Bu sınamayı iki ayrı sınama sonucu ile
birlikte kullanırız. Örneğin:
vize notu
yeterli - final notu yetersiz = kalır (yanlış/false)
vize notu
yeterli - final notu yeterli = geçer (doğru/true)
PHP'de bu
karşılaştırmayı iki grubun arasına koyduğumuz işaretlerle
yaparız İşaretin sağ ve sol tarafının doğruluğu veya yanlışığı
işarete göre nihai sonucun doğru veya yanlış olmasını sağlar. Bu
karşılaştırmaları yaparken şu işlemcileri kullanırız:
İşlemci Adı
Anlamı Örnek
|| veya sol veya
sağ doğru doğru || yanlış = doğru
or veya sol veya
sağ doğru doğru || yanlış = doğru
&& ve sol ve sağ
doğru doğru || yanlış = yanlış
and ve sol ve
sağ doğru doğru || yanlış = yanlış
Xor Şartlı-veya
Sadece sol veya sağ doğru doğru || yanlış = doğru
! Değil sol veya
sağ yanlış doğru || yanlış = doğru
"veya" ve "ve"
sınamaları için iki ayrı işlem işareti bulunmasının sebebi,
PHP'nin işlem sırasıyla ilgilidir. Birazdan oraya geliyoruz.
Şimdi, kavranması kolay olmayan ikili mantıksal sınamalara bir
örnek verelim; yukarıda öğrencinin durumunu PHP komutu olarak
yazalım.
<?php
$vize = 45;
$final = 65;
if ($vize >= 50
&& $final >= 50) {
print ("Öğrenci
geçti!");
}
else {
print ("Öğrenci
kaldı!");
}
?>
Mantıksal
karşılaştırma işlemleri daha da karmaşık olabilir. Örneğin,
öğrencinin geçmiş sayılması için yılsonu vize ve final
notlarının 45'dan yüksek, ve ya birinci sömester notunun ya da
vize ve final notlarının ortalamasının 65'den yüksek olması
şartı aranabilir. (Kabul; kötü bir örnek oldu. Ama sırf
alıştırma için!) Bu durumda kodu şöyle yazmamız gerekirdi:
<?php
$vize = 45;
$final = 65;
$ilk_sem = 45;
$ortalama =
($vize + $final) / 2;
if (($vize >= 45
&& $final >= 45) and ($ilk_se >= 65 || $ortalama >= 65)) {
print ("Öğrenci
geçti!");
}
else {
print ("Öğrenci
kaldı!");
}
?>
Burada, PHP önce
|| veya && işaretinin sonucunu bulacak sonra and veya or
işlemcisinin gereğini yapaçaktır. Bu kodun vereceği sonucu,
bilgisayarda çalıştırmadan tahmin edebilir misiniz? İpucu: Bu
öğrencinin yerinde olmak istemezdim!
İşlem önceliği
deyince.. Bütün programlama dilleri gibi PHP için de işlemlerin
hangi sırada yapıldığı önem taşır. "5 + 4 * 2" işleminin sonucu,
önce 5 ile 4'ün toplanması ve sonucun 2 ile çarpılması halinde
başka, 4'ün 2 ile çarpılması ve sonucun 5 ile toplanması halinde
başka olacaktır. Bu bakımdan, PHP'nin hangi işlemi önce yaptığı,
hangi işlemi sonra yaptığını bilmemiz gerekir. PHP'deki
işlemlerin yapılış sırası şöyledir:
++ ve --
/ * %
+ -
< <= => >
== === | =
&&
||
= += -= /= %= .=
and
xor
or
r.
Sabit Değerler
İster Web, ister
Web-dışı amaçlı olsun, bir programın bazen başındanh sonuna
kadar değeri değişmeyen değişkene ihtiyacı olabilir. "Değeri
değişmeyen değişken" teriminin anlamsız olduğu kanısında iseniz,
bunlara sabit değerler adını da verebilirsiniz! PHP'de sabit
değerler, Script boyunca değişmeden kalır.
Sabit değerler,
değişkenlerden farklı şekilde oluşturulur. Bunun için PHP'nin
define() fonksiyonunu kullanırız. Bu fonksiyonun yazım kuralı
şöyledir:
define
("SABIT_DEGER", değer);
Burada
SABIT_DEGER yerine, tanımlamak istediğimiz sabit değere
vereceğimiz isim, değer yerine de sabit değeri yazarız. Örnek:
<?php
$Dolar_miktar =
125;
define (
"DOLAR_KURU", 625675);
$TL_Tutar =
$Dolar_miktar * DOLAR_KURU;
print
($TL_Tutar);
?>
Burada
tanımladığımız DOLAR_KURU sabit-değeri, tıpkı bir değişken gibi
kullanılabilir. Fakat bir sabit değeri tanımladıktan sonra
içeriğini değiştiremezsiniz. Sabit değer ile aynı ismi taşıyan
değişken oluşturmak mümkündür; ancak aynı ismi taşısa da bir
sabit ile değişkeni (birinin adının önünde $ işareti bulunduğu
için) karıştırmak kolay olmasa gerek.
Tanımlanmış olan
bir sabiti yeniden oluşturamayız; ama buna teşebbüs ettiğimizde
PHP hata vermez. Bir sabit değerin oluşturulmuş olup olmadığını
defined() fonksiyonu ile anlayabiliriz:
<?php
$Dolar_miktar =
125;
if (defined(
"DOLAR_KURU" )) {
echo ("Sabit
değer daha önce tanımlanmıştı.<br>");
}
define (
"DOLAR_KURU", 625675);
$TL_Tutar =
$Dolar_miktar * DOLAR_KURU;
print
($TL_Tutar);
?>
Bu programı, bu
şekilde ve define() komutunu en üst satıra alarak
çalıştırırsanız, ikinci çalıştırışınızda programın sabit değeri
yeniden oluşturmayı reddettiğini görecektiniz. Sabit değerleri,
Web sitesinde ziyaretçilerin girdiği verilerden alarak
kendiliğinden oluşturan bir program yazdığınızda, defined()
fonksiyonu mantıksal hata yapmanızı önler.
PHP'nin
kullanılmaya hazır bir kaç sabid değeri vardır. True (doğru)
değeri 1 olan, False (yanlış) ise değeri sıfır sayısı veya boş
alfanümerik olan iki sabittir. Diğer sabitler şunlardır:
__FILE__ : O
anda çalışmakta olan PHP dosyasının adı (kelimenin önünde ve
sonunda iki alt-çizgi var);
__LINE__ : Bu
ifadenin yer aldığı satırın sayısı (kelimenin önünde ve sonunda
iki alt-çizgi var);
PHP_VERSION:
PHP'nin sürümü (İki kelimenin arasında bir alt-çizgi var);
PHP_OS: PHP'nin
çalıştığı işletim sistemi (İki kelimenin arasında bir alt-çizgi
var);
PHP_VERSION :
PHP'nin sürümü (İki kelimenin arasında bir alt-çizgi var);
Bunlara ek
olarak, E_ERROR, E_WARNING, E_NOTICE ve E_PARSE şeklinde hata
durumunda hatanın çeşitli özelliklerini bildiren sabit değerleri
de kullanabiliriz.
PHP hakkında çok
daha geniş bilgiyi phpinfo() fonksiyonunu çağırak alabilirsiniz.
Tarih ve saat
Verisi
PHP, o andaki
zaman bilgisini, saat, dakika, saniye ve salise olarak; tarih
bilgisini yıl, ay, gün (sayı veya isim olarak), programımızın
herhangi bir yerinde bize bildirebilir. Bu bilgiyi Web
sunucusunda istediğimiz anda, muhtemelen sunucunun bulunduğu
bilgisayarın sistem saatinden alacak olan PHP, sunucu
programında farklı bölgesel ayarlar için gerekli düzenleme
yapılmışsa, bu imkandan yararlanarak bize sunucunun değil, arzu
ettiğimiz bölgenin saat ve tarihini bildirebilir.
Özellikle
Türkiye'de olmayan bir sunucuda bu imkanın bulunup
bulunmadığını, ancak sınayarak veya sistem yöneticisine sorarak
öğrenebiliriz. Böylebir sıNama için şu kodları programınızın
başına koyun:
<?php
setlocale
("LC_TIME", "TR");
print (strftime
("Türkçe bugün günlerden: %A "));
?>
Browser
penceresinde "Türkçe bugün günlerden Sunday" yazısını okursanız,
sunucuda Türkçe için bölgesel ayar desteği yok demektir!
PHP'nin zaman ve
tarih belirlemekte kullanabileceğiniz başlıca fonksiyonu
getdate() ise şxöyle kullanılır.
getdate() Tarih
ve saat bilgisini alır ve ve vereceğiniz bir isimdeki
dizi-değişkende kaydeder. Örnek:
$saat_tarih =
getdate()
Bu durumda,
$saat_tarih dizi değişkeninde sırasıyla şu bilgiler yer alır:
32 saniye
57 dakika
6 saat
30 ayın gün
sayısı (1-31)
0 haftanın gün
sayısı (1-7)
7 ayın sayısı
(1-12)
2000 yıl
211 yılın
kaçıncı günü
Sunday günün adı
July ayın adı
964929452 Unix
sistemlerinde Epoch biçiminde zaman bilgisi
PHP'nin tarih ve
saat bilgisini biçimlendirmede yararlandığımız date()
fonksiyonunu daha sonra metin biçimlerdirme bölümünde ele
alacağız.
Başa
dön
PHP'de Program
Denetimi
Bilgisayar
programı, belirli değerlere göre kendi izleyeceği yolu kendisi
bulmalıdır. Bir Web programı da aynı mantıkla tasarlanır. PHP,
bir kısmını daha önceki bölümlerde, bir kısmını da şimdi ele
aldığımız araçları kullanarak, belirli durumlarda belirli
istikametlere gidecek, yeri geldiğinde geri dönecek, yeri
geldiğinde başka bölümlere sıçrayacak bir akış planı
tasarlamamıza imkan verir.
Web
programlarımızda, ziyaretçilerimizin sitemizde yaptıkları veya
yapmak istediklerini bildirdikleri işe göre sayfalar, bu işlere
göre sayfa içerikleri sunarız. Web programımız ziyaretçimizin
hareket tarzına ve amacına uygun olarak ilerler. Bir programın
akış planını kontrol etmemizi sağlayan unsurlar çoğu zaman
programın kendi kendine karar vermesini sağlayan araçlardır.
PHP'de program denetim unsurları, programın gidiş yönünü
değiştirmemizi veya olduğu yerde durmasını ve beklemesini veya
bir işi biteviye yapmasını sağlar. Bu bölümde bu araçları ele
alacağız.
if Deyimi
İnsan olarak
kararlarımızı hemen hemen daima "bir şey öyle ise böyle, öyle
değilse şöyle davranmak" üzere almaz mıyız? PHP programında if
deyimi bunu sağlar. Kelime anlamı eğer olan if deyimi ile
programımızı karar almaya zorlarız. Ne var programımız bizim
kadar akıllı olamayacağı için if şartının doğru veya yanlış
olması durumunda ne yapacağını da ona biz söyleriz. if deyimi
şöyle yazılır:
if ( koşullar )
{
koşullar doğru
ise yapılacak işlere ilişkin komutlar
}
elseif (diğer
koşullar) {
diğer koşullar
doğru ise yapılacak işlere ilişkin komutlar
}
else {
diğer her
durumda yapılacak işlere ilişkin komutlar
}
PHP, if
ifadesinin doğru olması halinde, ifadeye ait ilk süslü
parantezin içindeki komutları icra eder; bu şartlar doğru
değilse, elseif deyimi ile ileri sürebileceğimiz diğer bir grup
şartın doğru olup olmadığını sınayabiliriz. Bu şartlar yerine
geliyorsa, PHP, elseif bölümündeki işleri icra eder. Nihayet
diğer her hangi bir durumda icra edilmesini istediğimiz
komutları else bölümünde belirtiriz. PHP, if deyimi doğru
değilse, deyime ait süslü parantezin içindeki işleri yapmadan
yoluna devam eder; varsa elseif deyiminin şartlarını sınar;
elseif bölümü yok fakat else bölümü varsa bu bölümdeki işleri
icra eder. Deyimde else bölümü de yoksa, PHP yoluna if
deyiminden sonraki ilk adımdan devam eder. Bunu bir örnekle
belirtelim:
<?php
$sarki = "Güneş
Doğacak";
if ( $sarki ==
"Güneş Doğacak" ) {
echo
("Seçtiğiniz şarkının adı: Güneş Doğacak!");
}
elseif ($sarki
== "Beklerim Ben") {
echo
("Seçtiğiniz şarkının adı: Beklerim Ben!");
}
else {
echo ("Lütfen
bir şarkı seçiniz!");
}
?>
Çoğu zaman if
deyimlerini birden fazla koşulu sınayacak şekilde yazarız;
bununla birlikte elseif ve else bölümleri olmadan da
yazılabilir:
<?php
if ( $parola ==
"" ) {
echo ("Sitemize
girmek için parola yazmanız gerekir.<br>");
echo ("Lütfen
parolayı yazın! <br>");
}
?>
Buradaki if
deyimi $parola değişkeninin boş alfanümerik olması halinde
ziyaretçiyi uyarak ve görevi bitecektir. Ziyaretçi bir parola
yazmışsa, daha sonraki komutlar bu parolanın doğru olup
olmadığını sınayabiliriz.
switch deyimi
PHP'de program
akışını yönlendirmekte kullandığımız bir diğer unsur, switch
deyimidir. Adı anahtar anlamına gelen switch deyimi, verilen bir
değişkenin değerinin sıraladığımız koşullardan hangisine uygun
olduğunu sınar ve o koşula ilişkin komutları icra eder. PHP'nin
yaptığı işi bitirdikten sonra switch deyiminin dışına çıkmasını
sağlayan, break komutu vardır:
switch (
değişken ) {
case KOŞUL-1 ;
Koşul-1 doğru
ise yapılacak işlere ilişkin komutlar
break;
case KOŞUL-2 ;
Koşul-2 doğru
ise yapılacak işlere ilişkin komutlar
break;
case KOŞUL-3 ;
Koşul-3 doğru
ise yapılacak işlere ilişkin komutlar
break;
case KOŞUL-4 ;
Koşul-4 doğru
ise yapılacak işlere ilişkin komutlar
break;
......................
......................
default:
diğer her
durumda yapılacak işlere ilişkin komutlar
}
switch deyimini
yazarken mutlaka break ifadesini kullanmamız gerekmez; switch
deyiminin akışı break ile kesilmemişse, program ilk şart yerine
gelmiş olsa bile diğer şartları da sınamaya devam eder ve en
sondaki default deyimine ulaşarak (default'tan sonra noktalı
virgül değil iki nokta üstüste işareti olduğuna dikkat edin), bu
bölümdeki komutları icra eder. Ne var ki programcılık mantığına
aykırı olabilir: bir değişkenin içeriği verdiğimiz şartlardan
birini tutmuşsa, muhtemelen diğer şartları yerine getirmeyecek
demektir. Bu durumda diğer koşulların sınanması gereksiz e
default işlerin icra edilmesi ise hata olur. Bu deyimi de bir
örnekle görelim:
switch ( $sarki
) {
case "Güneş
Doğacak" ;
echo
("Seçtiğiniz şarkının adı: Güneş Doğacak<br>") ;
break;
case "Derdime
Derman" ;
echo
("Seçtiğiniz şarkının adı: Derdime Derman<br>") ;
break;
case "Haberi
Yok" ;
echo
("Seçtiğiniz şarkının adı: Haberi Yok<br>") ;
break;
case "Sonsuza
kadar" ;
echo
("Seçtiğiniz şarkının adı: Sonsuza kadar <br>") ;
break;
default:
echo
("Seçtiğiniz şarkının adı bilinmiyor<br>") ;
}
Programımız, bu
kodu icra ederken,, $sarki adlı değişkenin değerini, buradaki
dört isimle karşılaştıracaktır. Şarkının adı, "Güneş Doğacak"
ise ilk durum gerçekleşmiş olacak; program Browser pencerisine
şarkının adını yazacak (ve muhtemelen bu sözlerini
görüntüleyecek!) ve ikinci adıma break ifadesine geçecektir.
break, switch deyiminin sona ermesini sağlar; PHP yoluna, switch
deyiminin kapanan süslü parantezinden sonra devam eder. Bu
örnekte break ifadesi kullanılmamış olsaydı, PHP, diğer şartları
da sınacak ve boşun azaman kaybedecekti; daha da garibi, en
sondaki default komutu da icra edileceği için programımız
Browser pencerisine hem seçilen şarkının adını, hem de
"Seçtiğiniz şarkının adı bilinmiyor" yazacaktı. Bunu gözönünde
tutarak, switch deyimini daima break ile birlikte yazmamız
gerekir.
switch için kısa yol Kimi zaman uzun uzadıya
switch deyimi yazmamız gerekmeyebilir; bir değişkenin değerini
sadece bir şarta uygunluk açısından sınamamız gerekir. Bunu soru
ve iki nokta üstüste işaretleri (? ... :) olarak yazılan işlemci
ile yaparız. Diyelim ki, Web sitemizi ziyaret eden kişinin
parola yazıp yazmadığını sıramak istiyoruz:
Bu kod parçacığı, ziyaretçinin parola girip girmediğini $parola
değişkeninin içinin boş olup olmadığına bakarak anlayacak ve
$parola değişkenin içi boş ise (yani soru işaretinin sorguladığı
durumun doğru olması hali |