Giriş: PHP Bağımlılık Yönetiminde Composer’ın Önemi
PHP geliştirme dünyasında modern projelerin vazgeçilmez bir aracı olan Composer, bağımlılık yönetimini kökten değiştiren bir paket yöneticisidir. Bir PHP projesi geliştirirken, genellikle üçüncü taraf kütüphanelere ve framework’lere ihtiyaç duyarız. Bu kütüphanelerin manuel olarak indirilmesi, projenize entegre edilmesi ve güncel tutulması zaman alıcı ve hataya açık bir süreç olabilir. İşte bu noktada Composer devreye girerek, projenizin ihtiyaç duyduğu tüm bağımlılıkları tanımlamanıza, otomatik olarak indirmenize ve yönetmenize olanak tanır.
Bu rehberde, özellikle Debian 8 (JESSIE) işletim sistemi üzerinde Composer’ı nasıl kuracağınızı ve temel düzeyde nasıl kullanacağınızı adım adım anlatacağız. Debian 8 her ne kadar eski bir sürüm olsa da, hala bazı sistemlerde aktif olarak kullanılabilmektedir ve bu rehber sayesinde Composer’ı bu ortamda başarıyla çalıştırabileceksiniz. Composer sayesinde, projenizin bağımlılıklarını kolayca yönetebilir, kodunuzu daha modüler hale getirebilir ve geliştirme sürecinizi önemli ölçüde hızlandırabilirsiniz.
Composer Kurulumu Ön Gereksinimleri ve Sistemi Hazırlama
Composer’ı Debian 8 sisteminize kurmadan önce, bazı temel gereksinimleri karşılamanız ve sisteminizi hazırlamanız gerekmektedir. Composer, bir PHP uygulaması olduğu için, sunucunuzda PHP CLI (Command Line Interface) sürümünün kurulu olması zorunludur. Ayrıca, bağımlılıkları indirmek ve yönetmek için bazı ek araçlara da ihtiyacımız olacak.
Sistem Güncelleme ve Temel Paketlerin Kurulumu
Öncelikle, sisteminizin paket listesini güncelleyelim ve kurulu paketleri en son sürümlerine yükseltelim. Bu işlem, olası uyumluluk sorunlarını gidermeye yardımcı olacaktır:
sudo apt-get update
sudo apt-get upgrade
Ardından, Composer’ın düzgün çalışması için gerekli olan php-cli, unzip ve git gibi paketleri kuralım. Debian 8’de varsayılan PHP sürümü genellikle 5.6’dır ki bu Composer için yeterlidir.
sudo apt-get install php-cli unzip git -y
Bu komut, PHP’nin komut satırı arayüzünü, sıkıştırılmış dosyaları açmak için unzip aracını ve versiyon kontrol sistemi olan git‘i kuracaktır. Git, Composer’ın bazı bağımlılıkları doğrudan Git depolarından indirmesi gerektiğinde kullanılır.
PHP Ayarları (Opsiyonel ama Önemli)
Composer’ın bazen büyük projelerde veya çok sayıda bağımlılıkla çalışırken belleğe ihtiyacı olabilir. Varsayılan PHP bellek limitleri bazen yetersiz kalabilir. Bu durumu önlemek için php.ini dosyasında memory_limit değerini artırmanız faydalı olabilir.
PHP CLI için php.ini dosyasının konumu genellikle /etc/php/5.6/cli/php.ini şeklindedir (Debian 8’de varsayılan PHP sürümü 5.6 olduğu için). Bu dosyayı bir metin düzenleyici ile açın:
sudo nano /etc/php/5.6/cli/php.ini
Dosya içinde memory_limit satırını bulun ve değerini örneğin 512M veya 1G gibi daha yüksek bir değere ayarlayın:
memory_limit = 512M
Değişikliği kaydedip dosyadan çıkın.
Composer’ı Yükleme ve Global Olarak Kullanıma Hazırlama
Sistemimiz hazır olduğuna göre, Composer’ı indirip kurma işlemine geçebiliriz. Composer, kendi kurulum script’ini kullanarak kolayca kurulabilir.
Composer Kurulum Scriptini İndirme
Composer’ın resmi web sitesinden kurulum script’ini indirmek için aşağıdaki PHP komutunu kullanacağız:
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
Bu komut, composer-setup.php adında bir dosyayı bulunduğunuz dizine indirecektir.
Kurulum Scriptini Doğrulama (Güvenlik İçin Önemli)
İndirdiğiniz kurulum script’inin bütünlüğünü ve güvenliğini doğrulamak her zaman iyi bir uygulamadır. Composer’ın web sitesinde güncel SHA-384 doğrulama kodu bulunur. Bu kodu kullanarak indirdiğiniz dosyanın değiştirilmediğinden emin olabilirsiniz. Güncel doğrulama kodunu https://composer.org/download adresinden alabilirsiniz. Aşağıdaki komutta AKTÜEL_SHA384_KODU kısmını güncel kod ile değiştirmeniz gerekmektedir:
php -r "if (hash_file('SHA384', 'composer-setup.php') === 'AKTÜEL_SHA384_KODU') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
Eğer “Installer verified” mesajını alırsanız, dosya güvenlidir. Aksi takdirde, scripti silip tekrar indirmeniz gerekebilir.
Composer’ı Kurma
Doğrulama işleminden sonra, kurulum script’ini çalıştırarak Composer’ı kurabiliriz:
php composer-setup.php
Bu komut, bulunduğunuz dizine composer.phar adında bir dosya oluşturacaktır. Bu dosya, Composer’ın çalıştırılabilir “PHAR” (PHP Archive) formatındaki halidir. Kurulum tamamlandıktan sonra, kurulum script’ini silebiliriz:
php -r "unlink('composer-setup.php');"
Composer’ı Global Olarak Erişilebilir Hale Getirme
Her seferinde php composer.phar yazmak yerine, sadece composer komutunu kullanarak Composer’ı çalıştırmak çok daha pratiktir. Bunun için composer.phar dosyasını sistemin PATH’inde yer alan bir dizine taşıyacağız. Genellikle /usr/local/bin dizini bu amaç için kullanılır:
sudo mv composer.phar /usr/local/bin/composer
Artık Composer, sisteminizde global olarak erişilebilir durumdadır.
Kurulumu Doğrulama
Composer’ın doğru şekilde kurulup kurulmadığını kontrol etmek için sürümünü sorgulayabiliriz:
composer --version
Eğer kurulum başarılıysa, Composer’ın sürüm numarasını gösteren bir çıktı alacaksınız:
Composer version 1.x.x 20xx-xx-xx xx:xx:xx
Bu çıktı, Composer’ın Debian 8 sisteminizde başarıyla çalıştığı anlamına gelir.
Composer Kullanımı Temelleri: Proje Oluşturma ve Bağımlılık Yönetimi
Composer başarıyla kurulduktan sonra, onu projelerinizde kullanmaya başlayabiliriz. Bir PHP projesinde Composer’ı kullanmanın temel adımları, yeni bir proje başlatmak, bağımlılık eklemek ve bu bağımlılıkları yönetmektir.
Yeni Bir Composer Projesi Başlatma
Yeni bir PHP projesi için Composer’ı kullanmaya başlamanın en yaygın yolu, projenin kök dizininde composer init komutunu çalıştırmaktır. Bu komut, size birkaç soru sorarak projenizin temel bilgilerini ve bağımlılıklarını tanımlayan composer.json dosyasını oluşturmanıza yardımcı olur.
Öncelikle, yeni bir proje dizini oluşturalım ve içine girelim:
mkdir my_php_project
cd my_php_project
Şimdi composer init komutunu çalıştıralım:
composer init
Composer size aşağıdaki gibi sorular soracaktır:
* Package name ( (Örn: my-vendor/my-project)
* Description []: (Projenizin kısa açıklaması)
* Author [Your Name (Yazar bilgileri)
* Minimum Stability []: (Bağımlılıkların minimum kararlılık seviyesi, örn: dev, beta, RC, stable. Varsayılanı boş bırakmak stable anlamına gelir.)
* License []: (Projenizin lisansı, örn: MIT)
* Define your dependencies.: (Bu aşamada bağımlılık eklemeyi atlayabiliriz, daha sonra manuel olarak ekleyeceğiz.)
Soruları yanıtladıktan sonra, Composer size oluşturacağı composer.json dosyasının bir önizlemesini gösterecek ve onayınızı isteyecektir. Onayladığınızda, projenizin kök dizininde composer.json dosyası oluşacaktır. Örnek bir composer.json içeriği şöyle görünebilir:
{
"name": "my-vendor/my-project",
"description": "My first Composer project on Debian 8.",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "Your Name",
"email": "you@example.com"
}
],
"require": {}
}
Bağımlılık Ekleme
composer.json dosyasını oluşturduktan sonra, projenize bağımlılıklar ekleyebilirsiniz. Bağımlılık eklemenin en kolay yolu composer require komutunu kullanmaktır. Örneğin, popüler bir günlükleme kütüphanesi olan Monolog’u projemize ekleyelim:
composer require monolog/monolog
Bu komut, Monolog’un en son kararlı sürümünü (veya belirtilen bir sürümü) composer.json dosyanızdaki require bölümüne ekleyecek, ardından kütüphaneyi ve bağımlılıklarını indirip vendor dizinine yerleştirecektir. Ayrıca, bağımlılıkların tam sürümlerini kilitleyen composer.lock dosyasını da oluşturacaktır.
Komutun çıktısı aşağıdaki gibi olacaktır:
Using version ^2.x for monolog/monolog
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 2 installs, 0 updates, 0 removals
- Installing psr/log (1.1.4): Loading from cache
- Installing monolog/monolog (2.2.0): Loading from cache
Writing lock file
Generating autoload files
Artık composer.json dosyanız şöyle görünecektir:
{
"name": "my-vendor/my-project",
"description": "My first Composer project on Debian 8.",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "Your Name",
"email": "you@example.com"
}
],
"require": {
"monolog/monolog": "^2.2"
}
}
Ve projenizin kök dizininde vendor adında yeni bir klasör ile composer.lock dosyası oluşmuş olacaktır.
Bağımlılıkları Yükleme ve Güncelleme
* composer install: Bir projeyi Git gibi bir versiyon kontrol sisteminden klonladığınızda veya başka bir geliştiriciden aldığınızda, composer.json ve composer.lock dosyaları zaten var olacaktır. Bu durumda, composer install komutunu kullanarak projenin ihtiyaç duyduğu tüm bağımlılıkları composer.lock dosyasında belirtilen kesin sürümlerle yükleyebilirsiniz. Bu, tüm geliştiricilerin aynı bağımlılık sürümlerini kullanmasını sağlar.
composer install
* composer update: Eğer composer.json dosyanızdaki bağımlılık tanımlarını değiştirdiyseniz (örneğin, bir paketin sürüm kısıtlamasını güncellediyseniz) veya bağımlılıkların yeni kararlı sürümlerini almak istiyorsanız, composer update komutunu kullanırsınız. Bu komut, composer.json dosyasındaki kısıtlamalara uygun en yeni sürümleri indirir ve composer.lock dosyasını buna göre günceller.
composer update
Otomatik Yükleme (Autoloading)
Composer’ın en güçlü özelliklerinden biri, bağımlılıklarınızı ve hatta kendi proje sınıflarınızı otomatik olarak yükleyebilmesidir. composer install veya composer update çalıştırdığınızda, Composer otomatik olarak vendor/autoload.php adında bir dosya oluşturur. Bu dosyayı projenizin giriş noktasında (index.php gibi) dahil ederek, require veya include ifadeleri kullanmadan tüm Composer bağımlılıklarını ve kendi PSR-4 uyumlu sınıflarınızı kullanabilirsiniz.
pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::WARNING));
// Log mesajı yaz
$log->warning('Bu bir uyarı mesajıdır.');
$log->error('Bu bir hata mesajıdır.');
echo "Log dosyasına mesajlar yazıldı: app.log\n";
?>
Bu index.php dosyasını çalıştırdığınızda (php index.php), Monolog kütüphanesini sorunsuz bir şekilde kullanabildiğinizi göreceksiniz.
Kendi sınıflarınızı Composer’ın otomatik yükleyicisine eklemek için composer.json dosyanızdaki autoload bölümünü kullanabilirsiniz. Örneğin, src dizinindeki sınıflarınızı MyApp namespace’i altında yüklemek için:
{
"name": "my-vendor/my-project",
"description": "My first Composer project on Debian 8.",
"type": "project",
"license": "MIT",
"authors": [
{
"name": "Your Name",
"email": "you@example.com"
}
],
"require": {
"monolog/monolog": "^2.2"
},
"autoload": {
"psr-4": {
"MyApp\\": "src/"
}
}
}
Bu değişikliği yaptıktan sonra composer dump-autoload komutunu çalıştırmanız gerekir. Bu komut, otomatik yükleme dosyalarını yeniden oluşturur.
Pratik İpuçları ve En İyi Uygulamalar
Composer’ı daha verimli ve güvenli kullanmak için bazı pratik ipuçları ve en iyi uygulamalar bulunmaktadır.
Composer’ı Güncel Tutma
Composer sürekli olarak geliştirilmektedir. Yeni özellikler, hata düzeltmeleri ve güvenlik iyileştirmeleri almak için Composer’ı düzenli olarak güncellemek önemlidir.
composer self-update
Bu komut, Composer’ın kendisini en son kararlı sürüme güncelleyecektir.
Performans İpuçları
Büyük projelerde Composer komutları bazen yavaş çalışabilir. Performansı artırmak için bazı flag’ler kullanabilirsiniz:
* --no-dev: Üretim ortamında geliştirme bağımlılıklarını (require-dev bölümündeki paketler) yüklemez. Bu, üretim sunucularında daha az dosya indirilmesini ve daha hızlı kurulumu sağlar.
composer install --no-dev
* --optimize-autoloader veya -o: Otomatik yükleme dosyalarını daha optimize bir şekilde oluşturur. Özellikle üretim ortamında, her sınıfın manuel olarak bulunması yerine, sınıf haritasının önceden oluşturulması performansı artırır.
composer install --optimize-autoloader
Bu iki flag’i bir arada kullanmak yaygın bir üretim dağıtım stratejisidir:
composer install --no-dev --optimize-autoloader
Ortam Değişkenleri
Composer’ın davranışını çeşitli ortam değişkenleri ile özelleştirebilirsiniz:
* COMPOSER_HOME: Composer’ın global yapılandırma ve önbellek dosyalarını sakladığı dizini belirtir. Varsayılan olarak genellikle ~/.composer‘dır.
* COMPOSER_MEMORY_LIMIT: Composer’ın kullanabileceği maksimum bellek miktarını belirler. Örneğin, COMPOSER_MEMORY_LIMIT=2G composer install ile komut başına bellek limitini artırabilirsiniz.
vendor Klasörü ve Versiyon Kontrol Sistemi
vendor klasörü, Composer tarafından indirilen tüm bağımlılıkları içerir. Bu klasörü versiyon kontrol sisteminize (örneğin Git’e) eklememeniz şiddetle tavsiye edilir. Bunun yerine, sadece composer.json ve composer.lock dosyalarını commit edin. Projenizi klonlayan herkes composer install komutunu çalıştırarak aynı bağımlılıkları yükleyebilir. Bu yaklaşım, depo boyutunu küçük tutar ve bağımlılık çakışmalarını önler. .gitignore dosyanıza aşağıdaki satırı eklemeyi unutmayın:
/vendor/
Sonuç ve Sıkça Sorulan Sorular (SSS)
Bu rehberde, Debian 8 işletim sistemi üzerinde Composer’ı nasıl kuracağınızı ve temel düzeyde nasıl kullanacağınızı adım adım öğrendiniz. Composer, PHP geliştiricileri için bağımlılık yönetimini basitleştiren ve modern PHP projelerinin temelini oluşturan güçlü bir araçtır. Doğru kurulum ve kullanım pratikleriyle, projelerinizin bağımlılıklarını etkin bir şekilde yönetebilir, geliştirme sürecinizi hızlandırabilir ve daha kararlı uygulamalar oluşturabilirsiniz.
Sıkça Sorulan Sorular (SSS)
1. Composer neden “yavaş” çalışıyor gibi görünüyor?
Composer, bağımlılıkları çözmek ve indirmek için Packagist.org gibi depolarla iletişim kurar. Çok sayıda bağımlılık veya yavaş bir internet bağlantısı bu süreci uzatabilir. Performans için --no-dev ve --optimize-autoloader flag’lerini kullanabilir, ayrıca composer self-update ile Composer’ı güncel tutabilirsiniz. memory_limit değerini artırmak da yardımcı olabilir.
2. composer.lock dosyası ne işe yarar?
composer.lock dosyası, composer install komutu çalıştırıldığında indirilen tüm bağımlılıkların ve alt bağımlılıkların tam sürümlerini kaydeder. Bu, projenin farklı ortamlarda (geliştirme, test, üretim) veya farklı geliştiriciler arasında her zaman aynı bağımlılık sürümlerini kullanmasını garanti eder. Bu dosya, composer.json ile birlikte versiyon kontrol sisteminize dahil edilmelidir.
3. Composer ile PHP versiyonu nasıl yönetilir?
Composer, PHP’nin kendisini yönetmez, ancak projenizin gerektirdiği minimum PHP sürümünü composer.json dosyasında config.platform.php veya require.php alanlarında belirtebilirsiniz. Composer, bu gereksinimi karşılamayan bir PHP sürümüyle çalıştırıldığında sizi uyaracaktır. Farklı PHP sürümleri arasında geçiş yapmak için phpbrew veya phpenv gibi araçlar kullanabilirsiniz.
4. vendor klasörü neden Git’e eklenmemeli?
vendor klasörü, indirilen tüm kütüphaneleri ve bağımlılıkları içerir. Bu klasörü Git’e eklemek, deponuzun boyutunu gereksiz yere artırır, çakışmalara yol açabilir ve bağımlılıkların güncellenmesini zorlaştırır. composer.json ve composer.lock dosyaları, projenin bağımlılıklarını tanımlamak için yeterlidir. Herkes composer install komutuyla bağımlılıkları kendi makinesine indirebilir.
5. Composer global olarak mı, yoksa proje bazında mı kurulmalı?
Bu rehberde global kurulumu tercih ettik çünkü çoğu durumda daha pratiktir. Ancak, bazı projeler farklı Composer sürümlerine ihtiyaç duyabilir veya global kurulum yapma izniniz olmayabilir. Bu durumlarda, composer.phar dosyasını doğrudan proje dizinine indirerek proje bazında da kullanabilirsiniz (php composer.phar install gibi). Çoğu geliştirici için global kurulum yeterli ve tavsiye edilen yöntemdir.