понедельник, 1 октября 2012 г.

PHP - 10 лет - одна печаль.

Прошло уже 10 лет с тех пор как я начал пользоваться языком PHP, с тех времен много воды утекло, пишу уже частенько на других языках, но есть и старые проекты.
Понадобилось старый проект перенести на юникод в связи с переносом на linux. Короче начался пипец.

1. База сконвертирована в UTF-8 довольно просто и быстро, единственно отдельно пришлось обрабатывать таблицу с бинарными данными, но это мелочи.
2. Файлы PHP и прочее были быстро переведены в UTF-8 и почищены от \r. iconv и perl тут как бы все сделали.
3. Началось безобразие:
  • при обращении к строке по [] естественно отдавался первый байт маркера юникода. пездец приехали... с чего баня то упала? при том что сам интерпретатор работает прекрасно с UTF8 файлами.
  • ну и прочее... strlen и далее... короче все встало колом.
И если функции strlen и прочие можно завернуть через mbstring.func_overload то остальное, как например ucfirst и далее просто пездец
Благо сайт был более менее по божески написан и я смог все завернуть через родные mb_* функции и все заработало. но было убито полсмены.

Из найденного.

ucwords, strtolower,strtoupper - > mb_convert_case
ucfirst -> самопал, ибо нет стандартного
[*] -> самопал
serialize<->unserialize - тоже костыль, ибо мне непонятно нахера в строке считать байты, если строка юникодовая.для бинарных данных я все понимаю, но если это обычная строка???.
preg_* - модификатор u + \w (только английские)  [а-я] - русские ну или класс \p{L} - для тупо буквы.(если нужны цифры то \d)

Короче 10 лет, и никакого сдвига в лучшую сторону.

Вопрос разработчикам: Если внутренняя кодировка UTF-8 (так как сами файлы UTF-8), что за бред использовать для работы со строками стороннее расширение?

Короче вывод. Если вы собрались писать нормальное юникод приложение, то не связывайтесь с PHP. он застыл на этапе 2002 года, а вернее на версии 4.2 + немного классов из 5.
Мое мнение. Нужно бросать что есть и разрабатывать с ноля чистую адекватную версию, потому что поддерживая старое говно расти дальше некуда.

Microsoft смог вовремя отказаться от 1 фреймворка, просчитал ошибки и выстроил замечательный второй (до сих пор не измененный сильно в основе), который не поддерживал старое говно... Здесь необходим такой же путь. Эволюция ни к чему не приведет. Только к латанию одних и тех же дыр от года к году.


пятница, 14 сентября 2012 г.

Zimbra - лучшее из бесплатного для почты

Не так давно стала доступна 8 версия сего продукта. Встала задача переноса этого хозяйства с версии 7.2 ubuntu 10.04 до версии 8 ubuntu 12.04. Разумных руководств для перехода и обновления я не нашел, что есть из них, то тупо им следуя можно потерять все к черту.
Но перейти очень хотелось... так как на старой LTS приходилось сидеть с неродным ядром для поддержки 3Тб винтов, иначе видала только 2.

Итак мое руководство по Upgrade Zimbra from 7.2 on Ubuntu 10.04 to 8.0 on Ubuntu 12.04.
Проверено работает.
Итак.
1. Останавливаем зимбру
su zimbra -
zmcontrol stop
exit
2. Делаем архив папки /opt/zimbra ну или тупо копию (у меня хранилище отдельно, поэтому это заняло ~1.5Г)
Хранилище бекапить не особо нужно, но как бы советовал. У меня оно ~180Г поэтому нервы пошаливали делать дальше без бекапа.
3. Обновляем до версии 8.0 для Ubuntu 10.04. (./install.sh)
4. Снова останавливаем.
5. Снова снимаем копию на всякий случай (естественно в другое место а не поверх).
6. Удаляем Zimbra к чертям (./install.sh -u)
До этого пользовались первым дистрибутивом, который для Ubuntu 10.04, больше он нам не понадобится.
7. Обновляем систему (do-release-upgrade)
8. Устанавливаем Zimbra - уже новую версию для 12.04. Конфигурация по умолчанию
9. Останавливаем её.
10. Восстанавливаем конфигурацию из сохраненной копии обновленной 8.0 версии
следующие папки копируем поверх, для чистоты можно их в установленной почистить, чтобы лишнего не было
.ssh
conf
data
db
store и index - для тех у кого хранилище находится внутри установки
jetty-distribution-7.6.2.z4/etc - иначе не подцепится хранилище
log - по желанию
logger
не забудьте восстановить правки в postfix/conf/*.cf если вы их производили
zmstat - для восстановления статистики
11. запустить от root /opt/zimbra/libexec/zmfixperms для простановки разрешений на файлы
12. запустить сервер (zmcontrol start)
Все должно работать.



Ну и отдельно для тех, кому критичен сертификат сервисов.
нужно заменить папку ssl/zimbra из самого первого архива, так как сертификат в процессе обновления заменяется к черту.
после этого нужно выполнить zmcertmgr deploy self, чтобы сертификаты были прописаны в конфигурацию. Ну и рестартануть сервер для порядка и успокоения.

Новый интерфейс это действительно шаг вперед. Все Exchange и Zarafa нервно курят в сторонке.
Не говоря уже про количество функций.
От этого продукта у меня только положительные эмоции... еще бы сделали ограничение по логину с айпишников, цены бы не было.. Хотя и так лучшее, что есть.

Спасибо за внимание.