Переводил один небольшой проект с Windows на Ubuntu. Проект был написан на быдло-PHP: аккуратно, но весьма малоопытным программистом. Вот несколько встретившихся мелочей.
1. PHP минут 15 упорно не хотел запускать index.php, предлагая вместо этого скачать phtml-файл. Дело оказалось в кэше браузера.
2. Проект хранил свои настройки в файлах с русскими именами и с русскими переменными внутри. После переконвертации всех программных и настроечных файлов из cp1251 в utf8 проект замечательно заработал. Переконвертировал я так:
find . -name "*php" -exec iconv -f cp1251 -t utf8 {} -o {}.utf8 \;
find . -iregex ".+.php$" -exec rm {} \;
find . -name '.utf8' -prune -o -exec rename 's/\.utf8$//i' {} +
3. Русские файлы прикреплялись с потерей кусков имени. Проблема оказалась в некорректной работе функции basename. Чтобы нормально заработало, пришлось добавить строку
setlocale(LC_ALL, 'ru_RU.UTF8');
4. Выяснилось, что IE, получая файлы в UTF8 через скрипт getfile.php?filename=xxx, присваивает им безумные имена. Переписал функцию, чтобы ссылка вела сразу прямо на файл, всё заработало.
Показаны сообщения с ярлыком PHP. Показать все сообщения
Показаны сообщения с ярлыком PHP. Показать все сообщения
четверг, 1 апреля 2010 г.
вторник, 30 марта 2010 г.
PHP: парсинг лога
Базовый инструментарий для парсинга логов в PHP практически совпадает с ЛИСП’овским:
explode — разбить строку в массив
preg_match_all — найти все вхождения (в массив)
count — длина массива
array_unique — уникальные элементы массива
file — прочесть файл в массив
file_get_contents — прочесть файл в строку
Сейчас я с ужасом вспоминаю, как писал когда-то парсер логов на PHP без регулярных выражений и без массивов. Просто большим количеством циклов.
explode — разбить строку в массив
preg_match_all — найти все вхождения (в массив)
count — длина массива
array_unique — уникальные элементы массива
file — прочесть файл в массив
file_get_contents — прочесть файл в строку
Сейчас я с ужасом вспоминаю, как писал когда-то парсер логов на PHP без регулярных выражений и без массивов. Просто большим количеством циклов.
Подписаться на:
Сообщения (Atom)