AMFPHP и Zend_Amf не работает с mbstring
Выяснилось грустное - ни одна из этих библиотек не работает при включённом mbstring.func_overload = 2. Что это значит практически - при включённой mbstring - библиотеки выкидывают эксепшн при попытке вычитать AMF из сокета. При выключенной mbstring - невозможность нормально обрабатывать кириллицу строковыми функциями php (кодировка, понятно, UTF-8). При том, что причина ясна - некорректное определение длины строки перегруженной функцией strlen, пофиксить это довольно сложно. Я попробовал решить проблему “в лоб”, написав обёртку и поиском/заменой заменить strlen на патченую функцию. Ниалё. И вот тут уже просто в полный рост торчат уши пехепе, как языка принципиально неспособного нормально работать с байтовыми потоками напрямую. Я имею ввиду, что всё это бинарно-безопасное чтение сокетов - оно всё псу под хвост, потому что считанные данные всё равно в итоге обрабатываются строковыми функциями, ибо другого способа просто нет. Или есть? Или я ниалё?
(С) не помню кто - Чем больше узнаю php, тем больше хочется перейти на python. Понимающим пацанам - в питоне как оно вообще с бинарными сокетами, с многобайтными кодировками? Со вторым, подозреваю, всё должно быть нормально - всё-таки голландец язык придумывал, с проблемой должен быть знаком не понаслышке.

February 24, 2009 в 11:37
Странно, у нас тестовый сервачок php 5.2.6 + mbstring 4.4.4 там вроде гоняются голландские тексты по AMF - вроде не было у них никаких Exception, но я лично не участвовал в этом проекте, потому точно сказать не могу.
February 24, 2009 в 22:44
Очень любопытно было бы взглянуть на всё это вместе и на предустановки mbstring в частности. Потому что проблема на самом деле чисто-конкретная. И я даже допускаю, что она может быть решена правильной или наоборот, мудрёной конфигурацией mbstring. Вот тут уважаемый Alessandro Crugnola предлагает решение проблемы
http://www.sephiroth.it/weblog/archives/2007/10/amfphp_and_mbstring.php
Мне это, однако, не помогло.
Методом тыка было выяснено, что при некоторых настройках mbstring - таки оно может работать, например при mbstring.internal_encoding=ISO-8859-1 всё ок, но это не наш (нерусский, в смысле) путь.
March 4, 2009 в 13:30
Ваши проблемы забавляют перл-разработчиков
March 6, 2009 в 11:35
Вот именно, уважаемый Roman. Борьба с ветряными мельницами. Наши проблемы удручают флекс-разработчиков =(