CakeFest 2024: The Official CakePHP Conference

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

Uyarı

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.

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 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.

add a note

User Contributed Notes 4 notes

up
52
Anonymous
8 years ago
it's kinda evil and gives you tons of headache.
up
38
Anonymous
7 years 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
17
Grandt
9 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
-2
Oliver Baltz
13 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.
To Top