PHP söz dizimi kontrolü

Dün yayında olan bir PHP projesinde çeşitli değişiklikler yapmak durumunda kaldım. Test etme şansım olmadığından dosyanın bir kopyasını sunucuya atarak sunucu üzerinde test etmeye çalıştım. Gönderdiğim dosyayı çalıştırmayı denediğimde bomboş bir ekranla karşılaştım. Güvenlik nedeniyle sunucu, hata mesajlarını ekrana basmayacak şekilde ayarlanmıştı. Hata kayıtları da benim yetkim olmayan bir yerde duruyordu. Bir şekilde hatanın nerede olduğunu bulmam gerekiyordu. Çok fazla değişiklik yaptığım için eski dosya ve yeni dosya arasında bir karşılaştırma yapmak uzun sürecekti. Bir kaç kontrol yapmaya karar verdim.

İlk olarak söz dizimi kontrolü yaparak dosyanın PHP tarafından işlenebildiğinden emin olmak istedim. Bunun için PHP’yi komut satırından “-l” parametresi ile çalıştırıp ikinci parametre olarak dosyanın ismini verebilirsiniz. Eğer PHP klasörünüz PATH değişkeninde tanımlandıysa dosyanızın olduğu klasörde komut satırı açarak php -l dosyaismi.php şeklinde söz dizimi kontrolü gerçekleştirebilirsiniz. PATH değişkeninde tanımlı değilse php.exe’nin tam yolunu girmeniz gerekebilir (Örneğin: c:\php\php.exe -l dosyaismi.php)

Bu komut PHP dosyanızı kontrol edecek, bir hata bulamazsa sonlanacak ya da bulduğu ilk hatada hatanın olduğu satır numarasını ekrana basarak sonlanacaktır. İlgili hatayı düzelttikten sonra komutu tekrar çalıştırarak, dosyayı tekrar kontrol edebilirsiniz. Bu şekilde hiç söz dizimi hatası kalmayana kadar kodu tekrar tekrar çalıştırarak dosyanızı hatalardan arındırabilirsiniz.

Bu şekilde problemimi giderip dosyayı sunucuya tekrar yükledim. Problemim giderilmişti.

PHP ile SEO uyumlu daha anlaşılır web adresleri hazırlama

Uzun zamandır, geliştirdiğim web sitelerinde, hem daha anlaşılır olması, hem de SEO açısından daha faydalı olduğu genel kanaat olduğu için, adresleri ilgili sayfanın başlığından oluşturuyorum. İlk başlarda başlığı adrese çeviren bir metot yazmıştım, fakat zaman geçtikçe bu metodun çeşitli durumlarda düzgün çalışmadığını gözledim. Bunun üzerine örnekler ve en iyi pratiklere göz atmaya başladım.

Bu konuda en başarılı bulduğum uygulama WordPress oldu. WordPress açık kaynak kodlu bir uygulama olduğundan hemen kaynak kodlarını inceleyerek bu problemin üstesinden nasıl geldiklerini inceledim ve gerekli kısımları bir araya getirdim. WordPress’i seçme sebeplerimden birisi de, uygulamanın bir çok dilde kullanılması ve ilgili metotların bu dilleri destekleyecek şekilde geliştirilmeleriydi.
Okumaya devam et PHP ile SEO uyumlu daha anlaşılır web adresleri hazırlama

Ultimate MySQL Sınıfı

Bir süredir geliştirdiğim ufak çaplı PHP + MySQL uygulamalarında Jeff Williams tarafından yazılmış olan Ultimate MySQL sınıfını kullanıyorum. En temel ihtiyaçlarımı karşılamakla beraber kolay geliştirilebilir bir yapısı olduğundan her yeni projede ihtiyaca göre üzerine bir şeyler ekleyebiliyorum.
Okumaya devam et Ultimate MySQL Sınıfı

PHP ile uygulama geliştirmek – Bölüm 2’ye Ek

Bu makale < ?PHP echo “Merhaba Türkiye”; ?> gruplarında yazmaya başladığım PHP ile uygulama geliştirmek yazı dizisinin ikinci bölümüdür. Halen gelecek vaat etmeyebileceği konusunda ısrarcıyım. Taslaktır, geliştirilebilir.

Araya baya uzunca bir süre girdi ama bu yazı dizisine devam etmeye kararlıyım. Kaldığımız yerden devam edelim. Bir önceki yazımın sonunda da belirttiğim gibi önceki yazıda constantlardan da bahsetmeyi planlamış fakat unutmuştum. Bir önceki yazıyı güncellemek yerine yeni bir yazı yazarak constantları daha derinlemesine incelemeye karar verdim. Yazının geri kalanında constant kelimesi yerine sabit kelimesini kullanacağım.

Şimdi düşününce önceki yazıda sabitlerden bahsetmemek isabet olmuş. Neden diye soracak olursanız, değişkenlerden, değişken değişkenlerden bahsederken sabitlerden bahsetmek kafa karıştırabilirdi. Neyse lafı fazla uzatmadan konuya girelim.

Değişkenlerle karşılaştırıldığında çok daha az özelliğe sahip olan sabitlerin en önemli özelliği global tanımlayıcılar olmalarıdır. Bir kere tanımladıktan sonra isterseniz fonksiyon içinde isterseniz sınıf içinde rahatça kullanabilirsiniz. Sabitlerde saklayabileceğiniz veri tipleri sınırlıdır(metin(string), tamsayı(integer), mantıksal(boolean) ve ). Global olmaları ve sınırlı veri tipi gibi sebeplerden genellikle uygulamaların ayar bilgilerini saklamak için kullanılır ve bu işte oldukça iyidirler.

Sabitleri tanımlamak değişkenlere nazaran oldukça farklılık gösterir. Sadece define() fonksiyonu ile tanımlanabilirler ve bir kere tanımlandıktan sonra içeriği değiştirilemez ya da yok edilemez (Sihirli sabitler (Magic Constants) haricinde (ki onlar da aslında sabit sayılmazlar)). Değişkenleri tanımlarken değişken isminin başına konan $ işareti sabitlerde kullanılmaz. İsimlendirme konusunda değişkenlerle hemen hemen aynı kurallara tabidir. Büyük/Küçük harf duyarlıdırlar ama bir zorunluluk olmasa da sabit isimleri genelde tamamıyla büyük harflerden oluşur. Geçerli bir sabit ismi bir harf ya da alt çizgi ile başlar ve devamında istenildiği kadar harf, sayı ya da alt çizgi kullanılabilir.

< ?php
// Geçerli sabit tanımlamaları
define("MEYVA", "Elma");
define("SEBZE3", "Patlıcan");
define("_ARABA", "Şahin");

// Geçersiz sabit tanımlamaları
define("3SEBZE", "Patlıcan");
define("SEBZE-3", "Patlıcan");
?>

Ufak bir uyarı; aşağıdaki kullanım doğru ve geçerli olmakla beraber kullanılmaması tavsiye edilir. PHP gelecekte sizin verdiğiniz isimle aynı isimde bir sihirli sabit tanımlarsa uygulamanızda problemler ortaya çıkabilir.

< ?php 
define("__SEBZE__", "Patlıcan");
?> 

PHP’de önceden tanımlanmış bir çok sabit vardır. Bunları Öntanımlı Sabitler(Predefined Constants) başlığı altında PHP Manual‘da bulabilirsiniz. (PHP_OS, PHP_VERSION vb.) Bir çok öntanımlı sabit bulunmasına rağmen her zaman bunların hepsini kullanamayabilirsiniz. Bazı öntanımlı sabitler belli uzantıların (extension) yüklü olmasını gerektirir. (PEAR_INSTALL_DIR vb.) Değişken yaratırken ve kullanırken bunları aklınızdan çıkarmayın.

Gelelim yazıda da bir kaç kez adı geçen sihirli sabitlere. Şu an için 5 adet olan bu sabitlerin isimleri sabit olsa da belirli durumlarda değerleri değişebilir.

İsim Açıklama
__LINE__ O an PHP derleyicisi tarafından İşlenen satır numarası
__FILE__ Çalışmakta olan sayfanın tam adresi
__FUNCTION__ İşletilmekte olan fonksiyonun ismi
__CLASS__ İşletilmekte olan sınıfın ismi
__METHOD__ Sınıfa ait metodun ismi

Evet, bir bölümün (daha doğrusu ara bölümün) daha sonuna geldik. Önceki yazıda bahsettiğim gibi, gelecek yazıda veri tipleri ve operatörler hakkında karalayacağım.

Mutlu kodlamalar!

Gettext ile PHP uygulamalarınıza çoklu dil desteği

Aziz Nesin‘in “Parle Vu Fransızca” adlı bir öyküsü vardır. Şuradan öğrendiğime göre “İnsanlar Uyanıyor” adlı kitabında yer alıyor bu öykü. Öykünün kısa bir özetini geçeyim sizlere.

İstanbul’da Fransız bir bayan, yardımcı olabileceği düşüncesiyle trafik polisine adres danışır. Sen misin danışan. Yardımsever trafik polisi kendisi fransızca bilmediği için yoldan çevirdiği insanlardan yardım ister. Turist bir kere yakayı kaptırmıştır. Polis sorunu çözmeden bayanı bırakmak istemez. Çaresizce sokakta fransızca bilen birilerini aramaktadır. İşler çığırından çıkar, polisin ve bayanın çevresi kalabalıklaşır, insanlar kalabalığı gördükçe meraktan daha fazla toplanmaya başlarlar. Olaylar gelişir…
Okumaya devam et Gettext ile PHP uygulamalarınıza çoklu dil desteği