PHP WEB PROGRAMLAMA
DİLİ
PHP Nedir
PHP şu şekilde tanımlanabilir:
*Sunucu
tabanlı (server sided),
*HTML ile bir arada kullanılabilen (HTML embedded),
*Script dili.
PHP'nin gelişim süreci:
*PHP-FI (Dinamik HTML
üretimi, satır satır kod işletimi, CGI modeli çalışma)
*PHP-3.x (Apache'ye
modül olarak gömülebilme, yerleşik veri tabanı arabirimleri)
*PHP-4.x (Ön
derleme ve optimizer ile ara kod iyileştirme, eklentiler)
Çalışma Modeli
* Veri tabanı sistemi ile evrensel ve
hafif istemciler arasında yer alır.
* Hem HTML üretimi, hem de uygulama
mantığı PHP motoru üzerinde gerçekleşir.
* Genel olarak Web tarafı ağır
basan üç katmanlı yapıyı esas alır.
Neden PHP?
- Verimlilik
- Bakım kolaylığı
-
Taşınabilirlik
- Uyumluluk
- Performans
- Hızlı Gelişim ve Yaygınlık
- Ekonomik
Verimlilik
Web uygulamaları hızlı geliştirme
gerektiren türde uygulamalardır. Bu nedenle bu alanda script dilleri ön plana
çıkmışlardır.
* Kod boyu kısalmalı. PHP web uygulamaları için yazılabilecek
kod sayısını en dengeli düzeye çekmiş gibi görünüyor. PHP, yapmanız gereken işi
en kısa yoldan yaparken işlevselliği de sınırlamıyor. İşlevselliği çok iyi
olmasına karşın Java servletleri yazılması gereken kod boyunu aşırı artırıyor.
* Hazır araçlar. PHP'nin fonksiyon kütüphanesi oldukça geniş. 4.0
versiyonunda 1729 fonksiyon tanımlı. Mail, FTP, LDAP ve HTTP gibi protokollerini
kullanabilmek için RFC okumanıza gerek yok. Veritabanlarına erişim fonksiyonları
işi kolaylaştırmış.Allaire firmasının Cold Fusion ürününde kullanılan CFML (Cold
Fusion Markup Language) script dili kısa ve okunurluğu iyi olmasına karşın
sadece 60 tag ve 200 fonksiyon ile sınırlanmış. Aynı şekilde ASP ile hazır gelen
araçlar da oldukça sınırlı.
* Yeniden kullanılabilirlik. PHP, nesneye
yönelik programlama için destek veriyor. PHP kullanıcılarının hazırlamış olduğu
kütüphaneler kullanılabileceği gibi kendi kütüphanelerinizi oluşturup
kullanmanız da mümkün.
Bakım Kolaylığı
Web uygulamaları çok sık
güncellenirler. Her defasında sıfırdan kod yazmamalısınız. Kod bakımı ve
değiştirilebilmesi kolay ve hızlı yapılabilmelidir.
* Okunurluk. PHP kodunun
okunurluğu oldukça yüksek. Kısa olmalarına karşın Perl kodları uzman olmayan
programcılar tarafından kolay okunamıyor. Tam tersine kodlama gereksinimi fazla
olan java servletlerinde de geliştiricilerin birbirini miras alan sınıfları
takip ederken kaybolması muhtemeldir. Ekibiniz her zaman perl veya java uzmanı
programcılardan oluşmayabilir.
* Modülerlik. PHP'nin include() ve requires()
gibi fonksiyonları kodunuzu küçük ve mantıklı parçalara ayırmanıza yardım
ediyor. Nesneye yönelik programlama teknikleriyle de modülerliği
artırabilirsiniz.
* Sunum ve iş mantığının ayrılması. PHPLib kütüphanesi
veya kendi oluşturabileceğiniz template işleyici fonksiyonlar ile de kullanıcı
arabirim tasarımını, iş mantığından ayırmınız çok kolay. Böylece web
tasarımcıları koddan bağımsız olarak görünüme yoğunlaşırken, programcı görünümle
hiç uğraşmadan arka planda çalışması gereken program mantığı üzerine
yoğunlaşabilir.
Taşınabilirlik
Platformdan bağımsızlık sadece Java'nın sloganı
değil. Geliştirdiğiniz uygulamaların değişik işletim sistemleri ve değişik web
sunucuları üzerinde çalışabiliyor olmasını istemez misiniz? Bu konuda PHP'nin,
java servletleri, JSP ve Perl dışında rakibi yok.
* Web Sunucu Desteği. Yeni
web sunucu arabirimi (Server API/SAPI) ile oldukça iyi bir soyutlama
gerçekleştiriyor.
* Apache (Apache Software Foud.) § iPlanet (Sun-Netscape
Alliance) § IIS (Microsoft) § AOL Web Server (America Online) § Zeus (Zeus
Tachnology) § Xitami (iMatix) § Roxen § Stronghold (C2Net) § OmniHTTPd (Omnicron
Tech.)
* İşletim Sistemi Desteği. Desteklediği sunucuların çalıştığı pekçok
işletim sisteminde de sorunsuz çalışır.
* Tüm Linux, Unix ve BSD türevleri §
MS Windows95-98-2000Prof/Server § OS/2 § MacOS
Uyumluluk
PHP, çok sayıda açık sistem ve protokol ile birlikte
çalışabildiği gibi hem de pek çok özelleşmiş sistem için yerleşik (native)
arabirim desteği sunmakta.
* Açık Sistem Protokolleri
* HTTP/HTTPS § FTP
§ LDAP § SMTP § IMAP, POP3 § NNTP § SNMP § Socket Arabirimi (TCP/IP)
*
Yerleşik Veri Tabanı Arabirimleri
* MySQL § mSQL § PostgresSQL § BerkeleyDB
§ MS-SQL § Interbase § Oracle § Sybase § DB/2
* Açık Sistem Teknolojiler
* ODBC § OpenSSL / X509 Sertifikaları § XML § PDF
Performans
*8 saniye kuralı.
Web'de ziyaretçiler genellikle yüklenmesi 8 saniyeyi geçen sayfalardan
vazgeçerler. Buna karşın çoğu kez bant genişliğiniz sınırlıdır. Toplam 35KB
büyüklüğünde olan bir sayfa 56Kbps'lik bir modemle 7-8 saniyede çekilir. Bu
süreye sunucu cevap süresi eklenecektir.
* Cevap süresi (response time).
Normalde web sunucusu dinamik bir sayfada script işletimi bitene kadar cevap
göndermez. Bu sürenin de 1-2 saniyeyi aşmaması zorunludur.
* CGI kullanan
uygulamalar işletim sistemi tarafından görevlerin paralel olarak hafızaya
yüklenmesi ve bunlar arasında geçişler gerektirdiği için CPU, RAM, zaman
harcaması fazladır ve tutarsız davranırlar. Her seferinde yeniden veri tabanına
bağlantı gerektirirler.
* Server API'si kullanan modüller ise CGI'ya göre
15-20 kat hızlı çalışabilirler. PHP'nin SAPI kullanan modül versiyonu da bu
avantajdan yararlanır.
* Zend optimizer ile ara kod iyileştirmesi
kullanılarak buna ek olarak %40 - %100 hızlanma elde edilebilir.
* Yerleşik
(native) veritabanı desteği verdiği için ODBC kullanan sistemlere göre de
hızlıdır.
* Sürekli veritabanı bağlantıları (persistent connections). Java
servletlerindeki connection pooling mantığını programcıya saydam tutarak
kullanır.
* PHP standart görevler için ASP'de olduğu gibi COM nesneleriyle
iletişim kurmak zorunda kalmaz. Bu tür işlevler sunucunun kendi hafıza alanı
içinden çağrılır.
* Önbellekleme. Zend Cache ve benzeri yazılımlar ile
scriptler derlenmiş olarak hafızada tutulabilir.
Hızlı Gelişim ve
Yaygınlık
* Açık kaynak kodlu. Bir çok ülkeden gönüllü geliştiricilere sahip.
Hatalar çok çabuk bulunup düzeltiliyor. Pek çok web sunucusu ve işletim
sistemine port edilmiş durumda. Kendi sisteminiz üzerinde PHP'den kaynaklanan
bir sorun olursa en kötü durumda PHP koduna müdahale etme şansınız var.
*
Dünya üzerinde PHP kullanan domain sayısı 5.747.237, IP adresi sayısı ise
882.439 (Netcraft).
* Apache üzerinde en yaygın kullanılan modül (Security
Space / E-Soft Inc.).
Module Mar 2001Count Mar 2001% Feb 2001Count Feb 2001%
Growth%
PHP 588124 38.68% 562725 37.82% 2.28%
FrontPage 289505 19.04%
285097 19.16% -0.63%
mod_ssl 194166 12.77% 178694 12.01% 6.33%
perl 186722
12.28% 178713 12.01% 2.24%
OpenSSL 179255 11.79% 163540 10.99%
7.26%
ApacheJServ 63655 4.19% 61918 4.16% 0.60%
Ekonomik
* Tüm eklentileri ile birlikte ücretsiz.
Gelişmiş
Özellikler
* Değişebilir Değişkenler
* Kurallı İfadeler
* Semafor ve
Shared Memory
* Yerleşik Oturum Desteği
* Çıktı Yastıklama
*
Serialization
* Java Desteği
* Windows COM Desteği
* XML ve SOAP
Desteği
* Şifreleme ve OpenSSL
Değişebilir
Değişkenler (Variable Variables)
PHP, Perl ve JavaScript'de olduğu gibi
değişkenlerin çalışma anında tip değiştirebilmesine (type juggling) olanak
sağlıyor. Bunun ötesinde değişkenler üzerinde çalışırken çok daha fazla
esnekliğe sahipsiniz.
$x="elma";
$$x="armut";
echo ${$i}; //
ekrana 'armut' yazar
echo $elma; // ekrana 'armut' yazar
Aynı özellik
fonksiyonlar için de
kullanılabiliyor:
if(...)
$funct="ImageCreateFromPNG";
else
$funct="ImageCreateFromJPEG";
$funct(...); //
Çağrılacak fonksiyonu çalışma anında belirledik
Kurallı İfadeler
PHP
kurallı ifadeleri (regular expressions) Perl kadar güçlü kullanabilir. Örneğin
bir metindeki tüm 'elma' ları 'armut' yapabilirsiniz:
$metin =
preg_replace("/elma/i", "armut", $metin);
Aynı sonucu java servleti
kullanarak almak isteserseniz:
String str1 = new String("elma");
String
str2 = new String("armut");
int x = metin.indexOf(str1);
while(x != -1)
{
metin = new String(data.substring(0, x) +
str2 + metin.substring(x +
str1.length()));
x = metin.indexOf(str1);
}
Pratikte ise bundan çok
daha karmaşık metin içinde arama, değiştirme türü işlemlere gereksinim
duyulur.
Semafor ve Shared
Memory
§ Semafor kullanarak,
§ Paralel çalışacak olan scriptleriniz
arasında zaman uyumlama yapabilir.
§ Eş zamanlı erişmemeleri gereken
kaynakları kilitleyebilirsiniz.
§ Shared memory kullanarak,
§ Hafızada
scriptlerinizin erişebileceği ortak alanlar tanımlayabilir,
§ Bu alanlara
her scriptin başında atanması gereken değişken değerlerini veya arama sonucu
gibi dinamik ürettiğiniz verilerinizi koyarak önbellek (cache) gibi
kullanabilirsiniz
Yerleşik Oturum
Desteği
Web için uygulama geliştirirken karşılaşılan en büyük sorun
uygulamanın o anki durumunu (state) belirlemektir.
İstemci tarafına oturum
bilgilerini atmak ve tekrar almak kolaydır. Çünkü PHP ile,
§ HTTP başlık
(header) bilgilerine erişebilir,
§ Cookie'leri normal değişkenler gibi
kullanabilir,
§ POST ve GET metodları ile gönderilmiş bilgileri değişkenler
içinde hazırlanmış olarak kullanabilirsiniz.
Tüm bu işleri programcıya daha
saydam hale getirmek için PHP'yle birlikte oturum fonksiyonları da geliyor.
Böylece,
§ Programcı oturumları takip etmek için cookie'ler ile uğraşmak
zorunda kalmıyor.
§ İstemci cookie desteği vermiyor ise oturum bilgisi
otomatik olarak URL içinde taşınıyor.
Çıktı Yastıklama (Output
Buffering)
§ Normalde echo() veya printf() ile oluşturulan çıktı hemen web
sunucuya aktarılır.
§ Çıktı aktarıldıktan sonra PHP ile header() veya
setcookie() gibi fonksionlar ile HTTP başlığına müdahale etmeye kalkışılırsa
hata mesajı alınır.
§ Çıktı yastıklama kullanılarak scriptin çıkışına
göndereceği veri bloke edilip silinebilir veya istendiği zaman gönderilebilir.
§ Böylece kodun herhangibir yerinde HTTP başlığına müdahale edileceği zaman
önceden çıktı üretilip üretilmediği gibi kontrollere gerek kalmıyor.
§
'Location' response headeri kullanarak sayfalar arası geçiş mekanizması kullanan
programcıların iş akış mekanizması üzerine daha fazla yoğunlaşabilmelerine
olanak sağlar.
§ Üretilen çıktının boyu gibi bilgileri kullanabilirsiniz.
Sıkıştırılmış web sayfaları destekleyen tarayıcılara havada sıkıştırılmış
çıktılar üretebilirisiniz
Serialization
§ serilize() ve unserialize() fonk4siyonları ile
uygulamanız içindeki değişkenlerin ve değerlerinin, saklanabilir (storable) byte
dizilerine dönüştürülmüş biçimini elde edebilirsiniz.
§ Uygulamanızda
kullandığınız değişkenleri yapısallığını bozmadan dosyada, veritabanında,
paylaşılabilir hafızada veya cookie olarak tarayıcıda saklayabilirsiniz.
§
Aynı veya farklı PHP uygulamaları arasında kolayca veri aktarabilirsiniz.
Java Desteği
§ PHP ile Java'da hazırlanmış programları kullanabilirsiniz.
§ API arabirimini bildiğiniz sürece javada yazılmış bir programın
sınıflarına PHP içinden erişebilir ve PHP ile yaratılmış gibi kullanabilirsiniz.
public class Hello {
public Hello() {}
public String HelloStr(String
name) {
return "Merhaba " + name;
}
}
Yukarıdaki java sınıfını
derledikten sonra aşağıdaki gibi PHP scripti içinden
kullanabiliyoruz:
<?
$myHello=new Java("Hello");
echo
$myHello->HelloStr("Mustafa");
?>
§ PHP-Java ikilisini kullanarak
RMI ve CORBA kullanan dağıtık uygulamalar geliştirmeniz de mümkün hale gelmiş
oluyor.
Windows COM
Desteği
§ PHP içinden Windows ortamında COM arabirimi olan nesnelere
erişip normal PHP nesneleri üzerinde çalışıyormuş gibi kullanabilirsiniz.
<?
$word = new COM("word.application") or die ("word
başlatılamadı");
$word->Visible=1;
$word->Documents->Add();
$word->Selection->TypeText("Deneme...");
$word->Documents[1]->SaveAs("deneme.doc");
$word->Quit;
?>
§
Örneğin Excel veya Word dökümanları üzerinde çalışabilir, Access veritabanlarına
erişebilirsiniz.
§ COM ve DCOM arabirimi kullanan tüm Windows uygulamalarını
kullanabilirsiniz
XML, XLST Desteği
§ XML büyük veri yığınları ile uğraşma
ve uygulamalar arası veri aktarımı gibi konularda önümüzdeki günlerde daha çok
duyacağımız bir teknoloji.
§ PHP ile XML (Extensible Markup Language)
dökümanlarını çözümletebilirsiniz. XML kullanarak konu bazlı arama araçları
tasarlanabilir.
§ XLST (Extensible Style Sheet) ve XML kullanarak, sunum
bilgisi içermeyen XML dökümanlarınızın görünümünü esnek bir şekilde
belirleyebilirsiniz. Bu web sitelerinde içerik ve sunumu birbirinden ayırmak
için uygun bir altyapı sağlar.
§ XML-RPC türü uygulamalar
geliştirebilirsiniz. Bu sayede dağıtık uygulamalar birbiriyle standart bir
şekilde haberleşebilir.
Şifreleme ve OpenSSL
§ PHP ile tek yönlü
şifreleme ve özet üretme fonksiyonları kullanabilirsiniz (MD5, Crypt, ... )
§ PHP simetrik çalışan pek çok şifreleme algoritmalarını da destekliyor
(DES, DES3, Blowfish, IDEA, ...)
§ PHP 4.0 versiyonunda OpenSSL'i de dahil
ederek asimetrik şifreleme (RSA, DSA) metodlarını da destekliyor.
§ Bu
bağlamda X509 sertifikalarını da kullanabilirsiniz.
§ Böylece uzak noktalar
arasında güvenli veri aktarımı gerçekleştirebilirsiniz
Ulakbim'de PHP
§
Site genelinde statik sayfalar için PHP ön işleyicisi (parser).
§ WebManager
§ Ulusal Belge Sağlama Projesi
§ Süreli Yayınlar Projesi ve diğerleri
PHP Ön İşleyicisi
§ Ulakbim sitesinde içerik ve görünümün birbirinden
ayrılabilmesi,
§ Site genelinde, tek bir noktadan yönetilebilecek tutarlı
bir görünüm elde etmek için geliştirildi.
§ Bunu yapabilmek için statik
sayfalarda SSI benzeri kendimize özel taglar tanımladık.
§ Alt yapı olarak
Apache sunucusu üzerinde, DSO modülü olarak yüklü PHP kullandık. Aynı makinada
MySQL veritabanı sunucusu da bulunmakta ve herhangibir performans kaybı söz
konusu olmamaktadır.
§ Sonuçta tüm Ulakbim sitesi arka tarafta dinamik
olarak üretilmektedir.
§ Ayrıntılı bilgi için:
http://www.ulakbim.gov.tr/hakkimizda/site/
Ulusal Belge Sağlama Projesi
§ CABIM'in sunduğu belge
sağlama hizmetinin internet ortamına aktarılmasını hedefleyen büyük çaplı bir
proje denebilir.
§ Büyük bölümü PHP ile ve bazı batch işlemler Perl ve Shell
Script kullanılarak yapıldı.
§ Kodlama aşaması az sayıda programcı tarfından
3 ay gibi bir sürede tamamlandı.
§ MySQL veritabanı kullanmakta ve veri
güvenliği için her gün replication yapılıyor.
§ Internete açık tarafında
müşteri modülü,
§ Intranet'imize bakan tarafında ise belge sağlama hizmeti
veren görevliler için modül içeriyor.
§ Katalog taramalarında da PHP
kullanılıyor.
§ Yakında güvenli bağlantı (HTTPS) kullanarak kredi kartı ile
ödeme kabul eder hale getirilecek. Bu kısımda yine PHP-Perl ikilisi
kullanılıyor.
§ Ayrıntılı bilgi:
(http://www.ulakbim.gov.tr/servisler/belgesaglama/)
Süreli Yayınlar Projesi
ve Diğerleri
§ Süreli Yayınlar Projesi, Ulakbim tarafından ısmarlanan süreli
yayınların takibi için kütüphane otomasyon uygulamasıdır. Proje, kütüphane
otomasyonu projesinden öteye götürülebilecek şekilde oluşturulmaya çalışılıyor.
Henüz geliştirme aşamasında.
§ Ulakbim forumları için kullanıcı yönetim
modülleri. Ücretsiz dağıtılan Phorum yazılımına bir eklenti olarak geliştirildi.
Ulakbim'in kurumsal kullanıcılarıyla çalışma grupları çerçevesinde yakın
çalışabilmesi için tasarlandı. Sadece üye kullanıcıların erişmesi sağlanıyor.
Intranet tarafında moderatörler için yönetim ekranlarına da sahip. Kullanılıyor.
§ WebAccess projesi, Ulakbim'in ihtiyaç duyduğu veritabanı kullanan küçük
çapta uygulamalar için otomatik veritabanı ve form üretmek/değiştirmek için
geliştirildi. Microsoft Access benzeri bir uygulamanın Web versiyonuna da
denebilir. Birden çok veritabanını kullanabilmek için class olarak bir soyutlama
tabakası kullanıyor. Proje çeşitli sebeplerle tamamlanamamış olmasına rağmen şu
an küçük çapta veritabanı uygulamaları için sorunsuz bir şekilde kullanılmakta.
§ Şu anda Ulakbim'de veritabanları, dosyalar ve LDAP sunucusu gibi kaynaklar
üzerinde arama, listeleme ve değiştirme yapan türde pek çok uygulama PHP ile
geliştirilmiş durumdadır.
Açık Kaynak Kodlu
Projeler
PHP ile bir uygulama geliştirirken daha önce bu konuda açık kaynak
kodlu bir çalışma olup olmadığına bakmalısınız. Yapacağınız iç çok özelleşmiş
değilse var olan uygulama üzerinde ufak değişiklikler yapmak büyük zaman kazancı
sağlayabilir.
§ Midgard. PHP uygulaması değil ancak PHP uygulamaları
geliştirmek için framework sunan ileri bir içerik yönetim uygulaması. PHP'ye ve
Apache'ye modül olarak ekleniyor. İleri düzeyde XML kullanıyor.
§ PHPlib.
Oturum desteği, kullanıcı doğrulaması, templateler ve daha pekçok şey için hazır
kütüphane (framework).
§ Phorum. Web forumları.
§ Horde-IMP. Web mail.
§ PHPNuke, eZ publish. Portal, içerik yönetimi.
§ The Exchange.
E-commerce.
Bağlantılar
§ PHP (http://www.php.net/). PHP ekibi.
§
Apache (http://www.apache.org/). En çok kullanılan, saplamlık ve hızı
kanıtlanmış web sunucusu.
§ MySQL (http://www.mysql.com/). Web için sağlam,
hızlı veritabanı.
§ Zend (http://www.zend.com/). PHP 4.0 motorunu üreten
şirket. Bu motoru ve Optimizer'ini ücretsiz dağıtıyor.
Sunumlar
§ LDAP
Tabanlı Dizin Servisleri ve Akademik Uygulamaları
(Akademik Bilişim 2002
Konferansı, 6-8 Şubat 2002, Konya Selçuk Üniversitesi),
§ PDF sürümü (1,17
MB)
§ PHP'ye Genel Bakış (İnternet Haftası 19 Nisan 2001, Kayseri)
§ PHP
ile Web Uygulamaları Geliştirme (Web Eğitim Kampı, 26-30 Haziran 2000, Kuşadası)
§ PHP ile Sunucu Tabanlı Uygulamalar (UKKT, 8-9 Şubat 2000, Isparta)
Çalışmalar
§ Java ile Nesneye Yönelik Programlama (2001)
Mustafa Hadi
Dilek (hadi@ulakbim.gov.tr)
" Mustafa Hadi DİLEK " Örnek
Programlar
Örnek
ProgramlarÖdev, eğlence veya deneme amaçlı olarak yazdığım bazı programlar:§
Slide Puzzle § Karelerin yerini değiştirerek oynanan bir bulmaca oyunu § Dil:
Java (applet olarak) § MusiPlay § Windows için midi çalıcısı § Geliştirme aracı:
Delphi
Dökümanlar§ Programlama § PHP § PHP ile Web Uygulamaları Geliştirme
(Mustafa Hadi Dilek, 2000, Kuşadası Web Eğitim Kampı) § PHP 4.x Manual § Java §
Java ile Nesneye Yönelik Programlama (Mustafa Hadi Dilek, 2001) § Sun'dan Java
Developer Kit 1.3 Dökümanları § Perl § Perl Dökümanı § JavaScript § JavaScript
Guide for JavaScript 1.1 § Veritabanı Yönetim Sistemleri § MySQL § MySQL
Reference Manual for version 3.23.39 § World Wide Web § HTTP § RFC 2616 -
Hypertext Transfer Protocol, HTTP/1.1 § HTML § Hızlandırılmış HTML Kursu Notları
(Cüneyt Yılmaz) § HTML 4.01 Specification § CSS § Cascading Style Sheets, level
2 (CSS2) Specification § FreeBSD § FreeBSD Handbook §