ScotlandPHP

İşlevlerin Aşırı Yüklenme Özelliği

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 uyglamayı ç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.

Aşırı yüklenebilen işlevler
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 substr_count() mb_substr_count()
4 ereg() mb_ereg()
4 eregi() mb_eregi()
4 ereg_replace() mb_ereg_replace()
4 eregi_replace() mb_eregi_replace()
4 split() mb_split()

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.

add a note add a note

User Contributed Notes 5 notes

up
13
Anonymous
1 year ago
it's kinda evil and gives you tons of headache.
up
10
Grandt
3 years ago
In short, only use mbstring.func_overload if you are 100% certain that nothing on your site relies on manipulating binary data in PHP.
up
1
Anonymous
7 months ago
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.
up
-1
Oliver Baltz
7 years ago
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.
up
-4
andrew
8 years ago
It seems in php 5.2.7 - 5.2.9 under windows mbstring overloading not working in .htaccess files. Apache v.2.2.
Works only in php.ini, this is not convinient in some situations.
To Top