PHP etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
PHP etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Salı, Temmuz 22, 2008

Web uygulama

muziktek.net web uygulamaları geliştirmek isteyenler için yol haritası niteliğinde bir yazı yazmıştım. Bu yazıyı düzenleyip buraya da ekliyorum.

1. HTML öğrenin. Daha önce bahsettiğim gibi syntax highlighting özelliği olan bir editör kullanmanızı öneririm. Basit web sayfaları yapın. Özellikle tablolara iyi hakim olun ve CSS öğrenin. HTML bilginizi iyi bir noktaya getirmeden diğer basamaklara geçmeyin.

Örneğin forumdaki tablo yapısının bir benzerini yapamıyorsanız diğer basamaklar için erken demektir. Tabloları manuel olarak yapabilmenin önemini PHP ile veritabanından okuyup tablolara yazarken anlayacaksınız.

Tablolara ve CSS'ye gerçekten hakim olmak biraz zaman alabilir. Özellikle IE ve Firefox arasındaki farklardan dolayı zor zamanlar yaşayabilirsiniz.

Bu arada HTML'de renk kullanımı (HEX renk kodları), font boyutlandırma ve metin formatlama gibi konuları iyice öğrenin. Bunları daima CSS ile yapın.

W3C kurallarını öğrenin ve göz ardı etmeyin.

2. Photoshop veya GIMP yada başka bir grafik programını öğrenin. Bir resim nasıl slice'lara bölünür öğrenin. Tasarımlarınızda renk uyumuna dikkat edin. Müzikteki armoni gibi renklerde de armoni vardır. Bu konuda gözünüzü eğitin. Bu renk uyumu konusu tabloların, yazıların, zeminin vs. renkleri için de geçerli.

3. JavaScript öğrenin. JavaScript kullanarak HTML'in bazı kısıtlamalarını aşabilirsiniz. İlk bakışta karışık gelebilir, zira sözdizimi biraz tuhafdır ama JavaScript kolay ve eğlenceli bir dildir.

İlk üç aşamayı geçtiğinizde durağan (statik) sayfalardan oluşan web siteleri yapabilirsiniz. Bu sitelerdeki sayfa sayısı arttıkça PHP'ye gereksinimiz artacak.

Diyelimki on sayfadan oluşan bir site yaptınız, ve her sayfanın en üstünde logo, bir altında menü, bir altında içerik kısmı ve en altta telif hakları bildirgesi olsun istiyorsunuz. Her sayfanın html dosyası içinde bu kısımlar olmalı... Hepsinde aynı... Tekrar... tekrar... En küçük bir değişiklik durumunda on dosyayı da teker teker açıp düzenlemek gerekecek. Önce frame'lerle bu sorunun üstesinden gelmeye çalışın. İleriki dönemlerde PHP ve AJAX ile angaryadan kurtulacaksınız.

Bu noktada "şunları baştan öğrensek ya" diye itiraz edenler olabilir... Bu işin enstrüman çalmayı öğrenmekten çok farklı olmadığını söylemeliyim. Başlangıçta biraz sıkıcı gelse de temel çalışmalar iyi bir programcı/enstrümantalist olmanızı sağlar. İnanmayan denesin görsün...

4. PHP ile programlamaya başlangıç yapın. PHP algoritma kurma, fonksiyon kullanma, nesne kullanma açısında diğer programlama dillerinden farklılık göstermez. PHP bir web tasarım dili değildir. O yüzden programcı formasyonu ile adım adım öğrenin.

Sağdan soldan snippet kopyalayıp yapıştırmakla programcı olunmaz. O yüzden bir kitap alın ve sayfa sayfa takip edin. O'Reilly kitaplarını tavsiye ederim. Bu arada bir önceki mesajımdaki PHP Official Manual tavsiyemi de unutmayın.

Tüm fonksiyonları, tüm formatlamaları ezberlemeye çalışmayın ama arada manuele göz gezdirin. Elinizin altında nasıl fonksiyonlar olduğunu öğrenin. Bazen işlerinizi çok kolaylaştıracak fonksiyonlar gözünüzden kaçabiliyor. Yada okuduğunuz kitap, yada takip ettiğiniz tutorialler eski bir sürümü anlatıyor ve yeni özellikler gelmiş olabilir.

Bu aşamada problemlerinizi önce kendiniz çözmeye çalışın. Hemen Google'a koşmayın. Bunun iki nedeni var, (1) çabalayarak ulaştığınız bilgi kalıcı olur (2) programcılık konusunda zihniniz bakir ise herkesten daha iyi bir yöntem bulabilirsiniz. Taklitçilerin bişey icad ettiği görülmemiştir.

Tabiki bu tüm dünyaya gözlerinizi kapatın demek değil. Boş zamanlarınızda, programcılık sorunlarına diğer programcılar nasıl çözümler getirmişler bakın. Daha iyi ve daha hızlı çözümler bulmaya çalışın.

Yazdığınız kodların hatasız ve hızlı olmasına dikkat edin. Aceleyle yazarken yaptığınız küçük bir hatayı tespit etmek çok zamanınızı alabilir.

Bazı programcılık kitaplarında KISS diye bir prensipten bahsederler. Keep it Simple, Stupid, yani kodu basit tut, anlaşılır tut... Fazla karmaşık hale getirme... Ben KISS prensibini kabul etmiyorum.

Programcılıkta amaç hatasız, etkin ve mümkün olan en hızlı programı yazmaktır. Programlar insanlar okusun diye yazılmıyor, bilgisayarlar okusun diye yazılıyor. O yüzden ahmaklar okuyunca anlamıycak diye barok bir program yazmaktan çekinmeyin. Bazen bir tekerleme gibi görünen çok kompleks kodlar en iyi çözümdür. Tabi bu işi yokuşa sürün demek değil. Herşey için bilmece gibi kod yazın, kimse işin içinden çıkamasın demek değil. Ama daha etkin kod yazmak için zekanızı kullanmaktan çekinmeyin, basitlik görecelidir, anlamayan anlamasın.

Corporate programcılar, yani programcılığı sevdiği için değil, mesleği olduğu için yapan ve şirketlerde programcılık yapan adamlar için geçerli prensipler "I like challanges, and I like to challange" diyen hacker programcılar için geçerli değildir. Bilişim sektörü para kazandırmaya başladığından beri çok sayıda ahmak bu sektöre girdi. Bunun sonucu olarak programcılıkta genel zeka seviyesi düştü. Müzikte de aynısı var işte. Bu tuzağa düşmeyin...

PHP'de biraz ilerledikten sonra başka dillere de göz atın. Birden fazla programlama dili öğrenmeniz hakimiyetinizi ve dilleri anlayışınızı geliştirir. Sıradan PHP programcılığı gelenekleri dışına çıkmak, diğer dillerdeki stratejileri PHP'ye uyarlamak programcılığınız için iyidir.

5. SQL öğrenmeye başlayın. Benim önerim PostreSQL kullanmanız. SQL sorgularını iyice öğrenin. Bazı SQL fonksiyonları veri sorgulamada çok büyük kolaylıklar sağlarlar. Eğer bir iş SQL sorgusu ile yapılabiliyorsa bu işi PHP'ye bırakmayın.

Veritabanı konusunda en önemli nokta veri tabanının tasarımıdır. Yani her bir tablo hangi verileri tutacak, alan büyüklükleri ve türleri ne olacak, tablolar arası ilişkilendirmeler nasıl yapılacak en kritik sorulardır. Veritabanı tasarımı çok ciddi planlama gerektiren bir konudur. Yanlışınızdan dönmeniz güç olabilir. Veritabanını tasarladınız, tabloları oluşturdunuz ve veri giren ve sorgulayan kodları yazdınız, bu aşamadan sonra veri tabanında yapacağınız tasarım değişiklikeri PHP kodlarını da değiştirmenizi gerektirecektir. Bu yüzden veritabanı tasarımı aşamasında çok dikkatli olun. Ben bu aşamada tüm sistemin algoritmasını kafamda kuruyorum. Bol bol not alıyorum. Kağıt üzerinde veri sorgulama senaryolarımı sınıyorum. Bu aşamanın önemini vurguluyorum ama öğrenilmesi güç bir şey değil. Basit veritabanlarından karmaşığa doğru ilerledikçe tasarım becerisi artıyor.

Veritabanından PHP ile sorgu yapma ve bunu HTML ile formatlamayı öğrenin. Zaten tablolara ve PHP ile döngü kurmaya hakim olduğunuz için bu sizin için kolay olacaktır.

İşin teorik kısmını burada noktalıyorum. Bu konularda sorularınız olursa bildiğim kadarıyla yardımcı olmaya çalışırım.

Cumartesi, Temmuz 12, 2008

PHP üzerine yüzeysel bir yazı

muziktek.net forumlarında PHP üzerine yazdığım bir yazı... Biraz değiştirip, düzenleyip buraya da ekliyorum.


İlk olarak hatırlatmam gereken şey, bir web uygulaması geliştirken grafik tasarımı ve programlama aşamalarının ayrı olduğudur. Yani PHP, SQL, JavaScript vs. bilmeniz size grafik tasarım konusunda pek yardımcı olmayacaktır.

Benim önerdiğim PHP öğrenme yöntemi işin en temelinden başlamaktır. Biraz C ve biraz Java biliyorsanız C dilinden fonksiyon kullanımıda ve Java'dan nesnelere zaten alışık olduğunuz için PHP öğrenmek sizin için çok kolay olacaktır. Hiç programlama bilmeyen biri için bile PHP oldukça iyi bir başlangıç noktasıdır.

PHP konusunda bilmeniz gereken ilk şey PHP'nin C gibi derlenen (compiled) bir dil değil, yorumlanan (interpreted) bir dil olduğudur. PHP ile yazılan web uygulamalarında ikili (binary) yani çalıştırılabilir (executable) bir dosya oluşturmayız. Betik (script) her defasında yeniden yorumlanır.

PHP'nin temel çalışma prensibini canlı bir örnek ile -yüzeysel olarak- anlatmaya çalışayım.

Önce sadece bir HTTP server ile çalıştığımızı düşünelim. Sunucu uygulaması olarak Apache kullandığımızı varsayalım. Önermesem de IIS gibi şeyler de var.

Eğer özel bir ayar yapmadıysanız Apache sunucuya gelen HTTP isteklerine htdocs dizini altındaki dosyaları gönderek cevap verir. Örneğin, dosya bir html dosyasıysa dosyayı olduğu gibi aktarır, ve istemci bu dosyayı bir ağ tarayısıyla (Firefox, IE, Safari, Opera vs.) istemişse bu tarayıcı gelen html dosyasını önce parse eder, yani okur, sonra render eder, yani tarayıcı sayfasına çizer. Eğer sayfa içinde grafik gibi elemanlar varsa bunlar için de sunucuya istek gönderir ve sunucudan gelen grafiği (jpeg, png, bmp, svg vs.) gerekli yere yerleştirir. Eğer tarayıcıda Flash, Quicktime gibi eklentiler yüklü ise bunları yorumlaması için ilgili eklentiyi çağırır.

Yani; tarayıcının adres satırına adresi (URL) yazıp gönder tuşuna basmamızla birlikte tarayıcı bir HTTP istemi (HTTP request) oluşturur, bunu TCP/IP paket yönetimine uygun kapıyı (port) kullanarak bildirir, istem Internet'e çıkar ve sunucuya ulaşır, sunucu (1) istemin yapıldığı portu dinliyorsa (2) o isteme cevap verecek uygulamaya sahipse (ve düzgün ayarlanmışsa) istemi dikkate alır ve ilgili uygulamayı haber verir, bizim örneğimizde Apache devreye girer, eğer istenilen dosya mevcutsa o dosyayı sunucu üzerindeki TCP/IP yöneticisine iletir, dosya paketlenir ve istemciye doğru yola çıkar. Aslına arada çalışan başka programlar var, ben özetliyorum, tam isabetli bir anlatım olmuyor.

Şimdi bu sunucuya bir de PHP sunucusu ekleyelim. Bu kez Apache kendine gelen isteği değerlendirirken, istek yapılan dosya içinde PHP betiği var mı diye bakar. Eğer PHP betiği varsa bu kez dosyayı istemciye olduğu gibi göndermez. Dosya PHP uygulaması tarafından değerlendirilir ve Apache'ye geri gönderilir. Apache, PHP'den geri gelen dosyayı istemciye yollar.

Şimdi bir html dosyasının içinden PHP'yi nasıl harekete geçirebileceğimize ve neler yapabileceğimize bakalım. PHP'yi göreve çağırmak için normalde HTML içinde bulunmayan etiketleri (tag) kullanırız, "<?PHP" ile başlayıp "?>" ile biten blok PHP'nin işleyeceği bloktur.

Peki PHP'ye neden ihtiyaç duyarız? PHP kullanarak statik HTML ile yapamayacağımız şeyler yapabiliriz. PHP bize sunucu tarafında çalışan bir programlama ortamı sunar. Matematiksel işlemlerden, veritabanı erişimine, grafik işlemlerinden, veri madenciliğine kadar pek çok şeyi mümkün kılar.

Eğer sunucu ile istemci arasında hızlı bir bağlantı varsa bilgisayarımızdan yerel olarak kullandığımız pekçok program tamamen sunucu üzerinde çalışacak şekilde yeniden tasarlanabilir. AJAX kullanımıyla da program oldukça akıcı hale gelir. Bunun pek çok örneği de var.

Bu arada bu işler için tek yol PHP değildir, başka yollar da var. PHP'nin yetersiz, yavaş kaldığı yerlerde, örneğin C ile hatta Assembly dili ile sunucu tarafı uygulamaları geliştirilebilir. Perl, Python, Ruby gibi diller de bu işler için yaygın olarak kullanılır.

PHP'ye alternatif bir de Coldfusion var. Hakkında çok fazla bilgim yok.

Veritabanı erişiminde de durum Apache ile PHP'nin iletişimine benzer. Apache PHP etiketini gördüğünde dosyanın işlenmesi için PHP'ye başvuruyordu. PHP de veritabanı işlemleri için veritabanı sunucusuna başvurur, üretilen sonucu alır, işler, ve Apache'ye aktarır.

Bu arada belirtmem gereken bir nokta var, Apache en sade kurulumda PHP'yi tanımaz. PHP ile iletişimini sağlamak için çeşitli ayarlar yapmak gereklidir. PHP de benzer şekilde en sade kurulumunda hiç bir veritabanı sunucusunu tanımaz, tanıştırmak için ayar yapmak gerekir.

Bu ayarlar özel yazılımlarla otomatik olarak yapılabilir. Apache+PHP+MySQL gibi paketler var. Tek kurulumla tüm ilişkilendirmeyi yapıp sistemi çalışır halde teslim ediyorlar. Ama ben teker teker kendim kurup elle ayarlamayı tercih ediyorum.

Örneği iyice pratiğe dökelim....

PHP ile veritabanı işlemi yapan bir web uygulaması geliştirmek istersek ilk olarak sunucuları yüklemememiz gerekecek. Önce Apache kurup, sonra PostgreSQL'i yüklerip en son PHP kurulumu ile sunucu tarafını hazır hale getiririz. Sunucu çalıştığımız bilgisayarın kendisi de olabilir. Yani aynı makine hem sunucu hem istemci olabilir. Eğer yerel ağda bulunan başka bir bilgisayarı sunucu yapmak istersek, bu sunucuya bir de FTP sunucusu kurmamız gerekecek.

Ben örneğimde istemci ve sunucunun aynı bilgisayar olduğunu varsayacağım.

Sunucu kurulumu tamamlandıktan sonra bir metin düzenleyicisine ihtiyacımız olacak. Aslında Windows üzerinde notepad bu iş için yeterli. Ama notepad'den daha iyi imkanlar sunan programcılara özel metin düzenleyicileri var. Bu programlar bize bazı kolaylıklar sağlarlar;

- Sözdizim yardımı yani syntax high-lighting; yazdığımız metni her an inceleyip komutları ayrı renk, parantezleri yarı renk, yorum satırlarını yarı renkte gösteriler. Bu bize çok büyük bir kolaylık sağlar.
- Bazı programların komutları tamamlama özelliği vardır, leb deyince leblebeyi anlarlar yani.
- If-Else, Switch-Case gibi sık kullanılan program bloklarını kolayca koda ekleyebilirler.
- Bütünleşik yardım sistemi sunarlar. İmleç bir komutun üzerindeyken yardım istendiğinde o komutun manuel sayfasını açarlar.
- Bütünleşik FTP istemcisi barındırırlar, sunucuya başlanıp bir php dosyasını çekerler, istediğiniz düzenlemeyi yaparsınız, dosyayı FTP'ye koyarlar.

Daha pek çok kolaylık sayılabilir. Bunlar aklıma ilk anda gelenler. Tüm özelliklerden vazgeçebilirim ama sözdizimi yardımı olmadan çok fazla hata yapıyorum ben.

DZSoft PHP Editor, PHP Expert Editor gibi programlar var Windows için. Ben iki örnek verdim ama onlarca var piyasada, bazıları ücretsiz ve gayet iyi programlar. Mac için ne var bilmiyorum. GNU'da ise yüzlerce editör var, hepsi özgür yazılım, hepsi ücretsiz.

Metin düzenleyicimizi seçtikten sonra PHP ile programlamaya başlayabiliriz. Benim genelde kurulumdan sonra ilk yaptığım şey phpinfo() komutu ile sistemi test etmek...

Yani önce metin düzenleyicisinde şöyle bir program yazıyorum;

<?PHP
phpinfo();
?>


Sonra bunu Apache kurulumunu nereye yaptıysam oradaki htdocs dizini altına info.php olarak kaydediyorum* ve Firefox'u açıp localhost yada 127.0.0.1 yada bilgisayarın IP adresini giriyorum. (Sunucu başka bir bilgisayarsa IP adresini girmek gerekir)

Karşıma PHP bilgi sayfası çıkıyor ve isteğim tüm bileşenlerin yüklü olduğunu görüyorsam (veritabanı bağlantısı gibi) yoluma devam ediyorum. Sorun varsa gidermeye çalışıyorum.

Bu aşamada en yaygın sorunlar, Apache'nin HTTP kök dizini ayarlarındaki hatalar, Apache ayar dosyasında PHP ile ilgili ayarlardaki hatalar, PHP'nin veritabanı sunucusu ayarları ve yerelleştirme (localization) hatalarıdır.

PHP ve Apache ikilisi sağlıklı çalışıyorsa ikinci basamak PHP ile PostreSQL bağlantısını sınamaktır. Veri tabanı sunucusu ilk kurulumda örnek bir veritabanı ile gelir. Bu veritabanına bağlantı yaparak bağlantımızı sınayabiliriz. Ben genelde sisteme bir de veritabanı sorgu sistemi kuruyorum. Bu sistemler iki çeşit olabilir, (1) PGAdmin, SQLMaestro gibi çalıştırabilir (exe) programlar (normal yükleme yapılan programlar) (2) PHPMyAdmin gibi PHP tabanlı, Apcahe htdocs altına kopyalanıp, tarayıcı üzerinden çalışan sistemler. Bu sistemler PHP kullandıkları için eğer veritabanına bağlanabiliyorlarsa PHP+SQL sistemi çalışıyor demektir.

Böyle bir programı kurduktan sonra o program içinden önce bir veritabanı sonra bu veritabanı için bir tablo oluşturarak devam ediyorum.

PostgreSQL için;

<?PHP
$dbconn = pg_connect("host=localhost port=5432 dbname=mary")
or die("Could not connect");
echo "Connected successfully";
pg_close($dbconn);
?>

MySQL için;

<?PHP
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
or die('Could not connect: ' . mysql_error());
echo 'Connected successfully';
mysql_select_db('my_database') or die('Could not select database');
?>


Eğer bağlantı başarılıysa veritabanı oluşturaya ve sorgulamaya geçiyorum.

PHP hakkında çok sayıda kaynak var.

Benim ilk önereceğim kaynak ise www.php.net sitesindeki PHP belgeleri; http://id2.php.net/docs.php

İster bilgisayarına indirin, ister siteden okuyun... Ben Extended HTML sürümünü öneririm. Ben ne öğrendiysem oradan öğrendim. Belgelerde bahsedilmeyen çok az şey var, onlar da ilk günlerde çok gerekli değil... Hatta belki yeni manuel sürümlerine dahil edilmişlerdir.

Bir de phpfreaks.com var. Uzun zamandır bakmıyordum, formatı değişmiş. Buradan da faydalanabilirsiniz.

....

Neyse... Özetle ben herşeyin önce manuel yolunu öğrenmek gerek diyorum... Şuradan template, oradan kod parçası aşırıp web uygulaması geliştirdim diye gezen vatandaşlardan olmamak lazım.


* Böyle bir dosyayı, halka açık bir sunucu üzerinde asla bırakmamak gerekir. phpinfo() komutu kötü niyetli kişiler için sistem hakkında çok güzel bilgiler sağlar.