Tüm barındırma hizmetlerinde 15% tasarruf edin

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın: Skills Başlayın
Bölüm
Linux Yönetim

PHP.ini Dosyasını Yapılandırma: Sunucunuzda PHP’yi Optimize Etmek İçin Tam Bir Kılavuz

php.ini dosyası PHP için ana yapılandırma dosyasıdır — neredeyse her modern web uygulamasının omurgası. WordPress, Laravel, Magento veya özel bir uygulama çalıştırıyor olsanız da, php.ini dosyasını doğru şekilde yapılandırmak sunucunuzun performansını dramatik şekilde artırabilir, güvenliği sıkılaştırabilir ve yazılım yığınınızla sorunsuz uyumluluğu sağlayabilir.

Bu kapsamlı rehber sizi bilmeniz gereken her şey konusunda yönlendirir: php.ini dosyasının ne yaptığı, nerede bulunduğu, güvenli bir şekilde nasıl düzenleneceği ve değişikliklerinizin doğru şekilde çalışıp çalışmadığını nasıl doğrulayacağı.

1. php.ini Nedir ve Neden Önemlidir?

php.ini dosyası, PHP her başlatıldığında okuduğu düz metin bir yapılandırma dosyasıdır. PHP’nin çalışma zamanı davranışının neredeyse her yönünü kontrol eden yüzlerce direktif — anahtar-değer çiftleri içerir:

  • Betikler için bellek ayırma
  • Dosya yükleme sınırları ve POST veri boyutları
  • Hata raporlama seviyeleri ve günlüğe kaydetme
  • Oturum yönetimi ayarları
  • Uzantı yükleme (örneğin, PDO, cURL, OPcache)
  • Güvenlik kısıtlamaları disable_functions ve open_basedir gibi
  • Yürütme zaman sınırları kontrolsüz betikleri önlemek için

Bu ayarları doğru şekilde yapılandırmak sadece kolaylık meselesi değildir — uygulamanızın istikrarını, güvenlik duruşunu ve son kullanıcı deneyimini doğrudan etkiler. Yanlış yapılandırılmış PHP ayarları, uygulama hatalarının, başarısız dosya yüklemelerinin, bellek tükenmesi çökmelerinin ve istismar edilebilir güvenlik açıklarının başlıca nedenidir.

PHP uygulamalarınızı bir VPS Hosting planında barındırıyorsanız, php.ini dosyasını özgürce değiştirmek için tam root erişiminiz vardır — PHP ortamınız üzerinde tam kontrol sağlar.

2. php.ini Dosyasının Konumunu Bulma

php.ini dosyasının konumu, işletim sisteminize, PHP sürümünüze ve kullanımdaki Server API’sine (SAPI) bağlı olarak değişir (Apache mod_php, PHP-FPM veya CLI). İşte bunu bulmanın üç güvenilir yöntemi.

Yöntem 1: Komut Satırını Kullanma (En Hızlı Yöntem)

Terminal’inizi açın veya SSH aracılığıyla bağlanın ve şunu çalıştırın:

php --ini

Örnek çıktı:

Configuration File (php.ini) Path: /etc/php/8.2/cli
Loaded Configuration File:         /etc/php/8.2/cli/php.ini
Scan for additional .ini files in: /etc/php/8.2/cli/conf.d
Additional .ini files parsed:      /etc/php/8.2/cli/conf.d/10-opcache.ini, ...

> Önemli: PHP genellikle farklı SAPIs için ayrı php.ini dosyalarına sahiptir. CLI sürümü (/etc/php/8.2/cli/php.ini) komut satırından PHP çalıştırılırken kullanılırken, Apache veya PHP-FPM sürümü (/etc/php/8.2/apache2/php.ini veya /etc/php/8.2/fpm/php.ini) web istekleri için kullanılır. Kullanım durumunuz için her zaman doğru olanı düzenleyin.

Yöntem 2: Tarayıcıda phpinfo() Kullanma

Bu yöntem, web sunucunuzun yüklediği php.ini dosyasının tam olarak hangisi olduğunu ortaya koymaktadır — bu, CLI sürümünden farklı olabilir.

Adım 1: Web kök dizininizde yeni bir dosya oluşturun:

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

Adım 2: Aşağıdaki içeriği ekleyin:

<?php
phpinfo();
?>

Adım 3: Dosyayı kaydedin, ardından tarayıcınızı açın ve şuraya gidin:

http://yourdomain.com/info.php

Adım 4: Çıktının üst kısmında yakın yerde “Loaded Configuration File” satırını arayın. Etkin php.ini dosyasının tam yolunu gösterecektir.

> ⚠️ Güvenlik Uyarısı: info.php dosyasını kullanımdan hemen sonra silin. Bu dosya, saldırganların istismar edebileceği hassas sunucu yapılandırma ayrıntılarını ortaya koymaktadır.

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

Yöntem 3: php -r Kullanma (Hızlı Tek Satır)

php -r "echo php_ini_loaded_file();"

Bu, yüklenen php.ini dosyasının yolunu doğrudan terminalinize yazdırır — dosya oluşturma gerekmez.

Platform’a Göre Yaygın php.ini Konumları

Platform / KurulumTipik php.ini Yolu
Ubuntu/Debian + Apache (PHP 8.2)/etc/php/8.2/apache2/php.ini
Ubuntu/Debian + PHP-FPM (PHP 8.2)/etc/php/8.2/fpm/php.ini
Ubuntu/Debian + CLI (PHP 8.2)/etc/php/8.2/cli/php.ini
CentOS/RHEL + Apache/etc/php.ini
cPanel/WHM/usr/local/lib/php.ini
Windows (XAMPP)C:xamppphpphp.ini
macOS (Homebrew PHP 8.2)/opt/homebrew/etc/php/8.2/php.ini

3. php.ini Dosyasını Düzenleme

Adım 1: Önce Bir Yedek Oluşturun

Herhangi bir değişiklik yapmadan önce, her zaman bir yedek oluşturun:

sudo cp /etc/php/8.2/apache2/php.ini /etc/php/8.2/apache2/php.ini.bak

Bu, bir sorun oluşması durumunda orijinal yapılandırmayı hızlı bir şekilde geri yüklemenizi sağlar.

Adım 2: Dosyayı Bir Metin Editöründe Açın

Başlangıç dostu bir deneyim için nano kullanın:

sudo nano /etc/php/8.2/apache2/php.ini

Veya daha gelişmiş düzenleme için vim kullanın:

sudo vim /etc/php/8.2/apache2/php.ini

Adım 3: Yönergeleri Gezinin ve Düzenleyin

php.ini dosyası büyüktür (genellikle 1.500+ satır). Belirli yönergelere atlamak için editörünüzün arama işlevini kullanın:

    nano içinde: CTRL + W tuşlarına basın, ardından yönerge adını yazın (örneğin, memory_limit)
    vim içinde: / tuşlarına basın, ardından yönerge adını yazın
    
    Adım 4: Kaydedin ve Çıkın
    
    nano: CTRL + X tuşlarına basın, ardından Y, sonra Enter
  • vim: ESC tuşuna basın, :wq yazın, ardından Enter tuşuna basın
  • 4. Temel php.ini Yönergeleri Açıklandı

    İşte bilmeniz ve yapılandırmanız gereken en önemli php.ini yönergelerinin ayrıntılı bir dökümü:

    Bellek ve Kaynak Sınırları

    ; Maximum memory a single PHP script can allocate
    memory_limit = 256M
    
    ; Maximum time (in seconds) a script is allowed to run
    max_execution_time = 60
    
    ; Maximum time PHP will spend parsing request data
    max_input_time = 120
    
    ; Maximum number of input variables (important for complex forms)
    max_input_vars = 3000

    Dosya Yükleme Ayarları

    ; Whether file uploads are permitted
    file_uploads = On
    
    ; Maximum size of an individual uploaded file
    upload_max_filesize = 64M
    
    ; Maximum size of all POST data (must be >= upload_max_filesize)
    post_max_size = 64M
    
    ; Maximum number of files that can be uploaded simultaneously
    max_file_uploads = 20

    > Temel kural: post_max_size her zaman upload_max_filesize değerine eşit veya daha büyük olmalıdır. Eğer post_max_size daha küçükse, yüklemeler sessizce başarısız olur.

    Hata Raporlama ve Günlüğe Kaydetme

    ; ---- DEVELOPMENT ENVIRONMENT ----
    ; Show all errors on screen (never use in production)
    error_reporting = E_ALL
    display_errors = On
    display_startup_errors = On
    
    ; ---- PRODUCTION ENVIRONMENT ----
    ; Log errors to a file, never display them to users
    error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
    display_errors = Off
    display_startup_errors = Off
    log_errors = On
    error_log = /var/log/php/error.log

    Oturum Yönetimi

    ; Where session data is stored on the server
    session.save_path = "/var/lib/php/sessions"
    
    ; Session cookie lifetime in seconds (0 = until browser closes)
    session.cookie_lifetime = 0
    
    ; Prevent JavaScript from accessing session cookies (XSS protection)
    session.cookie_httponly = On
    
    ; Only send session cookies over HTTPS
    session.cookie_secure = On
    
    ; Strict session ID mode (prevents session fixation attacks)
    session.use_strict_mode = On

    OPcache (Performans Hızlandırıcı)

    OPcache, önceden derlenmiş betik bayt kodunu paylaşılan bellekte depolayarak PHP performansını önemli ölçüde iyileştirir:

    opcache.enable = 1
    opcache.memory_consumption = 128
    opcache.interned_strings_buffer = 8
    opcache.max_accelerated_files = 10000
    opcache.revalidate_freq = 60
    opcache.fast_shutdown = 1

    5. Web Sunucunuzu Yeniden Başlatma

    php.ini değişiklikleri, ilgili hizmeti yeniden başlatana kadar geçerli olmaz. Kurulumunuz için uygun komutu kullanın:

    Apache (mod_php)

    sudo systemctl restart apache2
    # or on CentOS/RHEL:
    sudo systemctl restart httpd

    Nginx + PHP-FPM

    # Restart PHP-FPM (replace 8.2 with your PHP version)
    sudo systemctl restart php8.2-fpm
    
    # Restart Nginx
    sudo systemctl restart nginx

    Zarif Yeniden Yükleme (Sıfır Kapalı Kalma Süresi)

    Üretim sunucuları için, etkin bağlantıları kesmekten kaçınmak için zarif bir yeniden yükleme kullanın:

    # Apache graceful reload
    sudo systemctl reload apache2
    
    # PHP-FPM graceful reload
    sudo systemctl reload php8.2-fpm

    Hizmetlerin Çalışıp Çalışmadığını Doğrulayın

    sudo systemctl status apache2
    sudo systemctl status php8.2-fpm

    6. Değişikliklerinizi Doğrulama

    Sunucunuzu yeniden başlattıktan sonra, yeni ayarlarınızın etkin olduğunu aşağıdaki yöntemlerden birini kullanarak doğrulayın:

    Yöntem 1: Komut Satırı Grep

    # Check memory_limit
    php -i | grep memory_limit
    
    # Check upload_max_filesize
    php -i | grep upload_max_filesize
    
    # Check multiple values at once
    php -i | grep -E 'memory_limit|upload_max_filesize|post_max_size|max_execution_time'

    Yöntem 2: phpinfo() Sayfası

    info.php dosyasını geçici olarak yeniden oluşturun (daha sonra silmeyi unutmayın) ve değiştirilen yönergelerinizi arayın. Değiştirilen değerler “Local Value” ve “Master Value” sütunlarında görünecektir.

    Yöntem 3: PHP Tek Satırlık Komut

    php -r "echo ini_get('memory_limit');"

    7. Gelişmiş php.ini Optimizasyon İpuçları

    .htaccess ile php.ini’yi Geçersiz Kılma (Yalnızca Apache)

    Paylaşılan hosting üzerindeyseniz veya root erişiminiz yoksa, belirli php.ini ayarlarını .htaccess aracılığıyla geçersiz kılabilirsiniz:

    php_value memory_limit 256M
    php_value upload_max_filesize 64M
    php_value post_max_size 64M
    php_value max_execution_time 120

    > Not: Bu, yalnızca AllowOverride etkinleştirilmişse ve hosting sağlayıcı PHP yönerge geçersiz kılmalarına izin veriyorsa çalışır.

    PHP Kodunda ini_set() Kullanma

    Uygulamaya özgü ayarlar için, PHP betiklerinizde çalışma zamanında php.ini değerlerini geçersiz kılabilirsiniz:

    <?php
    ini_set('memory_limit', '512M');
    ini_set('max_execution_time', '300');
    ?>

    Dizin Başına php.ini Dosyaları (PHP-FPM)

    PHP-FPM ile, /etc/php/8.2/fpm/pool.d/ içindeki havuz dosyalarını yapılandırarak farklı sanal ana bilgisayarlara veya dizinlere farklı php.ini ayarları uygulayabilirsiniz. Bu, farklı gereksinimlere sahip birden fazla uygulamayı barındırırken özellikle yararlıdır.

    Birden fazla PHP uygulamasını yönetiyorsanız, cPanel ile VPS, yapılandırma dosyalarını manuel olarak düzenlemeden grafik arayüz aracılığıyla etki alanı başına PHP ayarlarını yönetmeyi önemli ölçüde kolaylaştırır.

    8. PHP.ini Aracılığıyla Güvenlik Sertleştirmesi

    php.ini öğesini düzgün şekilde yapılandırmak, PHP ortamınızı yaygın saldırılara karşı sertleştirmenin en etkili yollarından biridir.

    Tehlikeli İşlevleri Devre Dışı Bırakın

    ; Prevent execution of system commands from PHP scripts
    disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source

    Dosya Sistemi Erişimini Kısıtlayın

    ; Limit PHP file access to specific directories
    open_basedir = /var/www/html:/tmp

    PHP Sürüm Bilgisini Gizleyin

    ; Don't expose PHP version in HTTP headers
    expose_php = Off

    Uzak Dosya Eklemeyi Devre Dışı Bırakın

    ; Prevent PHP from including remote URLs (common attack vector)
    allow_url_fopen = Off
    allow_url_include = Off

    Oturum Güvenliğini Sertleştirin

    session.cookie_httponly = On
    session.cookie_secure = On
    session.use_strict_mode = On
    session.cookie_samesite = "Strict"

    > Pro İpucu: Bir e-ticaret sitesi çalıştırıyorsanız veya hassas kullanıcı verileriyle uğraşıyorsanız, sertleştirilmiş php.ini öğesini geçerli bir SSL Sertifikası ile eşleştirerek aktarım sırasında tüm verileri şifreleyin. HTTPS, session.cookie_secure = On öğesinin düzgün şekilde çalışması için zorunludur.

    9. Kaçınılması Gereken Yaygın php.ini Hataları

    HataNeden Sorun OlurÇözüm
    Üretim ortamında memory_limit = -1 ayarlanmasıKomut dosyalarının sınırsız RAM tüketmesine izin vererek sunucu çökmelerine neden olur256M veya 512M gibi makul bir sınır belirleyin
    Üretim ortamında display_errors = OnHassas dosya yollarını ve veritabanı kimlik bilgilerini kullanıcılara açığa çıkarırOff olarak ayarlayın ve bunun yerine log_errors = On kullanın
    post_max_size < upload_max_filesizeSessiz yükleme hatalarına neden olurHer zaman post_max_sizeupload_max_filesize olarak ayarlayın
    Yanlış php.ini dosyasını düzenlemeDeğişiklikler web isteklerine uygulanmazWeb sunucunuz tarafından hangi dosyanın yüklendiğini doğrulamak için phpinfo() kullanın
    Değişikliklerden sonra sunucuyu yeniden başlatmamakEski ayarlar etkin kalırDüzenledikten sonra her zaman Apache veya PHP-FPM’i yeniden başlatın
    info.php dosyasını sunucuda bırakmakTam sunucu yapılandırmasını saldırganlara açığa çıkarırKullanımdan sonra hemen silin
    allow_url_include = On ayarlanmasıUzak Dosya Ekleme (RFI) saldırılarını etkinleştirirHer zaman bunu Off tutun

    10. Sonuç

    php.ini yapılandırmasında uzmanlaşmak, herhangi bir sistem yöneticisi veya web geliştirici için temel bir beceridir. Doğru ayarlar, yavaş ve savunmasız bir sunucu ile hızlı, güvenli, üretime hazır bir ortam arasındaki farkı oluşturabilir.

    Temel çıkarımları özetlemek gerekirse:

    • Her zaman yedek alın değişiklik yapmadan önce php.ini
    • Doğru dosyayı belirleyin — CLI ve web sunucusu SAPI’leri genellikle farklı php.ini dosyaları kullanır
    • Kaynak sınırlarını ayarlayın (memory_limit, max_execution_time, upload_max_filesize) uygulamanızın ihtiyaçlarına uyacak şekilde
    • Güvenliği güçlendirin tehlikeli işlevleri devre dışı bırakarak, sürüm bilgisini gizleyerek ve dosya erişimini kısıtlayarak
    • OPcache’i etkinleştirin önemli performans kazançları için
    • Üretimde hataları asla görüntülemeyin — bunun yerine günlüğe kaydedin
    • Her değişiklikten sonra web sunucunuzu yeniden başlatın ve phpinfo() veya php -i ile doğrulayın

    Seçtiğiniz barındırma ortamı, PHP yapılandırması üzerinde ne kadar kontrol sahibi olacağınız konusunda da önemli bir rol oynar. AlexHost’tan Dedicated Servers ile sunucunuzun PHP yapılandırmasına tam ve sınırsız erişim elde edersiniz — yüksek trafikli ve karmaşık gereksinimleri olan uygulamalar için idealdir. Daha küçük projeler veya yeni başlayan takımlar için, Shared Web Hosting planları, birçok PHP ayarının sizin için önceden optimize edildiği yönetilen bir ortam sağlar.

    Uygulamanız geliştikçe, PHP sürümleri güncellenirken ve trafik düzenleriniz değişirken php.ini yapılandırmanızı düzenli olarak gözden geçirin. İyi ayarlanmış bir PHP ortamı tek seferlik bir kurulum değildir — performans, güvenilirlik ve güvenlikte temettü ödeyen devam eden bir uygulamadır.