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_functionsveopen_basedirgibi - 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.phpAdı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.phpAdı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.phpYö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 / Kurulum | Tipik 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.bakBu, 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.iniVeya daha gelişmiş düzenleme için vim kullanın:
sudo vim /etc/php/8.2/apache2/php.iniAdı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 EnterESC tuşuna basın, :wq yazın, ardından Enter tuşuna basın4. 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 = 3000Dosya 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.logOturum 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 = OnOPcache (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 = 15. 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 httpdNginx + PHP-FPM
# Restart PHP-FPM (replace 8.2 with your PHP version)
sudo systemctl restart php8.2-fpm
# Restart Nginx
sudo systemctl restart nginxZarif 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-fpmHizmetlerin Çalışıp Çalışmadığını Doğrulayın
sudo systemctl status apache2
sudo systemctl status php8.2-fpm6. 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_sourceDosya Sistemi Erişimini Kısıtlayın
; Limit PHP file access to specific directories
open_basedir = /var/www/html:/tmpPHP Sürüm Bilgisini Gizleyin
; Don't expose PHP version in HTTP headers
expose_php = OffUzak Dosya Eklemeyi Devre Dışı Bırakın
; Prevent PHP from including remote URLs (common attack vector)
allow_url_fopen = Off
allow_url_include = OffOturum 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ı
| Hata | Neden 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 olur | 256M veya 512M gibi makul bir sınır belirleyin |
Üretim ortamında display_errors = On | Hassas dosya yollarını ve veritabanı kimlik bilgilerini kullanıcılara açığa çıkarır | Off olarak ayarlayın ve bunun yerine log_errors = On kullanın |
post_max_size < upload_max_filesize | Sessiz yükleme hatalarına neden olur | Her zaman post_max_size ≥ upload_max_filesize olarak ayarlayın |
Yanlış php.ini dosyasını düzenleme | Değişiklikler web isteklerine uygulanmaz | Web sunucunuz tarafından hangi dosyanın yüklendiğini doğrulamak için phpinfo() kullanın |
| Değişikliklerden sonra sunucuyu yeniden başlatmamak | Eski ayarlar etkin kalır | Düzenledikten sonra her zaman Apache veya PHP-FPM’i yeniden başlatın |
info.php dosyasını sunucuda bırakmak | Tam sunucu yapılandırmasını saldırganlara açığa çıkarır | Kullanımdan sonra hemen silin |
allow_url_include = On ayarlanması | Uzak Dosya Ekleme (RFI) saldırılarını etkinleştirir | Her 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.inidosyaları 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()veyaphp -iile 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.
tasarruf edin