it's kinda evil and gives you tons of headache.
Bu özelliğin kullanımı PHP 7.2.0 itibariyle ÖNERİLMEMEKTE olup PHP 8.0.0'da tamamen KALDIRILMIŞTIR. Bu işleve kesinlikle güvenilmemelidir.
Genellikle, çalışan bir PHP uygulamasını çok baytlı bir ortamda çalışır duruma getirmek çoğu kişiye zor gelir. Bu durum genellikle çok baytlı kodlanmış dizgelerle düzgün şekilde çalışamayan substr() gibi standart dizge işlevleriyle yazılmış PHP uygulamalarında karşımıza çıkar.
Mbstring modülü, bir uygulamayı çok baytlı ortamlarda çalışır duruma getirmek için kod değişikliği yapılmaksızın standart dizge işlevlerinin çok baytlı taydaşlarının yerini almasını sağlayan 'işlevlerin aşırı yüklenme' özelliğini destekler. Örneğin, eğer aşırı yükleme etkin kılınmışsa substr() işlevi yerine mb_substr() işlevi çağrılır. Bu özellik, çoğu durumda, sadece tek baytlı karakter kodlamasını destekleyen uygulamaların çok baytlı karakter kodlaması kullanılan ortamlara kolayca uyarlanmasını sağlar.
İşlevlerin aşırı yüklenmesini sağlamak için php.ini dosyasında
mbstring.func_overload
yönergesine, aşırı yüklenecek işlev
sınıflarını belirten bit maskelerinden oluşan bir değerin atanması gerekir.
mail() işlevini aşırı yüklemek için 1, dizge işlevleri için
2, düzenli ifade işlevleri için 4 girmek gerekir. Örneğin, yönergeye 7 değeri
atanırsa bu üç sınıfa ait işlevler aşırı yüklenecektir. Aşırı yüklenebilen
işlevler aşağıda listelenmiştir.
mbstring.func_overload değeri | özgün işlev | aşırı yükleyen işlev |
---|---|---|
1 | mail() | mb_send_mail() |
2 | strlen() | mb_strlen() |
2 | strpos() | mb_strpos() |
2 | strrpos() | mb_strrpos() |
2 | substr() | mb_substr() |
2 | strtolower() | mb_strtolower() |
2 | strtoupper() | mb_strtoupper() |
2 | stripos() | mb_stripos() |
2 | strripos() | mb_strripos() |
2 | strstr() | mb_strstr() |
2 | stristr() | mb_stristr() |
2 | strrchr() | mb_strrchr() |
2 | substr_count() | mb_substr_count() |
Bilginize:
Dizin bağlamında yapılandırmalarda işlevlerin aşırı yüklenme özelliğinin kullanılması önerilmez. Çünkü, bu özelliğin üretim ortamında kullanılabilecek kararlılığa sahip olduğu henüz onaylanmamıştır; bu bakımdan önceden kestirilemeyen bazı davranışlarla karşılaşmak olasıdır.
I took over a project with this "feature" enabled... took me a while to figure out why strings behaved non language standard. So, if you like to make grown men cry - by all means enable this deathtrap.
In short, only use mbstring.func_overload if you are 100% certain that nothing on your site relies on manipulating binary data in PHP.
In case you need to (de)activate the overloading for a specific directory, try setting an appropriate php_admin_value in your httpd.conf, e.g.
<Directory ...>
...
php_admin_value mbstring.func_overload 7
</Directory>
I'm not 100% sure if one can rely on that, but it seems to work for me.