Temel php.ini yönergelerinin tanımları

Bu liste PHP kurulumunuzu yapılandırmakta kullanacağınız yerleşik php.ini yönergelerini içerir. Eklentilerle ilgili yönergeler eklentinin kendi belgelerinde listelenmiş ve açıklanmışladır. Örneğin, oturum yönergeleri ile ilgili bilgileri oturumlar sayfasında bulabilirsiniz.

Bilginize:

Burada listelenen öntanımlılar php.ini yüklenirken kullanılır; değerler kullanıcı içindir ve geliştirilmekte olan php.ini farklı olabilir.

Dil Seçenekleri

Dil ve Çeşitli Yapılandırma Seçenekleri
İsim Öntanımlı Değişlik Yeri Sürüm Bilgisi
short_open_tag "1" PHP_INI_PERDIR  
precision "14" PHP_INI_ALL  
serialize_precision "-1" PHP_INI_ALL PHP 7.1.0 öncesinde öntanımlı değer 17 idi.
disable_functions "" sadece >PHP_INI_SYSTEM  
disable_classes "" sadece php.ini  
exit_on_timeout "" PHP_INI_ALL  
expose_php "1" sadece php.ini  
hard_timeout "2" PHP_INI_SYSTEM PHP 7.1.0 ve sonrasında mevcuttur.
zend.exception_ignore_args "0" PHP_INI_ALL PHP 7.4.0 ve sonrasında mevcuttur.
zend.multibyte "0" PHP_INI_ALL  
zend.script_encoding NULL PHP_INI_ALL  
zend.detect_unicode NULL PHP_INI_ALL  
zend.signal_check "0" PHP_INI_SYSTEM  
zend.assertions "1" Kısıtlamalarla PHP_INI_ALL  

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

short_open_tag bool

PHP'nin başlangıç etiketinin kısa gösteriminin kullanımına izin verilip verilmediğini söyler. PHP'yi XML içinde kullanmak isterseniz <?xml ?> satırını kullanmak için bu kısa etiket kullanımını iptal edip uzun etiket (<?php ?>) kullanabilirsiniz. Aksi takdirde satırı <?php echo '<?xml version="1.0"?>';?> şeklinde PHP'ye yazdırabilirsiniz.

Bilginize:

Bu yönerge, sürekli kullanılan <?= kısaltmasını etkilemez.

precision int
Gerçek sayılarda ondalık noktadan sonraki anlamlı hane sayısı. -1 böyle sayıların yuvarlatılmasında geliştirilmiş bir algoritmanın kulllanılacağı anlamına gelir.
serialize_precision int
Gerçek sayılar dizgileştirilirken saklanan ondalık noktadan sonraki anlamlı hane sayısı. -1 böyle sayıların yuvarlatılmasında geliştirilmiş bir algoritmanın kulllanılacağı anlamına gelir.
expose_php bool

PHP'nin kurulu olduğu sunucuda sürüm bilgisini HTTP başlığına eklemek suretiyle (örn: X-Powered-By: PHP/5.3.7) kendini karşıya gösterip göstermeyeceğini belirler.

disable_functions string
Bu yönerge belli işlevleri iptal etmeye yarar. İşlev isimleri aralarına virgül konarak belirtilir.

Bu yönerge ile sadece dahili işlevler iptal edilebilir. Kullanıcı tarafından tanımlanmış işlevler etkilenmez.

Bu yönerge sadece php.ini içinde atanabilir. Örneğin httpd.conf dosyasında tanımlayamazsınız.
disable_classes string
Bu yönerge belli sınıfları iptal etmeye yarar. Sınıf isimleri aralarına virgül konarak belirtilir. Bu yönerge sadece php.ini içinde atanabilir. Örneğin httpd.conf dosyasında tanımlayamazsınız.
hard_timeout int

max_execution_time yönergesinde atanan zaman aşımına ulaşıldığında PHP özkaynaklarından nazikçe kurtulacaktır. Bu olurken bir şey takılırsa, katı zaman aşımı ayarlanan saniye miktarı kadar ilerleyecektir. Katı zaman aşımına ulaşıldığında PHP hoyratça çıkış yapar. Bu yönergeye 0 atanırsa katı zaman aşımı asla devreye girmez.

PHP katı zaman aşımında durursa ölümcül hata çıktılanır:

Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unknown on line 0

zend.assertions int
1 atandığında, Kararlılık denetimleri kodu üretilir ve çalıştırılır (geliştirme kipi). 0 atandığında kod yine üretilir fakat çalıştırılmaz. -1 atandığında ise kod üretilmez ve bu atama kararlılık denetimlerinin maliyetini sıfırlar (üretim kipi).

Bilginize:

Bir süreç üretim kipinde başlatılmışsa, kararlılık denetimleri kodu üretilmediğinden zend.assertions çalışma anında değiştirilemez.

Bir süreç geliştirme kipinde başlatılmışsa, zend.assertions'a çalışma anında -1 atanamaz.

zend.exception_ignore_args bool

İstisnalardan oluşturulan yığın izlerindeki bağımsız değişkenleri hariç tutar.

zend.multibyte bool

Çokbaytlı kodlanmış kaynak dosyalarının çözümlenmesini etkin kılar. Çokbaytlı dizge verisi içinde özel karakterler içeren SJIS, BIG5, vs. gibi karakter kodlamalarını kullanmak için zend.multibyte etkin olmalıdır. UTF-8, EUC gibi ISO-8859-1 uyumlu kodlamalar bu seçeneğin etkinleştirilmesini gerektirmez.

zend.multibyte seçeneğinin etkin olabilmesi için mbstring eklentisi kullanımda (kurulu) olmalıdır.

zend.script_encoding string

Betiğin tepesinde declare(encoding=...) yönergesi görünmediği takdirde bu değer kullanılır. ISO-8859-1 ve UTF-8 ile uyumlu olmayan kodlamalar için zend.multibyte ve zend.script_encoding seçeneklerinin ikisi de etkin olmalıdır.

Kod dizgeleri, mb_convert_encoding() çağrılmış gibi zend.script_enconding'den mbstring.internal_encoding'e çevrilir.

zend.detect_unicode bool

BOM'a (Bayt sıralama imi) ve dosyanın çokbaytlı karakterler içerip içermediğine bakılır. Bu saptama __halt_compiler() çalıştırılmadan önce yapılır. Sadece Zend Multibyte kipinde kullanılabilir.

zend.signal_check bool

Sistemin kapanması sırasında sinyal eylemcilerinin yerleştirilip yerleştirilmediğini sınamak için.

detect_unicode bool

Bayt sırası imine ve dosyanın geçerli çok baytlı karakterleri içerip içermediğine bakar. Bu işlem __halt_compiler() işleme sokulmadan önce yapılır. Sadece Çokbaytlı Zend kipinde kullanılabilir.

exit_on_timeout bool

Bu Apache1 mod_php modülüne özgü bir yönergedir ve PHP icrası sırasında bir zaman aşımı oluştığu takdirde PHP'yi çalıştıran Apache lat sürecinin çıkmasını sağlar. Böyle bir zaman aşımı Apache1 içinde bazı eklentileri kararsız durumda bırakabilen dahili bir longjmp() çağrısına sebep olur. Süreci sonlandırmak suretiyle takılı kalmış kilitler ve bellek temizlenebilir.

Özkaynak Sınırları

Özkaynak Sınırları
İsim Öntanımlı Değişlik Yeri Sürüm Bilgisi
memory_limit "128M" PHP_INI_ALL  

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

memory_limit int

Bir betiğin ayırmasına izin verilebilecek belleğin azami miktarını belirler. Bu yönerge, yetersiz betiklerin bir sunucu üzerinde mevcut belleğin tamamını tüketmesini önlemeye yardımcı olur. Belleği sınırlamak istemiyorsanız yönergeye -1 değeri atayın.

int türünde bir değer kullanıldığında değer baytların sayısıdır. Büyük bayt değerleri için kullanılabilecek birimlerin gösterimleri hakkında bilgiyi bu SSS altında bulabilirsiniz.

Ayrıca bakınız: max_execution_time.

Başarım Arttırma

Başarım Arttırma
İsim Öntanımlı Değişlik Yeri Sürüm Bilgisi
realpath_cache_size "4M" PHP_INI_SYSTEM PHP 7.0.16 ve 7.1.2 öncesinde öntanımlı değer "16K" idi.
realpath_cache_ttl "120" PHP_INI_SYSTEM  

Bilginize:

open_basedir kullanımı realpath önbelleğini iptal eder.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

realpath_cache_size int

PHP tarafından kullanılan realpath önbelleğinin boyunu belirler. PHP'nin çok sayıda dosya açtığı sistemlerde gerçekleştirilen dosya işlemlerinin miktarına bağlı olarak bu değerin arttırılması gerekir.

Boyut saklanan dosyanın yol dizgesinin bayt olarak uzunluğunu artı, arabellek girdisiyle ilişkili verinin miktarını gösterir. Yani, arabellekte daha uzun dosya yolu saklamak için arabellek boyutunu arttırmanız gerekir. Bu değer arabelleklenebilen farklı yolların sayısını doğrudan saptayabilmeyi sağlamaz.

Arabellek girdisi için gereken boyut sistemden sisteme değişir.

realpath_cache_ttl int

Belli bir dosya veya dizin için realpath bilgisini önbellekte tutma süresi (saniye cinsinden). Dosyaların nadiren değiştiği sistemlerde bu değer arttırılabilir.

Veri İşleme

Veri İşleme Seçenekleri
İsim Öntanımlı Değişlik Yeri Sürüm Bilgisi
arg_separator.output "&" PHP_INI_ALL  
arg_separator.input "&" PHP_INI_PERDIR  
variables_order "EGPCS" PHP_INI_PERDIR  
request_order "" PHP_INI_SYSTEM|PHP_INI_PERDIR  
auto_globals_jit "1" PHP_INI_PERDIR  
register_argc_argv "1" PHP_INI_PERDIR  
enable_post_data_reading "1" PHP_INI_PERDIR PHP 5.4.0 ve sonrasında kullanılabilir.
post_max_size "8M" PHP_INI_PERDIR  
auto_prepend_file NULL PHP_INI_PERDIR  
auto_append_file NULL PHP_INI_PERDIR  
default_mimetype "text/html" PHP_INI_ALL  
default_charset "" PHP_INI_ALL  
input_encoding "" PHP_INI_ALL  
output_encoding "" PHP_INI_ALL  
internal_encoding "" PHP_INI_ALL  

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

arg_separator.output string

PHP'de üretilen URL'leri değiştirgelerine ayırmak için kullanılan ayraç.

arg_separator.input string

Girdi olarak verilen URL'leri değişkenlere çözümlemek için PHP tarafından kullanılan ayraçların listesi.

Bilginize:

Bu yönergede belirtilen her karakter bir ayraç olarak ele alınır!

variables_order string

EGPCS (Environment, Get, Post, Cookie ve Server) değişken çözümleme sırası belirtilir. Örneğin, değer olarak "SP" belirtilirse, PHP, $_SERVER ve $_POST süper küresellerini oluşturacak ama $_ENV, $_GET ve $_COOKIE süper küresellerini oluşturmayacaktır. Değer olarak "" atanırsa hiçbir süper küresel atanmayacaktır.

Uyarı

CGI ve FastCGI SAPI'lerinin her ikisi için de $_SERVER dizisi ortamdaki değerlerle oluşturulur; S, E'nin yönergedeki yerinden bağımsız olarak daima ES'e eşdeğerdir.

Bilginize:

Ayrıca, $_REQUEST dizisinin içeriği ve sırası da bu yönergeden etkilenir.

request_order string

GET, POST ve Cookie değişkenlerinin $_REQUEST dizisinin içindeki sırasını belirler. Yazma işlemi soldan sağa doğru ilerleyerek yeni değerler eskileri geçersiz kılar.

Bu yönerge atanmazsa $_REQUEST dizisinin içeriği variables_order yönergesiyle belirlenir.

Güvenlik kaygılarından dolayı dağıtımla gelen öntanımlı php.ini dosyaları çerezler için 'C' içermez.

auto_globals_jit bool

Etkinleştirildiğinde, SERVER REQUEST ve ENV değişkenleri betik çalıştırıldığı zaman değil, değişkenler kullanıldığı anda (tam zamanında) oluşturulur. Bu değişkenler bir betik içinde kullanılmamışlarsa bu yönergenin varlığı bir başarım kazancıyla sonuçlanacaktır.

Uyarı

SERVER REQUEST ve ENV değişkenlerinin kullanımı derleme sırasında sınanır, dolayısıyla örneğin değişken değişkenler üzerinden kullanılmaları ilklendirilmelerine sebep olmayacaktır.

register_argc_argv bool
PHP'nin, (GET bilgisini içeren) argv ve argc değişkenlerini bildirip bildirmeyeceğini belirler. Komut satırı bölümüne de bakınız. Bu yönerge PHP 4.0.0'dan itibaren kullanılabilir hale geldi ve daha önce değeri daima "on" idi.
enable_post_data_reading bool
Bu seçeneğin iptali $_POST ve $_FILES verilerinin toplanmamasına sebep olur. Post verisini okumanın tek yolu php://input akım sarmalayıcısı kullanmak olacaktır. POST verisini işlerken bellek tasarrufu yapmak veya isteklere vekalet etmek için kullanışlıdır.
post_max_size int
POST verisinin azami boyutunu belirler. Bu ayar ayrıca karşıya dosya yükleme işlemlerini de etkiler. Büyük dosyaları karşıya yüklemek için bu değerin upload_max_filesize değerinden büyük olması gerekir. Genelde, memory_limit değerinin post_max_size değerinden büyük olması gerekir. int türünde bir değer kullanıldığında değer baytların sayısıdır. Büyük bayt değerleri için kullanılabilecek birimlerin gösterimleri hakkında bilgiyi bu SSS altında bulabilirsiniz. Eğer POST verisinin boyu post_max_size değerinden büyükse $_POST ve $_FILES süper küreselleri boş olur. Bu, çeşitli yollarla izlenebilir; örneğin, veriyi işleyen betiğe $_GET değişkenini <form action="edit.php?processed=1"> ile aktararak ve ardından $_GET['processed'] atanmış mı diye sınanarak bu yapılabilir.

Bilginize:

PHP bayt değerleri için K (kilo), M (mega) ve G (giga) birim kısaltmalarını kabul eder. Bunları kullanırsanız PHP dönüşümü otomatik olarak yapacaktır. 32 bitlik sürümleri kullanıyorsanız, 32 bitlik işaretli tamsayı sınırını aşmamaya dikkat edin, aksi takdirde betiğiniz başarısız olacaktır.

post_max_size ile ilgili değişiklikler
Sürüm: Açıklama
5.3.4 İçerik türü PHP'de tanımlı değilse veya içerik türü application/x-www-form-urlencoded ise post_max_size = 0 ataması sınırlamayı iptal etmez.
5.3.2 , 5.2.12 post_max_size = 0 ataması POST boyutunu sınırsız yapar.
auto_prepend_file string

Otomatik olarak ana betikten önce çözümlenecek dosyanın ismi belirtilir. Dosya require ile belirtilmiş gibi ana dosyanın başına eklenir; dolayısıyla dosyayı bulmak için include_path kullanılır.

none özel değeri başa dosya eklemeyi iptal eder.

auto_append_file string

Otomatik olarak ana betikten sonra çözümlenecek dosyanın ismi belirtilir. Dosya require ile belirtilmiş gibi ana dosyanın sonuna eklenir; dolayısıyla dosyayı bulmak için include_path kullanılır.

none özel değeri sona dosya eklemeyi iptal eder.

Bilginize: Eğer betik exit() ile sonlanırsa otomatik ekleme gerçekleşmez.

default_mimetype string

Öntanımlı MIME türü. Öntanımlı olarak PHP ortam türünü Content-Type başlığını kullanarak gönderir. Ortam türünün gönderilmesini engellemek için değişkene hiçbir şey atanmamalıdır.

PHP'nin yerleşik öntanımlı ortam türü text/html olarak atanmıştır.

default_charset string

"UTF-8" öntanımlı değerdir ve eğer encoding kullanılmamışsa bu değer htmlentities(), html_entity_decode() ve htmlspecialchars() için öntanımlı karakter kodlaması olarak kullanılır. Ayrıca: iconv.input_encoding, iconv.output_encoding ve iconv.internal_encoding yapılandırma seçeneklerine değer atanmamışsa default_charset iconv işlevleri için de öntanımlı karakter kümesi olur. mbstring.http_input, mbstring.http_output ve mbstring.internal_encoding yapılandırma seçeneklerine değer atanmamışsa default_charset mbstring işlevleri için de öntanımlı karakter kümesi olur.

PHP tarafından gönderilen Content-Type başlığı header() çağrısı ile değiştirilmedikçe PHP'nin tüm sürümlerinde başlıktaki karakter kümesi değeri bu değer olacaktır.

default_charset seçeneğine boş değer atanması önerilmez.

input_encoding string

Bu değer mbstring ve iconv gibi çokbayt modülleri için kullanılır. Öntanımlı değer boş dizgedir.

output_encoding string

Bu değer mbstring ve iconv gibi çokbayt modülleri için kullanılır. Öntanımlı değer boş dizgedir.

internal_encoding string

Bu değer mbstring ve iconv gibi çokbayt modülleri için kullanılır. Öntanımlı değer boş dizgedir ve böyle bir durumda default_charset kullanılır.

Ayrıca bakınız: magic_quotes_gpc, magic_quotes_runtime ve magic_quotes_sybase.

Dosya Yolları ve Dizinler

Dosya Yolları ve Dizinler için Yapılandırma seçenekleri
İsim Öntanımlı Değişlik Yeri Sürüm Bilgisi
include_path ".;/path/to/php/pear" PHP_INI_ALL  
open_basedir NULL PHP_INI_ALL  
doc_root NULL PHP_INI_SYSTEM  
user_dir NULL PHP_INI_SYSTEM  
user_ini.cache_ttl "300" PHP_INI_SYSTEM  
user_ini.filename ".user.ini" PHP_INI_SYSTEM  
extension_dir "/path/to/php" PHP_INI_SYSTEM  
extension NULL sadece php.ini  
zend_extension NULL sadece php.ini  
cgi.check_shebang_line "1" PHP_INI_SYSTEM  
cgi.discard_path "0" PHP_INI_SYSTEM  
cgi.fix_pathinfo "1" PHP_INI_SYSTEM  
cgi.force_redirect "1" PHP_INI_SYSTEM  
cgi.nph "0" PHP_INI_SYSTEM  
cgi.redirect_status_env NULL PHP_INI_SYSTEM  
cgi.rfc2616_headers "0" PHP_INI_ALL  
fastcgi.impersonate "0" PHP_INI_SYSTEM  
fastcgi.logging "1" PHP_INI_SYSTEM  

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

include_path string

require, include, fopen(), file(), readfile() ve file_get_contents() işlevleri için dosyaların aranacağı dizinler belirtilir. Dizgenin biçemi sistemin PATH ortam değişkenindeki gibidir: Dizinler Unix'te iki nokta imleriyle, Windows'ta ise noktalı virgüllerle ayrılır.

PHP, dahil edilecek dosyaları include_path içindeki yollarda her dosya için tek tek sırayla arar. Önce ilk yola bakar, sonra diğerine, böyle gider. Ya dosyayı bulur ya da bir E_WARNING veya bir E_ERROR ile döner. Bu yönergenin değerini betiğinizin çalışması sırasında set_include_path() işleviyle değiştirebilirsiniz.

Örnek 1 - Unix include_path

include_path=".:/php/includes"

Örnek 2 - Windows include_path

include_path=".;c:\php\includes"

Dosya yolu olarak . belirtilmesi çalışılan dizinin arama yollarına dahil edilmesini sağlar. Ancak, dahil edilen her dosyayı PHP'nin daima denetlemesini isterseniz include './dosya' biçemini kullanmak daha iyidir.

Bilginize:

ENV değişkenlerine .ini dosyalarında daima erişilebilmektedir. Dolayısıyla, ${LOGIN} ve ${USER}.kullanarak home dizinine erişmek mümkündür.

Ortam değişkenleri sunucunun çalıştığı sisteme bağlı olarak değişiklik gösterebilir.

Örnek 3 - include_path değişkeninde Unix ${USER} ortam değişkeni kullanımı

include_path = ".:${USER}/pear/php"

open_basedir string

PHP tarafından açılmış dosyaları, dosyanın kendisi de dahil olmak üzere belirtilen dizin ağacı ile sınırlar. Bu yönerge güvenli kipin etkin olup olmamasından etkilenmez.

Örneğin bir betik dosya sistemine erişmeye çalışırsa, örneğin fopen() veya gzopen() ile bir dosya açmaya çalışırsa dosyanın yerine bakılır. Dosya belirtilen dizin ağacının dışındaysa PHP bu dosyayı açmayı reddeder. Tüm sembolik bağlar çözümlenir, dolayısıyla bir sembolik bağ kullanarak bu kısıtlamayı aşmak mümkün değildir. Eğer dosya mevcut değilse sembolik bağ çözümlenemeyeceğinden dosyanın kendisi open_basedir ile karşılaştırılır.

open_basedir dosya sistemi işlevlerinden daha fazlasını etkileyebilir; örneğin, MySQL mysqlnd sürücülerini kullanacak şekilde yapılandırılmışsa LOAD DATA INFILE bu seçenekten etkilenir. PHP'nin gelişkin işlevselliğinin çoğu open_basedir'ı böyle kullanır.

Betiğin çalışma dizinini belirten nokta (.) özel değeri temel dizini belirtmek için kullanılabilir. Bunula birlikte, çalışma dizini chdir() ile kolayca değiştirilebilceğinden bunu yapmak biraz tehlikelidir.

httpd.conf içinde (örneğin bazı sanal konaklarda), open_basedir yönergesi diğer "php_admin_value open_basedir none" gibi yapılandırma yönergelerinde yapıldığı gibi kapatılabilir.

Windows altında, dizinleri aralarına noktalı virgül konarak belirtilir. Diğer tüm sistemlerde ikinokta imi kullanılır. PHP'nin Apache modülü olarak kullanıldığı durumlarda open_basedir ile belirtilen yollar artık üst dizinlerinden otomatik olarak miras alınmaktadır.

open_basedir ile belirtilen kısıt bir önek değil bir dizin ismidir.

Öntanımlı olarak bütün dosyaların açılmasına izin verilir.

Bilginize:

open_basedir çalışma anında daha da kısıtlayıcı hale getirilebilmektedir. Örneğin, php.ini içinde open_basedir yönergesinde /siteler/ dizini belirtilmişse çalışma anında ini_set() işlevi kullanılarak kısıtlama /siteler/tmp/ ile daha da daraltılabilir. Çeşitli dizinleri listelerken, işletim sisteminin kısıtlarına aldırmaksızın bir ayraç olarak PATH_SEPARATOR sabiti kullanılabilir.

Bilginize:

open_basedir kullanımırealpath_cache_size seçeneğine 0 atar, dolayısıyla realpath önbelleği iptal olur.

doc_root string

PHP'nin sunucu üzerindeki kök dizini. Sadece boş olmadığı takdirde kullanılır. PHP, FORCE_REDIRECT ile derlenmişse, PHP'yi HTTP sunucusu altında bir CGI olarak çalıştırıyorsanız doc_root yönergesini atamanız gerekir (IIS hariç). Bunun yerine aşağıdaki cgi.force_redirect yapılandırması da kullanılabilir.

user_ini.cache_ttl int

user_ini.filename string

user_dir string

Kullanıcının ev dizininde PHP dosyalarının bulunduğu ana dizin. Örnek: public_html.

extension_dir string

PHP'nin dinamik olarak yüklenebilen eklentileri arayacağı dizin. Ayrıca bakınız: enable_dl ve dl().

extension string

PHP başlatılırken dinamik olarak yüklenecek eklentiler.

zend_extension string

PHP başlatılırken yüklenecek dinamik olarak yüklenebilen Zend eklentisinin ismi (örneğin XDebug).

cgi.check_shebang_line bool

CGI PHP'nin betiklerin başında #! ile başlayan satırın varlığına bakıp bakmayacağını belirler. Betik hem PHP CGI hem de tek başına bir betik olarak çalışabiliyorsa bu satır gerekebilir. PHP, CGI kipinde çalışırken bu satırı atlar, bu yönerge "1" olsa bile satırın içeriği yok sayılır.

cgi.discard_path bool

Etkinse, the PHP CGI ikili site ağacının dışına güvenle yerleştirilebilir ve .htaccess güvenliğini kimse atlatamaz.

cgi.fix_pathinfo bool

CGI için gerçek PATH_INFO/PATH_TRANSLATED desteği sağlar. PHP'nin önceki davranışı SCRIPT_FILENAME'e PATH_TRANSLATED atamak ve PATH_INFO'yu kaale almamaktı. PATH_INFO hakkında daha ayrıntılı bilgi edinmek için CGI belirtimine bakınız. Bu yönergeye 1 atamakla PHP CGI'nin CGICGI belirtimine uygun olarak dosya arama yollarını düzeltmesi sağlanmış olur. Sıfır atandığında ise PHP'nin önceki davranışı etkin olur. Öntanımlı değer sıfırdır. Betiklerinizi PATH_TRANSLATED değil SCRIPT_FILENAME kullanması için düzeltmelisiniz.

cgi.force_redirect bool

PHP'nin çoğu HTTP sunucusunda bir CGI olarak çalışmasının güvenli olmasını sağlamak için bu yönerge gereklidir. Tanımsız bırakılmışsa PHP öntanımlı olarak yönergeyi etkin kılar. Bu yönergeyi etkisiz bırakmakla kendinizi riske atmış olursunuz.

Bilginize:

Windows Kullanıcılarına: IIS kullanıyorsanız buna rahatça sıfır atayabilirsiniz ve hatta bunu yapmalısınız. Bu, OmniHTTPD veya Xitami'nin çalışması için de yapılmalıdır.

cgi.nph bool

Etkinse, cgi'nin her isteğe mutlaka Status: 200 göndermesini sağlar.

cgi.redirect_status_env string

cgi.force_redirect yönergesine 1 atanmışsa ve Apache veya Netscape (iPlanet) HTTP sunucularını kullanmıyorsanız, PHP'nin çalışmaya devam edebileceği bilgisini almak için bakacağı bir ortam değişkeni ismini bu yönergeye atamanız gerekebilir.

Bilginize:

Ne yaptığınız konusunda bir fikriniz yoksa bu yönergeye bir isim atamak güvenlikle ilgili sorunlara yol açabilir.

cgi.rfc2616_headers int

HTTP yanıt kodu gönderilirken hangi başlık türlerinin kullanılacağını belirler. 0 atanırsa PHP, Apache ve diğer HTTP sunucuları tarafından desteklenen bir » RFC 3875 Status: başlığı gönderir. 1 atanırsa PHP, » RFC 2616 uyumlu başlıklar gönderir.

Bu seçenek etkinse ve PHP'yi bir CGI ortamında kullanıyorsanız (PHP-FPM gibi), standard RFC 2616 tarzı HTTP durum yanıt başlıklarını değil, onların RFC 3875 eşdeğerlerini kullanmalısınız. Örneğin header("HTTP/1.0 404 Not found"); değil, header("Status: 404 Not Found"); kullanmalısınız.

Ne yapıldığı hakkında bir fikriniz yoksa bu yönergeyi 0 değeriyle bırakın.

fastcgi.impersonate string

IIS (WINNT temelli sistemlerde) altında FastCGI, çağrı yapan istemcinin güvenlik dizgeciklerinin taklit edilmesi yeteneğini destekler. Bu, IIS'ye isteğin altında çalıştığı güvenlik bağlamını tanımlama izni verir. Apache'nin mod_fastcgi modülü bu özelliği desteklemez (17-03-2002). IIS altında çalışılıyorsa yönergeye 1 atayın. Öntanımlı değer sıfırdır.

fastcgi.logging bool

Turns on SAPI logging when using FastCGI kullanırken SAPI oturum açma etkin olur ve bu öntanımlı durumdur.

Karşıya Dosya Yükleme

Karşıya Dosya Yükleme Yapılandırma seçenekleri
İsim Öntanımlı Değişlik Yeri Sürüm Bilgisi
file_uploads "1" PHP_INI_SYSTEM  
upload_tmp_dir NULL PHP_INI_SYSTEM  
max_input_nesting_level 64 PHP_INI_PERDIR  
max_input_vars 1000 PHP_INI_PERDIR  
upload_max_filesize "2M" PHP_INI_PERDIR  
max_file_uploads 20 PHP_INI_SYSTEM  

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

file_uploads bool

HTTP üzerinden karşıya dosya yüklemeye izin verilip verilmeyeceğini belirler. Ayrıca, upload_max_filesize, upload_tmp_dir ve post_max_size yönergelerine de bakınız.

upload_tmp_dir string

Karşıya dosya yüklenirken dosyaların geçici olarak saklanacağı dizin. Dizinin, PHP'yi çalıştıran kullanıcı tarafından yazılabilir olması gerekir. Bir dizin belirtilmezse PHP sistem öntanımlısını kullanır.

upload_max_filesize int

Karşıya yüklenecek dosyalar için azami boyut.

int türünde bir değer kullanıldığında değer baytların sayısıdır. Büyük bayt değerleri için kullanılabilecek birimlerin gösterimleri hakkında bilgiyi bu SSS altında bulabilirsiniz.
max_file_uploads int

Aynı anda karşıya yüklenebilecek azami dosya sayısı.

Genel SQL

Genel SQL Yapılandırma Seçenekleri
İsim Öntanımlı Değişlik Yeri Sürüm Bilgisi
sql.safe_mode "0" PHP_INI_SYSTEM PHP 7.2.0'da kaldırıldı.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

sql.safe_mode bool

On değeri atandığında, öntanımlı değerler belirtilmiş veritabanı bağlantı işlevleri kullanıcı tarafından sağlanan değiştirgelerin yerine bu değerleri kullanacaktır. Öntanımlı değerlerin neler olduğunu görmek için ilgili veritabanının bağlantı işlevleri belgelerine bakınız.

Windows'a Özel

Windows'a Özel Yapılandırma Seçenekleri
İsim Öntanımlı Değişlik Yeri Sürüm Bilgisi
windows.show_crt_warning "0" PHP_INI_ALL  

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

windows.show_crt_warning bool

Etkin olduğunda Windows CRT uyarılarını gösterir.

Uyarı

Bu özellik PHP 7.2.0'da KALDIRILDI.

add a note add a note

User Contributed Notes 20 notes

up
20
csg at DEL_THISdiatom dot de
15 years ago
Starting with PHP 4.4.0 (at least PHP version 4.3.10 did have old, documented behaviour) interpretation of value of "session.save_path" did change in conjunction with "save_mode" and "open_basedir" enabled.

Documented ( http://de.php.net/manual/en/ref.session.php#ini.session.save-path ):
  Values of "session.save_path" should or may be  **without**  ending slash.
  For instance:
<?php
 
// Valid only  *before* PHP 4.4.0:
 
ini_set( "session.save_path", "/var/httpd/kunde/phptmp" );
?> will mean:
  The directory "/var/httpd/kunde/phptmp/" will be used to write data and therefore must be writable by the web server.

Starting with PHP 4.4.0 the server complains that "/var/httpd/kunde/" is not writable.
Solution: Add an ending slash in call of ini_set (or probably whereever you set "session.save_path"), e.g.:
<?php
 
// Note the slash on ".....phptmp/":
 
ini_set( "session.save_path", "/var/httpd/kunde/phptmp/" );
?>

Hope, that does help someone.
up
2
Anton Bannikov
11 months ago
I had a problem with 'open_basedir =' string in php.ini. This string was writtren in VirtualHost Directory directive of Apache2 and successfully rewrote the same php.ini setting! It happened with VestaCP, but I think, it's a common way. Goog luck!
up
1
luisdev
1 year ago
https://haydenjames.io/understanding-php-memory_limit/ explains the memory_limit setting nicely.
up
2
Simone Pellegatta
2 months ago
Be careful while using auto_prepend_file.

When the custom exception handler, set by set_exception_handler(), handles an uncaught exception, it interrupts the execution of every script.

If the script with the unhandled exception has been automatically prepended or included by an automatically prepended script, however, the main script will continue running anyway.

This could cause several issues: when we think that throwing an exception would automatically interrupt the current application, a whole chunk of code is going to run anyway.
up
2
rlammers at linuxmail dot org
10 years ago
This is a possible solution for a problem which seems to be a php-ini-problem but is not.

If a $_POST is used with large fields e.g. textarea's with more than 120kb characters php returns a blank screen, even if the max_post_size is 8M.

This problem may be caused by an apache-module SecFilter.

Adding the following lines to the .htaccess solves the problem.
SecFilterEngine Off
SecFilterScanPOST Off

I know this is not a php-issue, but i'm still posting it here since it looks like it is a php-problem and I did not find any sites or forums offering this solution.
up
0
andre dot wetter at myelco dot ch
24 days ago
If you use Microsoft IIS Windows and want to use open_basedir restrictions with multiple dirs you have to set them into single quotes in the main config xml file of IIS (C:\Windows\System32\inetsrv\config\applicationHost.config). Works fine in IIS 10.

Multiple files with single quotes and ; for windows:
"C:\php\php-cgi.exe|-d open_basedir='C:\Windows\Temp\;D:\mywebsite1\'"

Only one dir works fine without single quotes:
"C:\php\php-cgi.exe|-d open_basedir=D:\mywebsite1\"

In my main config xml file of IIS there are 2 nodes to set per website and the definitions have to be equal:
configuration\Location\system.webServer\handlers\add
configuration\system.webServer\fastCgi
up
0
fernandobasso dot br at gmail dot com
4 years ago
This might help in case someone happens to maintain old applications with a charset other than utf-8.

According to the docs, you can override the default charset if you use `header()`.

Suppose php.ini sets the default_charset to "UTF-8", but you need a legacy charset, like ISO-8859-1.

Still,

<?php header('Content-Type: text/html; Charset=ISO-8859-1'); ?>

would not override the charset, just add it as well and the result
was a response header like (note the two charsets):

    Content-Type:"text/html; Charset=ISO-8859-1;charset=UTF-8"

I found it strange the default one as `charset` with a lowercase `c`
as opposed to my custom charset with an uppercase `C`.

What solved was to _override_ the charset using all lowercase letters
as well for the word “charset”:

<?php header('content-type: text/html; charset=ISO-8859-1'); ?>

Then, the double charset from the response headers disappeared, and only the single, custom charset remained.
up
-1
dougal at gunters dot org
5 years ago
It appears that if you use both the 'include_path' directives and 'open_basedir', that file searches will hit the include path *first*, before local files. But if 'open_basedir' is not in use, then local files are found first. For example, suppose you have code in '/var/www/myfile.php' which does:

<?php
 
require_once('config.php');
?>

Further, assume that there is a local file '/var/www/config.php', and there is also a file '/var/local/php/config.php'.

Next, if your php.ini has:

  include_path = /var/local/php/

Normally, this would look for '/var/www/config.php' first, and if not found, then it would try '/var/local/php/config.php'.

But if you also have this in php.ini:

  open_basedir = /var/www/:/var/local/php/

Then the require would reverse the order of the search, and load '/var/local/php/config.php', even when the local 'config.php' file exists.

Furthermore, if include_path contains directories not in open_basedir, you can end up with a fatal error. For example, change the directive to:

  open_basedir = /var/www/:/var/local/includes/php/

Now the require will first find '/var/local/php/config.php' from the include_path, try to include it, but be unable to because of the open_basedir restrictions.
up
-2
amolitor at molitor-design dot com
11 years ago
Amusingly, the include_path logically includes the current directory of the running file as the last entry all the time anyways, so part of the business about shoving "." into the include_path is spurious -- it's "there" on the end all the time, at least in the 5.2.12 source (see main/fopen_wrappers.c around line 503).

This one had me goin' for a while.
up
-3
leo at korfu dot cz
14 years ago
"If the size of post data is greater than post_max_size..."

It seems that a more elegant way is comparison between post_max_size and $_SERVER['CONTENT_LENGTH']. Please note that the latter includes not only size of uploaded file plus post data but also multipart sequences. Leo
up
-4
iko at vision dot sk
8 years ago
auto_globals_jit setting is also affecting $_REQUEST superglobal in 5.3 It is not explicitly stated in documentation.
up
-5
mrok at mrok dot com
12 years ago
Note that on some Unix systems (i.e. PHP 5.1.6 on Centos 5.2) include_path in php.ini should NOT be quoted.

For example, instead of

include_path='.:/usr/share/php'

use

include_path=.:/usr/share/php

Using quotes does not cause any error message, but all of your require_once() directives will fail (indicating that file could not be opened) - unless full path to target file is provided.
up
-2
diamondeagle at webmail dot co dot za
1 year ago
Note regarding the upload_tmp_dir setting and UNC Paths:

When using PHP on Windows OS and IIS FastCGI, if you need to use a UNC path to a folder on a network drive for the upload_tmp_dir setting then you must use three \ characters at the front of the UNC path.

Windows and PHP use the first slash as an escape character, so if you only use two slashes then it passes a UNC path with just one backslash. That is not valid for UNC paths and you many experience problems when uploading files, such as errors saying that "PHP is missing a temporary folder".

Correct:
upload_tmp_dir = "\\\path\to\your\folder"

Incorrect:
upload_tmp_dir = "\\path\to\your\folder"
up
-7
txyoji at yahoo dot com
7 years ago
If you enable "open_basedir" option, it will disable the realpath_cache. This can be a significant performance hit.

https://bugs.php.net/bug.php?id=53263
up
-7
AntonioK
10 years ago
Note that there is no way to disable eval() work by using disable_functions directive, because eval() is a language construct and not a function.

Many people advise to disable such potentially-insecure functions like system(), exec(), passthru(), eval() and so on in php.ini when not running in safe mode, but eval() would still work even it listed in disable_functions.
up
-4
alaa morad
2 years ago
add enctype="multipart/form-data" to your <form> tag or it will not upload any file even if file_uploads=on
ex:
<form method="POST" action="upload. php" enctype="multipart/form-data">
// form contents
</form>
up
-7
Adam
4 years ago
Remember that `open_basedir` restriction does not affect exec functions. As long as you do not disable exec functions (see `disable_functions`, users will be able to use `exec("/bin/cat [...]")` to access sensitive world readable files.
up
-11
kghbln
9 years ago
Adding multiple directories to open_basedir:

open_basedir = "/var/www/htdocs/:/var/www/tmp/" adds both paths /var/www/htdocs/ and /var/www/tmp/. Do not forget the trailing slash, otherwise the last directory will be considered as a prefix (< 5.3.4).

On Windows you use ; as the seperator.
up
-18
michael dot buergi at gmx dot net
7 years ago
the ini-setting "detect_unicode" is indeed "zend.detect_unicode" (according to the phpinfo of my 5.4.4)
up
-28
abc500x500 at gmail dot com
3 years ago
Please illuminate this:
memory_limit=128mb meaning which?

1-per script only then if in a moment 1000 user request php script maximum only 128mb of server ram use6 by script.
2-per script + per user if in a moment 1000 user request a php script about 1000*128mb=128gb ram use by script.
Thanks
To Top