- Konu sahibi
- #1
php.ini, PHP çalışırken kullanılacak genel yapılandırma ayarlarını tutan ana ayar dosyasıdır. Hata gösterimi, bellek sınırı, dosya yükleme boyutu, oturum ayarları, zaman aşımı ve eklenti yapılandırmaları gibi davranışlar bu dosyadaki yönergelerle belirlenebilir. PHP başlatıldığında okunur; bu nedenle dosyada yapılan değişikliklerin etkili olması için kullanılan PHP çalışma ortamını yeniden başlatmak gerekebilir.Örneğin dosyada şu ayar bulunabilir:
INI:
memory_limit = 128M
upload_max_filesize = 20M
post_max_size = 25M
log_errors = On
Bu örnekte bir betiğin ayırabileceği bellek sınırı, yüklenebilecek tek dosyanın üst sınırı, POST verisinin toplam sınırı ve hata kayıtlarının etkinliği ayarlanır. post_max_size değerinin upload_max_filesize değerinden büyük olması gerekir; aksi durumda dosya yükleme beklenenden daha düşük bir sınırla karşılaşabilir.
php.ini nasıl çalışır?
PHP açılırken bir ana yapılandırma dosyası arar ve bulduğu
php.ini dosyasını okur. Kuruluma ve çalıştırma biçimine göre dosyanın konumu değişebilir. Komut satırında çalışan PHP ile web sunucusu üzerinden çalışan PHP aynı kurulumu kullansa bile farklı yapılandırma dosyaları okuyabilir.Ayrıca PHP, ana dosyadan sonra ek
.ini dosyalarını taranan yapılandırma dizininden okuyabilir. Bu dosyalarda aynı yönerge tekrar tanımlanırsa son okunan değer geçerli olabilir. Bu yüzden yalnızca bir php.ini dosyasını değiştirmek, web uygulamasının gerçek çalışma ortamını her zaman değiştirmeyebilir.| Çalışma ortamı | Dosya kontrolü | Değişiklik sonrası |
|---|---|---|
| CLI | php --ini veya php_ini_loaded_file() | Komut yeniden çalıştırılır |
| Apache modülü | Web sunucusunun yüklediği PHP yapılandırması | Web sunucusu yeniden başlatılır |
| CGI veya kalıcı FastCGI/FPM | Web isteğini karşılayan PHP yapılandırması | CGI yeni süreçte okur; kalıcı FPM için yeniden yükleme gerekebilir |
| Ek INI dizini | php --ini ile taranan dosyalar | Çakışan yönergeler denetlenir |
Gerçekten hangi php.ini kullanılıyor?
Önce dosya yolunu tahmin etmek yerine çalışan PHP'nin bildirdiği konumu kontrol edin. Komut satırına erişiminiz varsa şu komutu çalıştırın:
- PHP'nin yapılandırma özetini görüntüleyin:
Bash:php --ini - Çıktıdaki
Loaded Configuration Filesatırını bulun. Burada(none)yazıyorsa anaphp.iniyüklenmiyordur. - Aynı çıktıda
Scan for additional .ini filesveAdditional .ini files parsedsatırlarını da inceleyin. Sorun başka bir.inidosyasındaki ayarın sonradan uygulanmasından kaynaklanabilir. - Değişikliği yalnızca gerçekten kullanılan dosyada yapın ve PHP hizmetini veya web sunucusunu yeniden başlatın.
- Sonucu doğrulamak için ayarı tekrar sorgulayın:
Bash:php -r 'echo ini_get("memory_limit"), PHP_EOL;'
128M. Çıktı eski değeri gösteriyorsa yanlış PHP ortamını kontrol ediyor, değişikliği kaydetmiyor veya başka bir yapılandırma dosyası değeri eziyor olabilirsiniz. Web uygulamasının değeri farklıysa CLI yerine web SAPI'sinin kullandığı PHP yapılandırmasını kontrol edin.ini_get() etkin değeri okumak içindir. ini_set() ise yalnız çalışma anında değiştirilebilen ve yönetici tarafından kilitlenmemiş yönergeleri değiştirebilir; bu iki işlevin yetkisi aynı değildir. Ancak ini_set() ile yapılan değişiklikler genellikle yalnızca mevcut isteği etkiler; kalıcı sunucu ayarı için uygun php.ini ya da izin verilen yerel yapılandırma yöntemi kullanılmalıdır.Sık yapılan hatalar
Yanlış dosyayı düzenlemek: Sunucuda birden fazla PHP sürümü veya SAPI bulunabilir.
php --ini yalnızca CLI ortamını gösterir; web tarafındaki PHP farklı bir dosya kullanabilir.Değişiklikten sonra hizmeti yeniden başlatmamak: Özellikle Apache modülü veya kalıcı PHP işlem yöneticisi kullanan yapılarda eski ayarlar bellekte kalabilir.
Yönergeyi sözdizimi hatalı yazmak: Değerler genellikle
ayar = değer biçimindedir. Noktalı virgül ; ile başlayan satırlar yorumdur ve uygulanmaz.Sınırları tek başına yükseltmek: Dosya yükleme sorunlarında
upload_max_filesize yanında post_max_size, zaman aşımı ve web sunucusunun kendi istek sınırları da birlikte değerlendirilmelidir.Sık sorulan sorular
php.ini dosyası yoksa PHP çalışır mı?
Evet. PHP, ana yapılandırma dosyası yüklenmeden de çalışabilir; ancak varsayılan ayarlar kullanılır ve bazı özel yapılandırmalar uygulanmaz.
php --ini çıktısında yüklenen dosya bulunup bulunmadığını görebilirsiniz.php.ini ile .user.ini aynı şey midir?
Hayır.
.user.ini belirli dizinler için kullanılabilen yerel yapılandırma dosyasıdır ve özellikle CGI/FastCGI ortamlarında geçerlidir. Her PHP yönergesi bu dosyada değiştirilemez; yönergenin izin verilen yapılandırma düzeyi belirleyicidir.php.ini dosyasını web sitesi klasörüne koymak yeterli midir?
Genellikle hayır. PHP'nin ana
php.ini dosyasını nerede arayacağı çalışma biçimine ve kurulum ayarlarına bağlıdır. Web sitesi klasörüne rastgele bir dosya koymak yerine çalışan SAPI'nin kullandığı yolu doğrulamak ve desteklenen yerel yapılandırma yöntemini kullanmak gerekir.