Ubuntu'da PHP 8.1 Kurulumu ve Yerel Geliştirme Ortamı Kurulumu


Bu öğreticinin önceki bir versiyonu alenaholligan tarafından yazılmıştır.

Giriş

PHP, web geliştirme için tasarlanmış popüler, açık kaynaklı bir sunucu tarafı betik dilidir ve internetin önemli bir kısmını bloglardan e-ticaret sitelerine, büyük ölçekli uygulamalara kadar destekler. Her yeni sürümle birlikte PHP, geliştiricilerin sağlam ve ölçeklenebilir yazılımlar oluşturmasına yardımcı olmak için geliştirilmiş performans, güvenlik ve modern geliştirme özellikleri sunar.

PHP 8.1, güvenilirliği korurken önemli iyileştirmeler ve yeni dil özellikleri sunan kararlı ve uzun vadeli desteklenen bir sürümdür. Ubuntu üzerinde PHP 8.1 kurmak, yerel geliştirme ortamınızın güncel, güvenli ve WordPress, Laravel ve özel PHP uygulamaları gibi yaygın kullanılan çerçeveler ve platformlarla uyumlu olmasını sağlar.

Bu eğitim, PHP 8.1'i Ubuntu'ya yüklemeniz, Apache veya Nginx ile yapılandırmanız, temel PHP eklentilerini kurmanız ve bağımlılık yönetimi için Composer'ı yüklemeniz konusunda sizi adım adım yönlendirir. Ayrıca kurulumunuzu nasıl doğrulayacağınızı ve yaygın sorunları nasıl çözeceğinizi de öğreneceksiniz.

PHP uygulamalarınızı GitHub üzerinden Linux-Console.net Uygulama Platformu ile dağıtın. Linux-Console.net, uygulamanızın ölçeklenmesine odaklansın.

Ana Noktalar

  • Ubuntu 22.04 üzerinde PHP 8.1 kurulumu: Ubuntu 22.04 LTS, varsayılan depolarında PHP 8.1'i içerir ve bu sayede üçüncü taraf PPA’lara gerek duymadan apt kullanarak kararlı, uzun vadeli destekli bir PHP sürümü kurabilirsiniz. Bu, öngörülebilir güncellemeler, güvenlik yamaları ve modern PHP framework’leriyle uyumluluk sağlar.

  • Gerçek dünya projeleri için gerekli PHP eklentileri: Çoğu üretim seviyesindeki PHP uygulamaları, mysql, curl, xml, mbstring, zip, gd ve bcmath gibi eklentilere dayanır. Bu eklentilerin erken kurulumu, ileride oluşabilecek çalışma zamanı hatalarını önler ve Laravel, Symfony ve WordPress gibi frameworklerle uyumluluğu sağlar.

  • PHP geliştirme için Apache veya Nginx seçimi: Apache, mod_php kullanarak PHP’yi doğrudan çalıştırabilirken, Nginx isteklerin işlenmesi için PHP‑FPM gerektirir. Her iki yaklaşım da yerel geliştirme için iyi çalışır, ancak PHP‑FPM modern üretim ortamlarını daha yakından yansıtır ve yük altında daha iyi ölçeklenir.

  • Modern PHP iş akışlarının temeli olarak Composer: Composer, proje bağımlılıklarını composer.json ve composer.lock dosyaları aracılığıyla yönetir ve makineler arasında tutarlı yapılar sağlar. Framework kurulumları, otomatik yükleyiciler oluşturma ve işbirlikçi PHP projelerinde güvenilir bağımlılık sürümlerini koruma için vazgeçilmezdir.

  • PHP'yi özellikle geliştirme için yapılandırma: Geliştirme ortamları, ayrıntılı hata raporlamasından, daha yüksek bellek limitlerinden ve daha uzun yürütme sürelerinden yararlanır. Bu ayarları php.ini dosyasında düzenlemek, geliştirme sırasında hataların hızlı bir şekilde ortaya çıkmasına yardımcı olur, ancak üretim dağıtımları için her zaman geri alınmalıdır.

  • Hata ayıklama ve doğrulama kurulumun bir parçasıdır: PHP'yi php -v ile doğrulamak, yüklenen eklentileri kontrol etmek ve Apache, Nginx veya PHP‑FPM günlüklerini incelemek kritik adımlardır. Çoğu kurulum sorunu eksik eklentiler, izinler veya yanlış yapılandırılmış web sunucusu yönergelerinden kaynaklanır.

Önkoşullar

Bu öğreticiyi tamamlamak için şunlara ihtiyacınız var:

  • Ubuntu çalıştıran yerel bir bilgisayar veya sanal sunucu (Ubuntu 22.04 LTS ve sonraki sürümlerle uyumlu)
  • Makineye yönetici (sudo) erişimi
  • Aktif bir internet bağlantısı
  • Komut satırıyla temel düzeyde tan familiarity

Yeni bir Ubuntu sunucusu kuruyorsanız, Ubuntu ile Başlangıç Sunucu Kurulumu rehberimize göz atın.

Adım 1 — PHP 8.1 Kurulumu

Kurulum ve ayarları komut satırında tamamlayacaksınız; bu, bilgisayarınızla grafiksel olmayan bir şekilde etkileşim kurma yöntemidir. Yani, düğmelere tıklamak yerine, metin yazarak bilgisayarınızdan metin yoluyla geri bildirim alacaksınız.

Komut satırı, shell veya terminal olarak da bilinir, bilgisayarda her gün yaptığınız birçok görevi değiştirmenize ve otomatikleştirmenize yardımcı olabilir ve yazılım geliştiricileri için çok önemli bir araçtır. Daha güçlü şeyler yapmanızı sağlayabilecek öğrenilecek birçok terminal komutu vardır. Linux Terminaline Giriş isimli makale, terminal ile daha iyi bir şekilde tanışmanıza yardımcı olabilir.

Not: Eğer Ubuntu'ya yeniyseniz, ek sistem yönetimi rehberliği için Ubuntu belgelerimizi incelemeyi düşünebilirsiniz.

Ubuntu'da Terminal uygulamasını, ekranınızın sol üst köşesindeki Ubuntu simgesine tıklayıp arama çubuğuna terminal yazarken bulabilirsiniz. Terminal uygulaması simgesine tıklayarak açabilirsiniz. Alternatif olarak, Terminal uygulamasını otomatik olarak açmak için klavyenizde CTRL, ALT ve T tuşlarına aynı anda basabilirsiniz.

Not: Ubuntu 22.04 LTS'de, PHP 8.1 varsayılan depolarda mevcuttur. Ubuntu 22.04'te belirli bir sürüm belirtmeden PHP kurduğunuzda, sistem varsayılan olarak PHP 8.1'i yükler.

Birden fazla PHP sürümünü yönetmeniz veya farklı bir sürüm yüklemeniz gerekiyorsa, sürüm yönetimi için phpenv veya phpbrew kullanmayı düşünebilirsiniz.

Mevcut paketler listenizi güncellemek için aşağıdaki komutları çalıştırın, ardından PHP 8.1'i yükleyin:

sudo apt update
sudo apt install --no-install-recommends php8.1

--no-install-recommends bayrağı, Apache web sunucusu gibi diğer paketlerin yüklenmemesini sağlar.

PHP sürüm bilgilerinizi aşağıdaki komut ile kontrol edin:

php -v

Böyle bir çıktı alacaksınız:

PHP 8.1.2-1ubuntu2.22 (cli) (built: Jul 15 2025 12:11:22) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2-1ubuntu2.22, Copyright (c), by Zend Technologies

Bu kurulum, resmi Ubuntu depolarından alınan PHP 8.1 paketlerini kullanarak Ubuntu 22.04 LTS üzerinde test edildi.

Web geliştirme için gerekli PHP uzantılarını yükleyin:

sudo apt install -y php8.1-cli php8.1-common php8.1-mysql php8.1-zip php8.1-gd php8.1-mbstring php8.1-curl php8.1-xml php8.1-bcmath

Bu komut aşağıdaki modülleri yükleyecektir:

  • php8.1-cli - komut yorumlayıcı, PHP betiklerini bir kabuk üzerinden test etmek veya genel kabuk betiği görevlerini gerçekleştirmek için kullanışlı
  • php8.1-common - PHP için dokümantasyon, örnekler ve yaygın modüller
  • php8.1-mysql - MySQL veritabanlarıyla çalışmak için
  • php8.1-zip - sıkıştırılmış dosyalarla çalışmak için
  • php8.1-gd - resimlerle çalışmak için
  • php8.1-mbstring - ASCII olmayan dizeleri yönetmek için kullanılır
  • php8.1-curl - PHP'de HTTP isteği yapmanızı sağlar
  • php8.1-xml - XML verileri ile çalışmak için
  • php8.1-bcmath - hassas ondalık sayılarla çalışırken kullanılır

PHP yapılandırma dosyaları /etc/php/8.1/ dizininde saklanır. Ana yapılandırma dosyası php.ini dosyasıdır ve bu dosyanın konumu kurulumunuza bağlı olarak farklı dizinlerde olabilir:

  • CLI yapılandırması: /etc/php/8.1/cli/php.ini
  • Apache yapılandırması: /etc/php/8.1/apache2/php.ini (Apache yüklüyse)
  • PHP-FPM yapılandırması: /etc/php/8.1/fpm/php.ini (PHP-FPM yüklüyse)

Yüklü uzantıları doğrulayın:

php -m

Bu, yüklü tüm PHP modüllerini listeler. Eğer php -v beklenenden farklı bir sürüm gösteriyorsa, birden fazla PHP sürümü yüklü olabilir. PHP 8.1'i özellikle doğrulamak için php8.1 -v komutunu kullanın.

PHP'yi kurdunuz ve çalıştırdığınız sürümü doğruladınız. Ayrıca gerekli PHP modüllerini de yüklediniz ve yüklü olan modüllerin listesini alabildiniz.

Adım 2 — PHP'yi Apache ile yapılandırma

Apache PHP modülünü kurun:

sudo apt install libapache2-mod-php8.1

Modülü etkinleştirin ve Apache'yi yeniden başlatın:

sudo a2enmod php8.1
sudo systemctl restart apache2

mod_php'yi Anlamak: mod_php modülü PHP'yi doğrudan Apache sürecine entegre eder. Apache bir PHP dosyası için bir istek aldığında, gömülü PHP yorumlayıcısını kullanarak bunu dahili olarak işler. Bu, ayrı bir PHP-FPM hizmetine ihtiyaç duyan Nginx'ten farklıdır. a2enmod komutu, modülü etkinleştirmek için /etc/apache2/mods-enabled/ dizininde sembolik bir bağlantı oluşturur.

Apache’in PHP’yi doğru şekilde işleyip işlemediğini doğrulamak için, Apache’in belge kökünde (genellikle /var/www/html) bir test dosyası oluşturun:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php

Tarayıcınızda http://localhost/info.php adresini ziyaret edin. PHP’nin yapılandırma bilgileri sayfasını görmelisiniz. Güvenlik için testten sonra bu dosyayı kaldırın:

sudo rm /var/www/html/info.php

Apache PHP Sorunlarını Giderme

Mod_php kurulumundan sonra Apache başlamıyorsa:

Apache’nin hata günlüğünü kontrol edin:

sudo tail -20 /var/log/apache2/error.log

Yaygın sorunlar şunlardır:

  • Çakışan PHP modülleri: Birden fazla PHP sürümünüz varsa, önce diğer PHP modüllerini sudo a2dismod php7.4 (varsa) ile devre dışı bırakın
  • Apache yapılandırmasında sözdizimi hataları: Kontrol etmek için sudo apache2ctl configtest komutunu çalıştırın

Yerel sunucuyu ziyaret edip “Çalışıyor!” mesajını görüyorsanız ama PHP dosyaları düz metin olarak görüntüleniyorsa:

Bu, Apache’nin PHP’yi işlemediği anlamına geliyor. Kontrol edin:

  1. Modülün etkinleştirildiğini doğrulayın:
apache2ctl -M | grep php
  1. Hiçbir şey görünmüyorsa, modül yüklenmemiş demektir. Tekrar etkinleştirin:
sudo a2enmod php8.1
sudo systemctl restart apache2
  1. PHP dosyanızın doğru uzantıya sahip olduğundan (.php) ve PHP kodu içerdiğinden emin olun

403 Yasak Hatası alırsanız:

Dosya izinlerini kontrol edin:

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html

Güvenlik Notu: phpinfo() fonksiyonu detaylı sistem bilgilerini açığa çıkarır. phpinfo() içeren dosyaları üretim sunucularında asla bırakmayın.

Apache Sanal Sunucu Yapılandırması

Özel alan adlarıyla yerel geliştirme için bir sanal sunucu oluşturun:

sudo nano /etc/apache2/sites-available/example.local.conf

Bu yapılandırmayı ekleyin:

<VirtualHost *:80>
    ServerName example.local
    DocumentRoot /var/www/example.local
    <Directory /var/www/example.local>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
  • ServerName: Bu sanal ana bilgisayar için alan adı
  • DocumentRoot: PHP dosyalarınızın bulunduğu yer
  • AllowOverride All: .htaccess dosyalarının Apache ayarlarını geçersiz kılmasına izin verir (Laravel gibi frameworkler için gereklidir)
  • Require all granted: Dizin erişimine izin verir

Dizini oluşturun, siteyi etkinleştirin ve Apache'i yeniden başlatın:

sudo mkdir -p /var/www/example.local
sudo chown -R www-data:www-data /var/www/example.local
sudo a2ensite example.local.conf
sudo systemctl restart apache2

Yerel erişim için alan adını /etc/hosts dosyanıza ekleyin:

echo "127.0.0.1 example.local" | sudo tee -a /etc/hosts

Apache ile Nginx Arasında Seçim Yapmak

Web sunucunuzu yapılandırmadan önce, hangisinin ihtiyaçlarınıza uygun olduğunu düşünün:

Özellikmod_php ile ApacheNginx ile PHP-FPM
PHP İşlemeApache işlemine gömülüAyrı PHP-FPM hizmeti
Hafıza KullanımıDaha yüksek (her Apache sürecinde PHP)Düşük (ayrık işlem havuzu)
PerformansDüşük ila orta trafik için uygunYüksek trafik ve eş zamanlı istekler için daha iyi
YapılandırmaDaha basit başlangıç kurulumuDaha karmaşık (PHP-FPM yapılandırması gerektirir)
.htaccess DesteğiYerel destekDesteklenmiyor (sunucu bloklarında yapılandırılmalıdır)
Üretim KullanımıPaylaşımlı barındırmada yaygınModern dağıtımlarda yaygın
Öğrenme EğrisiYeni başlayanlar için daha kolayDaha dik öğrenme eğrisi
Kaynak VerimliliğiYüksek yük altında daha az verimliYüksek yük altında daha verimli

Apache'yi ne zaman seçmeli:

  • Apache’e aşinasınız veya .htaccess desteğine ihtiyacınız var
  • Basit bir geliştirme ortamı kurmak
  • .htaccess'e büyük ölçüde bağlı framework'lerle çalışmak (bazı WordPress kurulumları)
  • Daha basit bir başlangıç yapılandırmasını tercih edersiniz

Nginx’i ne zaman seçmeli:

  • Yüksek yük altında daha iyi performansa ihtiyacınız var
  • Modern üretim ortamlarını yansıtmak istiyorsunuz
  • Ölçeklenecek uygulamalar geliştiriyorsunuz
  • Daha modern bir mimariyi tercih ediyorsunuz

Her ikisi de yerel geliştirme için eşit derecede iyi çalışır. Seçim genellikle kişisel tercihe veya mevcut altyapıya bağlıdır.

Adım 3 — PHP'yi Nginx ile Yapılandırma

PHP-FPM'i (FastCGI Process Manager) yükleyin:

sudo apt install php8.1-fpm

PHP-FPM'yi başlatın ve etkinleştirin:

sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm

PHP-FPM ve FastCGI'yi Anlamak: Apache’nin mod_php modülünün aksine, Nginx PHP’yi doğrudan işlemez. PHP-FPM (FastCGI Process Manager), Nginx’in FastCGI protokolü üzerinden iletişim kurduğu ayrı bir hizmet olarak çalışır. FastCGI, programların web sunucularıyla iletişim kurması için kullanılan ikili bir protokoldür—geleneksel CGI’den daha hızlıdır çünkü istekler arasında süreçleri aktif tutar.

Nginx bir PHP dosyası için istek aldığında, isteği PHP-FPM'e bir Unix soketi (veya TCP bağlantısı) üzerinden iletir. PHP-FPM PHP kodunu işler ve sonucu Nginx'e geri gönderir, Nginx de bunu istemciye iletir. Bu ayrım, PHP-FPM’in kendi işlem havuzunu yönetmesine izin vererek performans ve kaynak yönetimini iyileştirir.

Nginx Sunucu Bloğu Yapılandırması

Bir sunucu bloğu yapılandırması oluşturun:

sudo nano /etc/nginx/sites-available/example.local

Bu yapılandırmayı ekleyin:

server {
    listen 80;
    server_name example.local;
    root /var/www/example.local;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Yapılandırma açıklandı:

  • root: PHP dosyalarınızın bulunduğu dizin
  • location ~ \.php$: Regex kullanarak .php ile biten tüm isteklerle eşleşir
  • include snippets/fastcgi-php.conf: Nginx’in varsayılan FastCGI yapılandırmasını dahil eder (SCRIPT_FILENAME ve diğer gerekli değişkenleri ayarlar)
  • fastcgi_pass unix:/var/run/php/php8.1-fpm.sock: PHP-FPM'in dinlediği Unix soketi. Nginx'in PHP-FPM ile iletişim kurma yolu budur. Soket yolu /etc/php/8.1/fpm/pool.d/www.conf dosyasında tanımlanmıştır.

Siteyi etkinleştirin ve yapılandırmayı test edin:

sudo mkdir -p /var/www/example.local
sudo chown -R www-data:www-data /var/www/example.local
sudo ln -s /etc/nginx/sites-available/example.local /etc/nginx/sites-enabled/
sudo nginx -t

Test geçerse, Nginx'i yeniden başlatın:

sudo systemctl restart nginx

Alan adını /etc/hosts dosyasına ekleyin:

echo "127.0.0.1 example.local" | sudo tee -a /etc/hosts

Bir test PHP dosyası oluşturun:

echo "<?php phpinfo(); ?>" | sudo tee /var/www/example.local/info.php

Ziyaret edin http://example.local/info.php. PHP’nin yapılandırma sayfasını görmelisiniz. Doğrulamadan sonra test dosyasını kaldırın:

sudo rm /var/www/example.local/info.php

Nginx PHP Sorunlarını Giderme

“502 Bad Gateway” hatası alırsanız:

Bu, Nginx’in PHP-FPM ile iletişim kuramadığı anlamına gelir. Şunları kontrol edin:

  1. PHP-FPM'in çalıştığını doğrulayın:
sudo systemctl status php8.1-fpm
  1. Socket yolunun doğru olduğunu kontrol edin. Socket konumu /etc/php/8.1/fpm/pool.d/www.conf dosyasında tanımlanmıştır:
grep listen /etc/php/8.1/fpm/pool.d/www.conf

Şuna benzer bir şey görmelisiniz: listen=/run/php/php8.1-fpm.sock. Nginx yapılandırmanızdaki yol tam olarak eşleşmelidir. /var/run genellikle /run'a bir sembolik bağlantıdır, bu yüzden her iki yol da çalışır.

  1. Soket dosyası izinlerini kontrol edin:
ls -la /var/run/php/php8.1-fpm.sock

Soket, www-data ya da Nginx'in çalıştığı kullanıcı tarafından sahip olunmalıdır. Eğer izinler yanlışsa:

sudo chown www-data:www-data /var/run/php/php8.1-fpm.sock
  1. Nginx hata günlüğünü kontrol edin:
sudo tail -20 /var/log/nginx/error.log

Şu tür hatalar görebilirsiniz:

connect() to unix:/var/run/php/php8.1-fpm.sock failed (2: No such file or directory)

Bu, soket yolunun yanlış olduğunu veya PHP-FPM’in çalışmadığını gösterir.

PHP dosyaları çalışmak yerine indiriliyorsa:

Bu, Nginx’in PHP dosyalarını PHP-FPM’e iletmediği anlamına gelir. Kontrol edin:

  • Sunucu yapılandırmanızda location ~ \.php$ bloğu mevcut
  • fastcgi_pass yönergesi doğru sokete işaret eder
  • Değişiklikleri yaptıktan sonra Nginx'i yeniden başlattınız

“Dosya bulunamadı” hatası alıyorsanız:

snippets/fastcgi-php.conf dosyasının var olduğunu kontrol edin:

ls -la /etc/nginx/snippets/fastcgi-php.conf

Bu dosya, PHP-FPM’ye hangi dosyayı çalıştıracağını söyleyen SCRIPT_FILENAME’i ayarlar. Bunun olmaması durumunda, PHP-FPM hangi dosyayı işleyeceğini bilmez.

Adım 4 — PHP'yi Geliştirme için Yapılandırma

Geliştirme için PHP'yi hata raporlama, görüntüleme ayarları ve bellek sınırlarını php.ini dosyasında ayarlayarak yapılandırın. Bu ayarlar, üretim yapılandırmalarından farklıdır.

PHP, CLI (komut satırı) ve web sunucusu kullanımı için ayrı yapılandırma dosyaları kullanır. İlgili dosyayı düzenleyin:

CLI için (PHP’yi terminalden çalıştırırken):

sudo nano /etc/php/8.1/cli/php.ini

Web sunucusu için (PHP-FPM ile Apache veya Nginx):

# For Apache
sudo nano /etc/php/8.1/apache2/php.ini

# For PHP-FPM (Nginx)
sudo nano /etc/php/8.1/fpm/php.ini

Not: Hem CLI hem de web sunucusunu kullanıyorsanız, her iki dosyayı da ayrı ayrı yapılandırmanız gerekir. cli/php.ini dosyasındaki değişiklikler web isteklerini etkilemez ve apache2/php.ini veya fpm/php.ini dosyasındaki değişiklikler CLI komut dosyalarını etkilemez.

Temel Geliştirme Ayarları

Bu ayarları php.ini dosyanızda bulun ve güncelleyin:

display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /var/log/php_errors.log
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
date.timezone = America/New_York

Her ayarın yaptığı şey:

  • display_errors=On: PHP hatalarını doğrudan tarayıcıda gösterir (hata ayıklama için faydalı, üretim ortamında tehlikeli)
  • display_startup_errors=On: PHP başlatılırken oluşan hataları gösterir
  • error_reporting=E_ALL: Tüm hata türlerini (uyarılar, bildirimler vb.) raporlar
  • log_errors=On: Hataları bir günlük dosyasına yazar
  • error_log: PHP'nin hata günlüklerini yazdığı yer
  • memory_limit=256M: Bir scriptin kullanabileceği maksimum bellek ("memory exhausted" hatası alırsanız artırın)
  • upload_max_filesize=64M: Yüklenen dosyalar için maksimum boyut
  • post_max_size=64M: POST verileri için maksimum boyut (must upload_max_filesize değerinden büyük olmalıdır)
  • max_execution_time=300: Bir komut dosyasının çalışabileceği en uzun süre (saniye cinsinden)
  • date.timezone: Varsayılan zaman dilimini ayarlar (yerel zaman diliminizi kullanın: Asia/Kolkata, Europe/London, UTC vb.)

Üretim Uyarısı: Bu geliştirme ayarlarını üretim ortamında asla kullanmayın. Canlı sunucularda her zaman display_errors=Off olarak ayarlayın ve uygun hata raporlama seviyelerini kullanın.

Değişiklikleri yaptıktan sonra web sunucunuzu yeniden başlatın:

# For Apache
sudo systemctl restart apache2

# For PHP-FPM
sudo systemctl restart php8.1-fpm

Yapılandırmanızı Doğrulama

Yaptığınız değişikliklerin etkili olup olmadığını kontrol edin:

# For CLI
php -i | grep display_errors

# For web server (create a test file)
echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/test.php

Test dosyasını tarayıcınızda açın ve display_errors öğesini arayın. On olarak görünmelidir. Doğruladıktan sonra test dosyasını kaldırın.

Değişiklikleriniz görünmüyorsa:

  1. Doğru php.ini dosyasını düzenlediğinizden emin olun (CLI vs web sunucusu)
  2. Ayar adlarındaki yazım hatalarını kontrol edin (büyük/küçük harf duyarlıdır)
  3. Değişikliklerden sonra web sunucunuzu yeniden başlatın
  4. Bazı ayarlar, proje dizininizdeki .htaccess (Apache) veya php.ini dosyası ile geçersiz kılınabilir

PHP kullanmaya hemen başlayabilirsiniz, ancak muhtemelen PHP uygulamalarını hızlı bir şekilde geliştirmek için çeşitli kütüphaneler kullanmak isteyeceksiniz. PHP ortamınızı test etmeden önce, projeleriniz için bir bağımlılık yöneticisi kurun.

Adım 5 — Bağımlılık Yönetimi için Composer Kurulumu (İsteğe Bağlı)

Kütüphaneler, her şeyi kendiniz yazmanız gerekmeden yaygın sorunları çözmenize yardımcı olabilecek kod koleksiyonlarıdır. Mevcut birçok kütüphane olduğundan, bir bağımlılık yöneticisi kullanmak, PHP yazmada daha deneyimli hale geldikçe birden fazla kütüphaneyi yönetmenize yardımcı olacaktır.

Composer, PHP'de bağımlılık yönetimi için bir araçtır. Projenizin bağımlı olduğu kütüphaneleri belirtmenize olanak tanır ve bu paketlerin kurulumu ve güncellenmesini yönetir.

Benzer olmasına rağmen, Composer, yum veya apt ile aynı anlamda bir paket yöneticisi değildir. "Paketler" veya kütüphaneler ile ilgilenir, ancak bunları proje bazında yönetir ve projenizin içinde bir dizine (ör. vendor) kurar. Varsayılan olarak hiçbir şeyi genel olarak kurmaz. Bu nedenle, bir bağımlılık yöneticisidir. Ancak, global komutu aracılığıyla kullanım kolaylığı için bir global projeyi destekler.

Bu fikir yeni değil ve Composer, büyük ölçüde Node’un npm ve Ruby’nin bundler’ından ilham almıştır.

Diyelim ki :

  • Birçok kütüphaneye bağlı bir projeniz var.
  • Bu kütüphanelerden bazıları diğer kütüphanelere bağımlıdır.

Besteci:

  • Bağlı olduğunuz kütüphaneleri belirtmenizi sağlar.
  • Hangi paketlerin hangi sürümlerinin kurulabileceğini ve kurulması gerektiğini bulur ve bunları projenize indirerek kurar.
  • Tüm bağımlılıklarınızı tek bir komutla güncellemenizi sağlar.
  • Bağımlılıkları bildirme ile ilgili daha fazla ayrıntı için Temel Kullanım bölümünü görmenizi sağlar.

Composer yükleyicisini indirin:

curl -sS https://getcomposer.org/installer -o /tmp/composer-setup.php

Yükleyicinin bütünlüğünü SHA-384 karma değerini kontrol ederek doğrulayın. En son karma değerini alın:

HASH=$(curl -sS https://composer.github.io/installer.sig)

Hash'in eşleştiğini doğrulayın:

php -r "if (hash_file('SHA384', '/tmp/composer-setup.php') === '$HASH') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('/tmp/composer-setup.php'); } echo PHP_EOL;"

Görmelisin:

Installer verified

Eğer Installer corrupt görüyorsanız, indirme tamamlanmamış veya değiştirilmiş demektir. Kurulum dosyasını yeniden indirin ve hash değerini doğrulayın. Hâlâ sorun yaşıyorsanız, internet bağlantınızı kontrol edin veya farklı bir ağdan indirmeyi deneyin.

Composer'ı global olarak kurun:

sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer

Buna benzer bir çıktı alacaksınız:

All settings correct for using Composer
Downloading...

Composer (version 2.3.5) successfully installed to: /usr/local/bin/composer
Use it: php /usr/local/bin/composer

Kurulumunuzu test edin:

composer

Aşağıdakine benzer bir çıktı alacaksınız:

   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 2.3.5 2022-04-13 16:43:00

Usage:
  command [options] [arguments]

Options:
  -h, --help                     Display help for the given command. When no command is given display help for the list command
  -q, --quiet                    Do not output any message
  -V, --version                  Display this application version
      --ansi|--no-ansi           Force (or disable --no-ansi) ANSI output
  -n, --no-interaction           Do not ask any interactive question
      --profile                  Display timing and memory usage information
      --no-plugins               Whether to disable plugins.
      --no-scripts               Skips the execution of all scripts defined in composer.json file.
  -d, --working-dir=WORKING-DIR  If specified, use the given directory as working directory.
      --no-cache                 Prevent use of the cache
  -v|vv|vvv, --verbose           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
. . .

Bu, Composer'ın sisteminize başarıyla kurulduğunu ve sistem genelinde kullanılabilir olduğunu doğrular.

Not: Sunucunuzda barındırdığınız her proje için ayrı Composer çalıştırılabilir dosyalarına sahip olmayı tercih ediyorsanız, bunu proje bazında yerel olarak kurabilirsiniz. Bu yöntem, sistem kullanıcınızın sistem genelinde yazılım yükleme iznine sahip olmadığı durumlarda da faydalıdır.

Bunu yapmak için, herhangi bir argüman kullanmadan php /tmp/composer-setup.php komutunu çalıştırın. Bu komut, mevcut dizininizde bir composer.phar dosyası oluşturacaktır ve bu dosyayı php composer.phar komutuyla çalıştırabilirsiniz.

Adım 6 — PHP Projesinde Composer Kullanmak

Son adım olarak, isterseniz projenizi composer init ile başlatabilirsiniz. Bu işlem, proje bağımlılıklarını yönetecek olan composer.json dosyasını oluşturur. Projeyi başlatmak, ayrıca Yazar ve Lisans gibi proje detaylarını tanımlamanıza ve Composer’ın otomatik yükleme işlevini kullanmanıza olanak tanır. Bağımlılıkları şimdi tanımlayabilir veya daha sonra ekleyebilirsiniz.

Bir proje dizini oluşturun ve Composer'ı başlatın:

cd ~
mkdir example-project
cd example-project
composer init

Bu komutu çalıştırmak, kurulum sihirbazını başlatacaktır. Sihirbazda girdiğiniz bilgiler daha sonra güncellenebilir, bu nedenle varsayılanları bırakabilir ve sadece ENTER tuşuna basabilirsiniz. Henüz herhangi bir bağımlılığı yüklemeye hazır değilseniz, no seçeneğini tercih edebilirsiniz. Her istemde bilgilerinizi girin:

                                            
  Welcome to the Composer config generator  
                                            


This command will guide you through creating your composer.json config.

Package name (<vendor>/<name>) [sammy/example-project]:  sammy/project1
Description []:
Author [n to skip]: Sammy <sammy@linux-console.net>
Minimum Stability []: 
Package Type (e.g. library, project, metapackage, composer-plugin) []: project
License []: 

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? no
Would you like to define your dev dependencies (require-dev) interactively [yes]? no

Add PSR-4 autoload mapping? Maps namespace "Sammy\Project1" to the entered relative path. [src/, n to skip]: n

{
    "name": "sammy/project1",
    "type": "project",
    "authors": [
        {
            "name": "Sammy",
            "email": "sammy@linux-console.net"
        }
    ],
    "require": {}
}

Do you confirm generation [yes]? yes

Üretimi onaylamadan önce, sihirbazın oluşturacağı composer.json dosyasının bir örneğini göreceksiniz. Her şey yolunda görünüyorsa, evet varsayılanını onaylayabilirsiniz. Yeniden başlamak istiyorsanız, hayır seçeneğini tercih edin.

Herhangi bir bağımlılığı ilk kez tanımladığınızda, Composer bir vendor klasörü oluşturur. Tüm bağımlılıklar bu vendor klasörüne yüklenir. Composer ayrıca bir composer.lock dosyası oluşturur. Bu dosya, projenizde kullanılan her bağımlılık ve alt bağımlılığın tam sürümünü belirtir. Bu, programınızın çalıştırıldığı her makinenin her paketin tam olarak aynı sürümünü kullanmasını sağlar.

Not: vendor klasörü asla sürüm kontrol sisteminize (VCS) dahil edilmemelidir. vendor klasörü yalnızca diğer satıcılardan yüklediğiniz paketleri içerir. Bu bireysel satıcılar kendi kodlarını kendi sürüm kontrol sistemlerinde yönetirler. Sadece sizin yazdığınız kodu takip etmelisiniz. vendor klasörünü eklemek yerine yalnızca composer.json ve composer.lock dosyalarınızı eklemeniz yeterlidir. Belirli dosyaları görmezden gelme hakkında daha fazla bilgi için Git Kullanımı: Bir Referans Kılavuzu'nu inceleyebilirsiniz.

Artık PHP'yi kurduğunuza ve proje bağımlılıklarınızı Composer ile yönetmenin bir yoluna sahip olduğunuza göre, ortamınızı test etmeye hazırsınız.

Adım 7 — PHP Ortamını Test Etme

Kurulumunuzu test etmek için temel bir PHP betiği oluşturun ve çalıştırın:

nano hello.php

Aşağıdaki PHP kodunu ekleyin:

<?php
echo 'Hello World!';
?>

Dosyayı kaydedip kapatın (önce CTRL+X, sonra Y, ardından ENTER tuşlarına basın). Ardından betiği çalıştırın:

php hello.php

Eğer PHP düzgün bir şekilde işlenirse, sadece tırnak içindeki karakterleri göreceksiniz:

Hello World!

PHP betiğini başarıyla işledi, bu da PHP ortamınızın başarıyla yüklendiği ve programlama yolculuğunuza devam etmeye hazır olduğunuz anlamına geliyor.

Adım 8 — Gerçek Dünya PHP Projelerini Kurma

Laravel, Symfony ve WordPress gibi modern PHP çerçeveleri belirli PHP uzantıları ve Composer gerektirir. Çerçeveyi Composer veya çerçevenin kurucusunu kullanarak yükleyin, ardından web sunucunuzu projenin public dizinine yönlendirecek şekilde yapılandırın.

Laravel Kurulumu

Laravel'i Composer kullanarak yükleyin:

composer create-project laravel/laravel my-laravel-app
cd my-laravel-app

Bu komut, Laravel'i ve tüm bağımlılıklarını indirir. İşlem birkaç dakika sürebilir.

Laravel, bu PHP uzantılarını gerektirir (Adım 1'de kurulmuş olmalıdır):

  • php8.1-mbstring - Çok baytlı dizge işlemleri
  • php8.1-xml - XML ayrıştırma
  • php8.1-curl - HTTP istekleri
  • php8.1-zip - Arşiv işlemleri
  • php8.1-bcmath - Keyfi hassasiyet matematiği

Laravel "mbstring eksik" diyorsa, hatta siz kurmuş olsanız bile:

Bu genellikle uzantının yüklendiği ama yüklenmediği anlamına gelir. Kontrol edin:

  1. Eklentinin yüklü olduğunu doğrulayın:
php -m | grep mbstring
  1. Eksikse, yükleyin:
sudo apt install php8.1-mbstring
  1. Yüklüyse ama görünmüyorsa, web sunucunuzu yeniden başlatın:
# For Apache
sudo systemctl restart apache2

# For PHP-FPM
sudo systemctl restart php8.1-fpm
  1. Hangi php.ini dosyasının kullanıldığını kontrol edin. Laravel’in yükleyicisi CLI PHP kullanır, bu yüzden kontrol edin:
php --ini

Uzantının CLI php.ini dosyasında etkinleştirildiğinden emin olun.

Laravel kurulumunu doğrulama:

Kurulum tamamlandıktan sonra, Laravel’in geliştirme sunucusunu başlatın:

php artisan serve

Görmelisin:

INFO  Server running on [http://127.0.0.1:8000]

Tarayıcınızda http://localhost:8000 adresini ziyaret edin. Laravel’in karşılama sayfasını görmelisiniz.

Apache veya Nginx ile üretim benzeri ortamlarda:

Web sunucunuzu, proje kökü değil, public dizinine yönlendirecek şekilde yapılandırın. Laravel’in public/index.php dosyası tüm istekler için giriş noktasıdır.

Not: Laravel hakkında daha fazla bilgi edinmek için Ubuntu'ya Laravel Yükleme konusundaki eğitimimize göz atın.

WordPress Kurulumu

WordPress'i indirip çıkarın:

cd /var/www
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzf latest.tar.gz
sudo chown -R www-data:www-data /var/www/wordpress

WordPress, bir MySQL veya MariaDB veritabanı gerektirir. Gerekirse MySQL’i yükleyin:

sudo apt install mysql-server
sudo mysql_secure_installation

mysql_secure_installation komutu size şunları yapmanızı isteyecektir:

  • Root şifresi belirle
  • Anonim kullanıcıları kaldır
  • Root girişine uzaktan izin verme
  • Test veritabanını kaldır
  • Ayrıcalık tablolarını yeniden yükle

WordPress için bir veritabanı ve kullanıcı oluşturun:

sudo mysql -u root -p

MySQL istemcisinde:

CREATE DATABASE wordpress_db;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

secure_password yerine güçlü bir şifre kullanın. WordPress, veritabanına bağlanmak için bu kimlik bilgilerini kullanacaktır.

WordPress veritabanına bağlanamıyorsa:

  1. MySQL'in çalıştığını doğrulayın:
sudo systemctl status mysql
  1. Veritabanı bağlantısını test et:
mysql -u wpuser -p wordpress_db

Eğer bu işe yaramazsa, kontrol edin:

  • Kullanıcı adı ve şifre doğru
  • Veritabanı mevcut: SHOW DATABASES;
  • Kullanıcının izinleri: SHOW GRANTS FOR 'wpuser'@'localhost';
  1. PHP’nin MySQL eklentisinin yüklü olduğunu kontrol edin:
php -m | grep mysql

Eksikse, yükleyin:

sudo apt install php8.1-mysql
sudo systemctl restart apache2  # or php8.1-fpm for Nginx

WordPress kurulumunu tamamlama:

Web sunucunuzu /var/www/wordpress dizinine yönlendirecek şekilde yapılandırın (Apache için Adım 2 veya Nginx için Adım 3'e bakın). Sitenizi tarayıcınızda ziyaret edin. WordPress size şunları yapmanızı isteyecektir:

  1. Dilini seç
  2. Veritabanı kimlik bilgilerini girin (oluşturduğunuz veritabanını, kullanıcı adını ve şifreyi kullanın)
  3. Kurulumu tamamlayın

Not: Ayrıntılı WordPress kurulumu için Ubuntu üzerinde LAMP ile WordPress Nasıl Kurulur konusuna bakın.

Symfony Kurulumu

Symfony'yi Composer kullanarak kurun:

composer create-project symfony/website-skeleton my-symfony-app
cd my-symfony-app

Symfony, Laravel ile aynı uzantıları gerektirir. Geliştirme sunucusunu başlatın:

symfony server:start

Veya PHP’nin dahili sunucusunu kullanın:

php -S localhost:8000 -t public

Eğer Symfony kurulumu eklenti hatalarıyla başarısız olursa:

Gerekli tüm uzantıların yüklü ve etkin olduğundan emin olun:

php -m | grep -E 'mbstring|xml|curl|zip|bcmath'

Eksik olanlar varsa, onları yükleyin ve web sunucunuzu yeniden başlatın.

Adım 9 — Yerel Geliştirme için En İyi Uygulamalar

Yerel ortamınızı güvence altına alın, sürüm kontrolü kullanın, uygun dosya izinlerini yapılandırın ve ortamınıza özel ayarları yapın. Bu uygulamalar güvenlik sorunlarını önler ve geliştirme sürecini daha sorunsuz hale getirir.

Güvenlik Hususları

Yerel geliştirme sırasında bile güvenlik en iyi uygulamalarını takip edin:

  1. Üretimde tehlikeli PHP fonksiyonlarını devre dışı bırakın: exec(), system() ve shell_exec() gibi fonksiyonlar, üretim php.ini dosyalarında kısıtlanmalıdır.

  2. Ortam değişkenlerini kullanın: Hassas yapılandırmaları .env dosyalarında saklayın (bunları sürüm kontrolüne asla eklemeyin). Laravel ve Symfony bunu yerleşik olarak destekler.

  3. Dosya izinlerini doğru şekilde ayarlayın: Web sunucusu dosyaları web sunucusu kullanıcısı tarafından okunabilir olmalı, ancak yazılabilir olmamalıdır:

sudo chown -R www-data:www-data /var/www/your-project
sudo find /var/www/your-project -type d -exec chmod 755 {} \;
sudo find /var/www/your-project -type f -exec chmod 644 {} \;

Bu izinlerin önemli olmasının nedeni: Dizinlerin 755 (sahibi için okuma, yazma, çalıştırma; diğerleri için okuma ve çalıştırma) olması gerekir ki web sunucusu bunların içinden geçebilsin. Dosyaların ise 644 (sahibi için okuma ve yazma; diğerleri için yalnızca okuma) olması gerekir ki web sunucusu onları okuyabilsin ama değiştiremesin. Bu, kötü niyetli betiklerin dosyalarınızı üzerine yazmasını engeller.

Sürüm Kontrolü Entegrasyonu

PHP projelerinizde her zaman sürüm kontrolü kullanın. Proje dizininizde Git'i başlatın:

cd /var/www/your-project
git init

Gereksiz dosyaları hariç tutmak için bir .gitignore dosyası oluşturun:

/vendor/
/node_modules/
.env
.DS_Store
*.log

Performans Optimizasyonu

Yerel geliştirmede daha iyi performans için:

  • OPcache'i Etkinleştir: OPcache, PHP 8.1 ile birlikte gelir ve derlenmiş PHP kodunu önbelleğe alarak performansı artırır.

  • Composer’ın otomatik yükleyici optimizasyonunu kullanın:

composer install --optimize-autoloader --no-dev
  • PHP-FPM havuzlarını yapılandırın, Nginx kullanıyorsanız daha iyi kaynak yönetimi için.

Adım 10 — Yaygın Sorunların Giderilmesi

Yaygın PHP kurulum sorunları arasında eksik eklentiler, yanlış dosya izinleri, web sunucusu yapılandırma hataları ve sürüm uyumsuzlukları bulunur. Çoğu problem, eklenti yüklemesini kontrol ederek, dosya izinlerini doğrulayarak ve web sunucusu günlüklerini gözden geçirerek çözülebilir.

PHP Eklentileri Yüklenmiyor

Eğer php -m yeni yüklediğiniz bir eklentiyi göstermiyorsa:

  • Gerçekten yüklü olduğunu doğrulayın:
dpkg -l | grep php8.1-extension_name
  • Uzantı dosyasının var olup olmadığını kontrol edin:
ls /usr/lib/php/*/extension_name.so
  • php.ini dosyasında etkinleştirildiğini doğrulayın. Bazı uzantıların açıkça etkinleştirilmesi gerekir:
grep -i extension_name /etc/php/8.1/*/php.ini
  • Web sunucunuzu yeniden başlatın:
# For Apache
sudo systemctl restart apache2

# For PHP-FPM
sudo systemctl restart php8.1-fpm
  • Hangi php.ini dosyasının kullanıldığını kontrol edin:
php --ini

Doğru php.ini dosyasını kontrol ettiğinizden emin olun (CLI vs web sunucusu).

Eklenti hâlâ görünmüyorsa:

  • Bazı uzantılar ek sistem kütüphaneleri gerektirir. Uzantının dokümantasyonunu kontrol edin
  • Doğru sürümü kurduğunuzu doğrulayın (php8.1-uzantısı, php8.0-uzantısı değil)
  • Engellemeye neden olabilecek çakışan PHP sürümlerini kontrol edin

500 Dahili Sunucu Hatası

500 hatası, sunucunun bir hata ile karşılaştığı ancak detayları gösteremediği anlamına gelir. Hata günlüklerini kontrol edin:

# Apache
sudo tail -20 /var/log/apache2/error.log

# Nginx
sudo tail -20 /var/log/nginx/error.log

# PHP-FPM
sudo tail -20 /var/log/php8.1-fpm.log

Yaygın nedenler ve çözümler:

  1. Yanlış dosya izinleri: PHP dosyaları web sunucusu kullanıcısı tarafından okunabilir olmalıdır
sudo chown -R www-data:www-data /var/www/your-project
sudo find /var/www/your-project -type f -exec chmod 644 {} \;
sudo find /var/www/your-project -type d -exec chmod 755 {} \;
  1. Eksik PHP uzantıları: "Tanımsız fonksiyon çağrısı" gibi mesajlar için hata günlüğünü kontrol edin. Eksik uzantıyı yükleyin ve web sunucusunu yeniden başlatın.

  2. PHP dosyalarındaki sözdizimi hataları: Hata günlüğü dosya ve satır numarasını gösterecektir. Yaygın sorunlar:

    • Eksik noktalı virgüller
    • Kapanmamış parantezler veya tırnak işaretleri
    • Tanımsız fonksiyonları veya sınıfları kullanmak
  3. Yanlış web sunucusu yapılandırması:

    • Apache: Sanal sunucu yapılandırmasını ve modül yüklemelerini kontrol edin
    • Nginx: PHP-FPM soket yolunu ve FastCGI yapılandırmasını doğrulayın
  4. PHP bellek limiti aşıldı: Eğer “İzin verilen bellek boyutu tükendi” hataları görüyorsanız, php.ini dosyasında memory_limit değerini artırın

PHP Sürüm Çakışmaları

Eğer php -v beklenen sürümden farklı bir sürüm gösteriyorsa, birden fazla PHP sürümünüz yüklüdür.

Hangi sürümlerin yüklü olduğunu kontrol edin:

dpkg -l | grep php | grep -E 'php[0-9]'

Doğru sürümü açıkça kullanın:

php8.1 -v
php8.1 -m

Web sunucunuzu PHP 8.1 kullanacak şekilde güncelleyin:

Apache için, diğer PHP modüllerini devre dışı bırakın ve PHP 8.1'i etkinleştirin:

sudo a2dismod php7.4 php8.0  # if they exist
sudo a2enmod php8.1
sudo systemctl restart apache2

PHP-FPM için, diğer sürümleri durdurun ve PHP 8.1'i başlatın:

sudo systemctl stop php7.4-fpm php8.0-fpm  # if they exist
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm

PHP 8.1'i varsayılan CLI sürümü olarak ayarlayın:

sudo update-alternatives --set php /usr/bin/php8.1

Composer Bellek Sorunları

Composer belleği tüketirse, şu şekilde bir hata görürsünüz:

Fatal error: Allowed memory size of 134217728 bytes exhausted

Artan bellekle Composer'ı çalıştırarak düzeltin:

php -d memory_limit=512M /usr/local/bin/composer install

Veya php.ini dosyasında PHP’nin bellek limitini artırın:

memory_limit = 512M

Composer kurulumu bir hash uyumsuzluğu nedeniyle başarısız olursa:

Hash doğrulaması aşağıdaki durumlarda başarısız olabilir:

  • Kurulum dosyası, indirdiğinizden bu yana güncellendi (en son hash için yeniden indirin)
  • İndirmeniz bozuldu (tekrar indirmeyi deneyin)
  • Dosyaları değiştiren bir proxy’nin arkasındasınız (ağ ayarlarınızı kontrol edin)

Veritabanı Bağlantı Sorunları

PHP uygulamanız MySQL/MariaDB'ye bağlanamıyorsa, şu tür hatalar görebilirsiniz:

SQLSTATE[HY000] [2002] No such file or directory

veya

Access denied for user 'username'@'localhost'

Arıza giderme adımları:

  1. Veritabanı hizmetinin çalışıp çalışmadığını doğrulayın:
sudo systemctl status mysql

Çalışmıyorsa, başlatın:

sudo systemctl start mysql
sudo systemctl enable mysql
  1. PHP’nin MySQL eklentisinin yüklü olduğunu kontrol edin:
php -m | grep mysql

Eksikse, yükleyin:

sudo apt install php8.1-mysql
sudo systemctl restart apache2  # or php8.1-fpm for Nginx
  1. Veritabanı kimlik bilgilerini ve izinlerini doğrulayın. Bağlantıyı test edin:
mysql -u username -p database_name

Eğer bu işe yaramazsa, kontrol edin:

  • Kullanıcı adı ve şifre doğru
  • Veritabanı mevcut: SHOW DATABASES;
  • Kullanıcının izinleri: SHOW GRANTS FOR 'username'@'localhost';

Not: MySQL kurulumu için Ubuntu'da MySQL'in nasıl kurulacağını inceleyin.

PHP Dosyası Çalıştırmak yerine Düz Metin Olarak Görünüyor

PHP dosyanız tarayıcıda düz metin olarak görüntüleniyorsa:

  1. Dosya uzantısını kontrol edin: .php olmalı, .txt veya .html değil

  2. PHP'nin dosyaları işlediğini doğrulayın:

    • Apache: mod_php'nin etkin olduğunu kontrol edin: apache2ctl -M | grep php
    • Nginx: PHP-FPM'in çalıştığını ve socket yolunun doğru olduğunu kontrol edin
  3. Dosya izinlerini kontrol edin: Web sunucusunun dosyayı okuyabilmesi gerekir

  4. Dosyanın PHP kodu içerdiğini doğrulayın: <?php veya <? ile başladığından emin olun

  5. Web sunucusu yapılandırmasını kontrol edin:

    • Apache: Sanal sunucu doğru yapılandırılmamış olabilir
    • Nginx: Konum ~ \.php$ bloğu eksik veya yanlış olabilir

Dosya Yükleme Sorunları

Dosya yüklemeleri başarısız olursa, şu tür hatalar görebilirsiniz:

The uploaded file exceeds the upload_max_filesize directive

Bu php.ini ayarlarını kontrol edin:

upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300

Önemli: post_max_size, upload_max_filesize'den büyük olmalıdır. Eğer upload_max_filesize=100M olarak ayarlarsanız, post_max_size=110M veya daha fazla olarak ayarlayın.

Yüklemeler hâlâ başarısız olursa:

  1. Belirli hata mesajları için hata günlüğünü kontrol edin
  2. Yükleme dizininin var olduğunu ve yazılabilir olduğunu doğrulayın:
sudo chmod 755 /path/to/upload/directory
sudo chown www-data:www-data /path/to/upload/directory
  1. Disk alanını kontrol et: df -h
  2. Formun enctype="multipart/form-data" kullandığını doğrulayın

Yaptığınız php.ini değişikliklerinden sonra web sunucunuzu yeniden başlatın.

SSS

Ubuntu'ya PHP 8.1 nasıl kurarım?

PHP 8.1'i Ubuntu’nun paket yöneticisini kullanarak kurun: sudo apt update && sudo apt install php8.1. PHP 8.1, Ubuntu’nun varsayılan depolarında mevcuttur, bu yüzden ek paket kaynaklarına gerek yoktur.

Geliştirme için hangi PHP eklentileri gereklidir?

Gerekli eklentiler arasında php8.1-cli, php8.1-mysql, php8.1-curl, php8.1-xml, php8.1-mbstring, php8.1-zip, php8.1-gd ve php8.1-bcmath bulunur. Bunlar veritabanı bağlantısı, HTTP istekleri, dize işleme ve görüntü işleme işlemlerini kapsar.

PHP'yi Apache veya Nginx ile nasıl yapılandırabilirim?

Apache için, libapache2-mod-php8.1 paketini kurun ve sudo a2enmod php8.1 ile etkinleştirin. Nginx için, php8.1-fpm paketini kurun ve PHP isteklerini PHP-FPM soketine FastCGI üzerinden iletecek şekilde Nginx'i yapılandırın.

PHP'nin doğru bir şekilde yüklendiğini nasıl doğrulayabilirim?

PHP sürümünü kontrol etmek için php -v komutunu çalıştırın. <?php phpinfo(); ?> ile bir test dosyası oluşturun ve detaylı PHP yapılandırma bilgilerini görmek için web sunucunuz üzerinden erişin.

Bu kurulumla Laravel veya WordPress'i yerel olarak çalıştırabilir miyim?

Evet. Laravel, Composer ve yukarıda belirtilen standart PHP uzantılarını gerektirir. WordPress ise PHP'nin yanı sıra bir MySQL veritabanına ihtiyaç duyar. Her iki framework de Apache veya Nginx yapılandırmaları ile çalışır.

PHP projeleri için Composer'ı nasıl kurarım?

Composer yükleyicisini indirin, hash değerini doğrulayın ve global olarak kurun: sudo php /tmp/composer-setup.php --install-dir=/usr/local/bin --filename=composer. composer --version ile doğrulayın.

Eksik PHP uzantılarını nasıl gideririm?

Yüklü eklentileri php -m ile kontrol edin. Eksik eklentileri sudo apt install php8.1-extension_name ile yükleyin, ardından web sunucunuzu yeniden başlatın.

PHP hata raporlamasını geliştirme ortamı için nasıl yapılandırabilirim?

php.ini dosyasını düzenleyin ve display_errors=On, error_reporting=E_ALL ve log_errors=On olarak ayarlayın. Üretim ortamlarında hata görüntülemesini devre dışı bırakmayı unutmayın.

PHP için Apache ile Nginx arasındaki fark nedir?

Apache, PHP’yi doğrudan işlemek için mod_php kullanır (PHP, Apache’nin sürecine gömülüdür), oysa Nginx, PHP isteklerini işlemek için PHP-FPM (FastCGI Process Manager) gerektirir (PHP ayrı bir servis olarak çalışır). Detaylı karşılaştırma tablosu için yukarıdaki “Apache ve Nginx Arasında Seçim” bölümüne bakabilirsiniz. Her iki yaklaşım da iyi çalışır; seçim yaparken performans ihtiyaçlarınız, aşinalığınız ve mevcut altyapınızı göz önünde bulundurun.

Aynı sistemde birden fazla PHP sürümü kurabilir miyim?

Evet, phpenv veya phpbrew gibi araçlar kullanarak. Ancak, çoğu geliştirme senaryosu için tek bir PHP sürümü yeterlidir. Uygulamaları farklı PHP sürümlerine karşı test etmeniz gerektiğinde sürüm yöneticilerini kullanın.

Sonuç

Artık Ubuntu üzerinde Apache ve Nginx web sunucularını destekleyen, tamamen yapılandırılmış bir PHP 8.1 geliştirme ortamına sahipsiniz. Kurulumunuz gerekli PHP uzantılarını, bağımlılık yönetimi için Composer'ı ve yerel geliştirme için uygun yapılandırmayı içerir.

Bir sonraki projenize başlamadan önce, sözdizimi vurgulama, hata ayıklama ve IntelliSense desteği için PHP uzantılarıyla birlikte VS Code gibi bir Entegre Geliştirme Ortamı (IDE) kurmayı düşünebilirsiniz.

Ortamınız hazır olduğuna göre, PHP geliştirmeyi daha fazla keşfedebilirsiniz:

  • PHP ile Temel Bilgileri Öğrenin: PHP’de Dizelerle Çalışma
  • PHP'de Web API'lerini Kullanma konusunda API'ler oluşturun
  • PHP'de Fonksiyonların Nasıl Kullanılacağını Anlamak
  • Ubuntu'da PostgreSQL Kurulumu ve Kullanımı ile Veritabanları Kurun

Üretim dağıtımları için, PHP uygulamalarınızı GitHub üzerinden doğrudan otomatik ölçeklendirme ve SSL sertifikalarıyla dağıtmak adına Linux-Console.net Uygulama Platformunu kullanmayı düşünebilirsiniz.

Linux-Console.net Topluluğu ile öğrenme sürecine katıldığınız için teşekkürler.