PHP, web sitelerinde sunucu tarafında çalışan ve dinamik sayfalar oluşturmak için yaygın olarak kullanılan açık kaynaklı bir programlama dilidir. Bu kategoride PHP nedir, nasıl öğrenilir gibi temel sorulardan kod örneklerine, derslere, karşılaşılan hatalara ve çözümlerine kadar PHP ile ilgili her konu paylaşılır. Yeni başlayanlar ve deneyimli geliştiriciler bilgi alışverişinde bulunur.
PHP ile Neler Yapılabilir?
PHP, kullanıcıdan gelen isteği sunucuda işleyip tarayıcıya HTML çıktısı gönderen bir dildir. Form verilerini işlemek, veritabanıyla çalışmak, oturum yönetimi yapmak ve içerik yönetim sistemleri geliştirmek en yaygın kullanım alanlarıdır. WordPress gibi popüler sistemlerin PHP ile yazılmış olması, dilin web dünyasındaki yaygınlığını açıkça gösterir. Komut satırı betikleri ve API geliştirme de bu alanlar arasındadır.
| Kullanım alanı | Örnek |
|---|---|
| Dinamik web sayfaları | Kullanıcıya göre değişen içerik üretimi |
| Form işleme | İletişim formu, üyelik ve giriş sistemleri |
| Veritabanı işlemleri | MySQL veya MariaDB ile veri ekleme ve listeleme |
| İçerik yönetim sistemleri | Blog, haber ve kurumsal site altyapıları |
| API geliştirme | Mobil uygulamalar için JSON servisleri |
| Komut satırı betikleri | Zamanlanmış görevler, veri aktarımları |
İpucu: PHP öğrenmeye başlamadan önce temel HTML bilgisi edinmek, dilin ürettiği çıktıyı anlamanızı kolaylaştırır.
Güvenli PHP Kodlamanın Temelleri
PHP ile yazılan uygulamalarda en sık karşılaşılan güvenlik sorunları, kullanıcıdan gelen verilerin doğrulanmadan kullanılmasından kaynaklanır. Veritabanı sorgularında hazırlanmış ifadeler kullanmak, çıktıları kodlamak, şifreleri güvenli algoritmalarla saklamak ve form işlemlerinde doğrulama anahtarı kullanmak temel önlemlerdir. Bu alışkanlıkları baştan edinmek, uygulamanın sonradan güvenlik açığı vermesini önler.Bu ilkeler küçük projelerde de uygulanmalıdır.
| Risk | Önlem |
|---|---|
| SQL enjeksiyonu | PDO veya MySQLi ile hazırlanmış ifadeler |
| XSS | Çıktılarda htmlspecialchars gibi kodlama fonksiyonları |
| Zayıf şifre saklama | password_hash ve password_verify fonksiyonları |
| CSRF | Formlarda doğrulama anahtarı (token) kullanımı |
| Dosya yükleme açıkları | Dosya türü ve boyut kontrolü, güvenli klasör |
Uyarı: Canlı sunucuda hata mesajlarının ekranda gösterilmesi, dosya yolları gibi hassas bilgileri açığa çıkarabilir; hataları log dosyasına yönlendirin.
PHP Sürümleri ve Güncel Özellikler
PHP düzenli olarak yeni sürümlerle geliştirilir ve her sürüm performans iyileştirmeleri ile yeni dil özellikleri getirir. Destek süresi dolmuş sürümler güvenlik güncellemesi almadığı için projelerde güncel ve destek alan bir sürüm kullanmak önemlidir. PHP 8 serisiyle birlikte dile eklenen özellikler, kodun daha okunabilir ve güvenilir yazılmasını sağlar. Sürüm geçişlerinde eski kodların uyumluluğu kontrol edilmelidir.
| Sürüm | Öne çıkan yenilikler |
|---|---|
| PHP 8.0 | Adlandırılmış argümanlar, match ifadesi, JIT derleyici |
| PHP 8.1 | Enum yapısı, salt okunur özellikler, fiber desteği |
| PHP 8.2 | Salt okunur sınıflar, dinamik özelliklerin kullanımdan kaldırılması |
| PHP 8.3 ve sonrası | Tür sistemi ve performans iyileştirmeleri |
Bilgi: Hangi sürümlerin aktif destek ve güvenlik desteği aldığını PHP'nin resmi sitesindeki desteklenen sürümler sayfasından takip edebilirsiniz.
Kategori Kuralları
PHP kategorisinde ücretli iş vermek, iş almak veya satış yapmak gibi konular açmak yasaktır; bu konular uygun bölüme taşınır, uygun bölüm yoksa silinir. PHP dosyalarını decode ettirmek, warez paylaşım yapmak, ödev yaptırmak veya illegal istekte bulunmak da yasaktır. Konu başlıklarında "Önemli", "Acil" gibi ifadeler kullanılmamalıdır. Kurallara uymayanlara yönetimin uygun gördüğü cezalar verilir.
| Konu | Durum |
|---|---|
| Kod soruları, hata çözümleri, dersler | Serbest |
| Ücretli iş verme / alma, satış | Yasak, uygun bölüme taşınır |
| PHP dosyalarını decode ettirme | Yasak |
| Warez paylaşımı ve ödev yaptırma | Yasak |
| Başlıkta "Önemli, Acil" ifadeleri | Yasak |
PHP Hakkında Sık Sorulan Sorular
PHP öğrenmeye nereden başlamalıyım?
PHP öğrenmeye başlamak için önce bilgisayarınıza bir yerel geliştirme ortamı kurmanız gerekir; web sunucusu, PHP ve veritabanını birlikte kuran paketler bu işi birkaç dakikaya indirir. Ardından değişkenler, veri türleri, koşullar, döngüler, diziler ve fonksiyonlar gibi temel kavramlarla başlayın. Bu temelleri öğrendikten sonra form verilerini işlemek, oturum yönetimi ve veritabanı bağlantısı gibi web'e özgü konulara geçebilirsiniz. PHP'nin resmi belgeleri, fonksiyonların nasıl çalıştığını ve örnek kullanımlarını gösteren güvenilir bir kaynaktır. Öğrendiklerinizi küçük projelerle, örneğin basit bir ziyaretçi defteri veya yapılacaklar listesi uygulamasıyla pekiştirmek, bilgilerin kalıcı olmasını sağlar. Takıldığınız noktaları bu kategoride sorabilirsiniz.Düzenli pratik yapmak ve başkalarının kodlarını okumak, öğrenme sürecinizi belirgin şekilde hızlandırır.
"Headers already sent" hatası neden oluşur?
Bu hata, PHP'nin HTTP başlığı göndermeye çalıştığı anda tarayıcıya zaten bir çıktı gönderilmiş olduğunu gösterir. header, setcookie veya session_start gibi fonksiyonlar başlık bilgisi gönderdiği için, bunlardan önce ekrana herhangi bir karakter yazdırılmamış olması gerekir. Hatanın en yaygın sebepleri, PHP açılış etiketinden önce bırakılan boşluk veya satır sonları, dosyanın sonunda kapanış etiketinden sonra kalan boşluklar, UTF-8 dosyalarındaki görünmeyen BOM karakteri ve başlık fonksiyonlarından önce yapılan echo çıktılarıdır. Hata mesajı, çıktının hangi dosyanın hangi satırında başladığını gösterir; bu bilgi sorunu bulmayı kolaylaştırır. Yalnızca PHP içeren dosyalarda kapanış etiketini hiç kullanmamak bu sorunun önüne geçer.Çıktı tamponlama yöntemleri geçici bir çözüm sunsa da kalıcı çözüm, çıktının kaynağını bulup düzeltmektir.
"Undefined variable" veya "Undefined array key" uyarılarını nasıl çözerim?
Bu uyarılar, tanımlanmamış bir değişkenin veya dizide bulunmayan bir anahtarın kullanılmaya çalışıldığını gösterir. Özellikle form verileri ve URL parametreleriyle çalışırken, ilgili alan gönderilmediğinde sıkça karşılaşılır. Çözüm için değişkeni kullanmadan önce varlığını isset veya empty fonksiyonlarıyla kontrol edebilir ya da null birleştirme operatörüyle varsayılan bir değer atayabilirsiniz. Değişkenleri kullanmadan önce başlangıç değeri vermek de iyi bir alışkanlıktır. Bu uyarıları hata raporlamasını kapatarak gizlemek yerine kaynağında çözmek, ileride ortaya çıkabilecek mantık hatalarının önüne geçer. PHP 8 ile bazı uyarıların önem seviyesi arttığı için eski kodlarda bu mesajları daha sık görebilirsiniz.Bu kontroller kodunuzun farklı durumlara karşı daha dayanıklı olmasını sağlar ve beklenmedik hataların önüne geçer.
Composer nedir, neden kullanılmalı?
Composer, PHP projelerinde kullanılan bağımlılık yönetim aracıdır. Projenizin ihtiyaç duyduğu kütüphaneleri ve bunların uyumlu sürümlerini bir yapılandırma dosyasında tanımlamanızı sağlar; tek bir komutla bu kütüphaneler indirilir ve projeye eklenir. Ayrıca otomatik yükleme özelliği sayesinde sınıf dosyalarını tek tek dahil etmeye gerek kalmaz. Composer kullanmak, kütüphanelerin güncellenmesini kolaylaştırır ve projeyi başka bir geliştiriciyle paylaşırken aynı ortamın hızla kurulmasını sağlar. Modern PHP çatılarının büyük çoğunluğu Composer ile kurulur. Kütüphane seçerken bakımının sürdüğünden ve güncel PHP sürümleriyle uyumlu olduğundan emin olmak, projenin güvenliği açısından önemlidir.Projeye eklediğiniz kütüphanelerin lisans koşullarını kontrol etmek de ticari projelerde önem taşır; bazı lisanslar kullanım şartları getirebilir. Bağımlılıkları güncel tutun.
Eski projemde mysql_ fonksiyonları neden çalışmıyor?
mysql_ ile başlayan eski veritabanı fonksiyonları, PHP 7.0 sürümüyle birlikte dilden tamamen kaldırılmıştır. Bu nedenle bu fonksiyonları kullanan eski projeler, güncel PHP sürümlerinde tanımlanmamış fonksiyon hatası verir. Çözüm, veritabanı işlemlerini MySQLi veya PDO eklentisiyle yeniden yazmaktır. Bu geçiş aynı zamanda güvenlik açısından da önemli bir fırsattır; çünkü her iki eklenti de SQL enjeksiyonuna karşı koruma sağlayan hazırlanmış ifadeleri destekler. PDO, farklı veritabanı sistemleriyle aynı arayüzle çalışabildiği için birçok geliştirici tarafından tercih edilir. Eski projeyi taşırken veritabanı bağlantısını tek bir dosyada toplamak, değişiklikleri kolaylaştırır. Geçişten sonra tüm sorguları test etmek gerekir.Taşıma sürecinde test ortamı kullanmak canlı sitenin etkilenmesini önler. Her sorguyu ayrı ayrı deneyin.
PHP ile e-posta gönderirken mailler neden spam klasörüne düşüyor?
PHP'nin yerleşik mail fonksiyonu, e-postaları sunucunun yerel posta sistemi üzerinden kimlik doğrulaması yapmadan gönderir. Bu nedenle alıcı sunucular bu iletileri güvenilir bulmayabilir ve spam olarak işaretleyebilir. Daha güvenilir bir teslimat için kimlik doğrulamalı SMTP bağlantısı kullanan bir e-posta kütüphanesi tercih etmek gerekir; bu kütüphaneler Composer ile kolayca projeye eklenebilir. Alan adınız için SPF, DKIM ve DMARC kayıtlarının doğru tanımlanması da teslimatı önemli ölçüde iyileştirir. Gönderen adresinin sitenizin alan adına ait olması, konu satırının ve içeriğin spam filtrelerini tetikleyecek ifadeler içermemesi de önemlidir. Toplu gönderimler için ayrı bir e-posta gönderim hizmeti kullanmak sunucunuzun itibarını korur.Gönderim sonuçlarını kayıt altına almak, teslimat sorunlarını tespit etmenizi kolaylaştırır.
Oturum (session) bilgileri neden kayboluyor?
Oturum bilgilerinin kaybolmasının yaygın sebepleri arasında session_start fonksiyonunun her sayfada çağrılmaması, oturum çerezinin tarayıcı tarafından kaydedilmemesi ve sunucudaki oturum dosyalarının yazılamaması bulunur. Her oturum kullanan sayfanın en başında session_start çağrıldığından emin olun. Sitenizin hem www'li hem www'siz adresle açılması veya HTTP ile HTTPS arasında geçiş yapılması, çerezin farklı alan adına ait sayılmasına ve oturumun kaybolmasına yol açabilir. Sunucudaki oturum kayıt klasörünün yazma izinlerini ve disk alanını kontrol edin. Oturum süresiyle ilgili yapılandırma ayarları da oturumun beklenenden erken sona ermesine neden olabilir. Yük dengeleyici kullanılan sistemlerde oturumların ortak bir depoda tutulması gerekir.Sorunu tespit etmek için oturum kimliğinin sayfalar arasında değişip değişmediğini kontrol etmek faydalıdır.
PHP kodunda hata ayıklamak için hangi yöntemleri kullanabilirim?
Geliştirme ortamında hata raporlamayı açmak, hata ayıklamanın ilk adımıdır; error_reporting ve display_errors ayarlarıyla tüm uyarı ve hataları görebilirsiniz. Değişkenlerin içeriğini görmek için var_dump veya print_r fonksiyonları hızlı bir çözüm sunar. Daha kapsamlı bir analiz için Xdebug gibi bir hata ayıklama eklentisini kod editörünüzle birlikte kullanarak kodu satır satır çalıştırabilir, kesme noktaları koyabilir ve değişkenlerin değerlerini anlık izleyebilirsiniz. Canlı sunucuda hataları ekranda göstermek yerine log dosyasına yazdırmak güvenlik açısından önemlidir. Hata mesajını forumda paylaşırken tam metni ve ilgili kod bölümünü eklemek, diğer üyelerin sorunu hızla anlamasını sağlar.Bu yöntemleri birlikte kullanmak, hataları çok daha hızlı bulmanızı sağlar. Hata loglarını düzenli olarak incelemek de sorunları erken fark etmenizi sağlar.
PHP mi yoksa başka bir sunucu dili mi öğrenmeliyim?
Bu tercih, hedeflerinize ve çalışmak istediğiniz projelere bağlıdır. PHP, web sitelerinin önemli bir bölümünü çalıştıran içerik yönetim sistemleri ve hazır hosting altyapılarıyla geniş uyumu sayesinde özellikle web geliştirme alanında güçlü bir seçenektir. Paylaşımlı hosting paketlerinin neredeyse tamamında hazır olarak sunulması, projeleri yayına almayı kolaylaştırır. Farklı sunucu dilleri ise gerçek zamanlı uygulamalar, veri bilimi veya belirli şirketlerin teknoloji tercihleri gibi alanlarda öne çıkabilir. Bir dilde sağlam temel edindikten sonra diğer dilleri öğrenmek çok daha kolay olur. Hedeflediğiniz iş ilanlarında hangi teknolojilerin istendiğine bakmak da karar vermenize yardımcı olabilir.Hangi dili seçerseniz seçin, güvenli kodlama ilkelerini öğrenmek her zaman değerlidir ve kariyeriniz boyunca işinize yarar.
PHP projemde hata alıyorum; soruyu nasıl sormalıyım?
Etkili bir soru, sorunu yaşayan kişiyle yardım etmek isteyen kişi arasındaki zaman kaybını önler. Başlıkta "Acil" veya "Önemli" gibi ifadeler yerine sorunu tanımlayan bir cümle kullanın; kategori kuralları bu ifadelerin kullanımını yasaklar. Mesajınızda PHP sürümünü, aldığınız hata mesajının tam metnini, sorunun hangi işlem sırasında ortaya çıktığını ve ilgili kod bölümünü paylaşın. Kodu forumun kod biçimlendirme özelliğiyle eklemek okunabilirliği artırır. Veritabanı şifresi, API anahtarı gibi gizli bilgileri mutlaka gizleyin. Daha önce denediğiniz çözümleri belirtmek, aynı önerilerin tekrarlanmasını önler. Sorununuz çözüldüğünde çözümü konuya eklemek, benzer sorunu yaşayan diğer üyelere yardımcı olur.Bu şekilde hazırlanmış sorular çoğu zaman çok daha hızlı yanıt alır. Teşekkür etmeyi unutmayın.