Для комментариев зарегистрироваться или войти
Либо используйте ваш Open_ID, например аккаунт гугл, яндекс или ЖЖ
 

26 апреля 2011.  Zend Guard пролетел...

С этого года наша компания предоставляет своим клиентам полностью открытый исходный код движков. Задолбались =)

Начну статью издалека, для тех кто не в курсе. Есть такая хитрая заокеанская компания Zend, известная тем что является разработчиком языка PHP, на основе своего Zend Engine. Сам язык PHP — проповедует обратную совместимость, т. е. код написанный для ранних версий языка запуститься и на более поздних, а версия для более поздней версии языка, де-юре, запуститься на языке с той же главной версией. Однако сам язык является интерпретируемым, т. е. не имеет возможности быть скомпилирован в запускаемое приложение. Что приводит, по сути, к тому, что весь код написанный на PHP — в какой-то степени открыт. Конечно компания Zend понимает, что многие компании захотят делать свой, написанный на PHP, коммерческий продукт закрытым, даже для владельца лицензии. В качестве какого-то решения, компания использует продукт под названием Zend Guard (и Zend Optimizer на серверной части). Суть продукта в том, что он может обфусцировать ваш скрипт, оптимизировать его и частично переводить в машинный код. Алгоритм обфускации и кодирования отличается у разных версий Zend Guard, но по сути вполне поддаётся декомпилированию. Статьи с примерами можно найти например в журнале Хакер, либо поискать на китайских форумах версию программы Dezender для требуемой версии.

Проблема в том, что обратная совместимость закодированного Guard’ом кода, была утрачена в версии PHP 5.3. Код скомпилированный последними версиями гварда должен быть скомпилирован для абсолютно конкретной версии PHP. В случае с последней версией 5.3 на сервер необходимо ставить обновлённый Zend Optimizer — сейчас он называется Zend Loader. Это привело к тому что сейчас в интернете повсеместно распространена версия 5.2, которая прекратила поддерживаться 16 декабря 2010 (пруфлинк). При этом уже спустя небольшое время в ней были найдены уязвимости и компания Zend была таки вынуждена выпустить обновление (пруфлинк). Знакомые владельцы крупных хостингов пока не знают как переносить клиентов на версию 5.3, которая поддерживается в настоящий момент, и выходит уже два года как. Некоторые хостеры ставят её только на новые сервера, только для новых клиентов.

Сам Zend Guard для версии PHP 5.2 работает довольно нестабильно. Он может от раза к разу по разному сжимать одинаковый код (даже если отключить обфускацию и оптимизирование), который может то читаться сервером, то нет. Один и тот же код может запускаться или нет в зависимости от малой версии PHP или даже операционной системы (бывали разные результаты на фёдоре, убунте и freebsd)!

Поэтому, ввиду апгрейда операционной системы на рабочем сервере, было принято решение ставить самый последний PHP из родного репозитория и отказываться от шифрования. Мы даже отказались от штатного скрипта обфускации, стало намного проще жить.

Чего и вам желаем товарищи =).

Метки данной записи: PHP

28 июня 2010.  Лёгкое типографирование предлогов в PHP

Сегодня небольшая заметка. В русском языке, как вы знаете существуют предлоги, и по правилам русского языка, при написании они должны переносится на новую строку вместе с последующим словом. Это правило применимо и к веб. Особенно актуально оно для ссылок меню, которые часто оказывается некорректно оформлено веб-мастерами. Т.е. ошибки типографики в тексте страницы допустимы, но меню заметно всегда. Приведу пример:

Строки перенесены неверно:

  • Приборы для ПЦР в
    реальном времени
  • Оборудование для
    ПЦР-лабораторий
  • Наборы реагентов и
    тест-системы для
    ПЦР в реальном времени
  • Зонды для ПЦР в
    реальном времени
  • Реагенты для
    секвенирования и
    фрагментного анализа

Строки с предлогами перенесены верно:

  • Приборы для ПЦР
    в реальном времени
  • Оборудование
    для ПЦР-лабораторий
  • Наборы реагентов
    и тест-системы
    для ПЦР в реальном времени
  • Зонды для ПЦР
    в реальном времени
  • Реагенты
    для секвенирования
    и фрагментного анализа

Добиться такого эффекта легко, если заменить пробел после предлога на неразрывный -  
Это можно сделать если настроить следующую автозамену в php-скриптах вывода этого меню, например так:

$caption = str_replace(' в ',' в ',$caption);
  $caption = str_replace(' и ',' и ',$caption);
  $caption = str_replace(' для ',' для ',$caption);

На самом деле предлогов немного больше, поэтому чтобы заменить их все, я написала для вас следующую маленькую функцию:

function typo($str){      
    $predlogs=array('в', 'без','до','из','к','на','по','о','от','перед','при','через', 'с','у','и','нет','за','над','для', 'об', 'под', 'про');
    foreach($predlogs as $p){
        $str = str_replace(' '.$p.' ',' '.$p.' ',$str);
    }	
    return $str;
}

Приятной типографики вам =)

UPD: Спасибо Aikr в комментариях, за предложенный вариант с регулярными выражениями. Та же функция на них:

 

function typo($str){      
$pattern = '/\s+(в|без|до|из|к|на|по|о|от|перед|при|через|с|у|и|нет|за|над|для|об|под|про)\s+/';
return preg_replace($pattern, ' \1 ', $str);
}
Метки данной записи: PHP, советы

16 января 2010.  Как подсчитать rss-подписчиков, или почему вреден FeedBurner

Сегодня я бы хотела затронуть тему rss-каналов, и в частности рассказать как раздавать rss, как подсчитать количество подписчиков, и чем вреден или полезен FeedBurner.

Метки данной записи: PHP, советы

17 декабря 2009.  Человеко-читабельность - учите компьютеры русскому!

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

Однако, сегодня есть кое что, о чём я не могу не написать, и о чём почему-то никто не упоминает. Это использование русского языка в автоматически генерируемом контенте, особенно в словах которые изменяются от числа. Например форма которую можно увидеть в 90% онлайн магазинов (даже таких крупных как ozon.ru, eldorado.ru, 003.ru):

Корзина: Товаров 0 шт. Общая сумма 0,00 руб.

Вам это не режет глаз? Нет? А мне ужасно режет, мне кажется автор сильно не любит людей. Слава роботам, убить всех человеков!

Во всех магазинах созданных нашей компанией можно видеть туже строчку, но на русском языке

Корзина:
В вашей корзине 3 предмета общей стоимостью 73370 руб.

В данном случае покупатель видит что работу делали профессионально и с душой, а не для галочки.

8 ноября 2009.  Как запустить долговыполнимый php-скрипт

Технологам моей фирмы часто приходится писать php-скрипты которые требуют большого времени выполнения. Многих php-кодеров такая задача как ни странно ставит в тупик, и сводится для них к оптимизации программы, или увеличения time-limit его запуска в апаче например. Тем ни менее никакая оптимизация не поможет если вам необходимо перегенерить тысячу превьюшек к фотографиям каталога магазина. Существуют пара на мой взгляд очевидных способов запускать такие скрипты.

Метки данной записи: советы, PHP

24 июня 2009.  Гео-таргетинг, как сделать своими руками.

Под термином Гео-таргетинг я подразумеваю возможность установить точный адрес посетителя, пришедшего к вам. Эту задачу я сделала год назад и вот хочу сейчас поделиться итогом.

Для этого я собралась использовать язык PHP. Я не очень хорошо знаю этот язык, поэтому попросила помочь моих коллег-программистов — вот она веб-разработка по-женски. Хорошие программисты любят делать то чего никто до них не делал, или что сделать чрезвычайно трудно, а в одиночку кажется нереально, технологи нашей славной фирмы Analog-group (в частности спасибо mr.troll) не исключение. Сайт компании конечно чрезвычайно ужасен, но это хитрый ход чтобы не привлекать клиентов, а то приходят и платят много денег, приходится работать =). Вероятно начальство запретит эту статью в бложике публиковать, но всё же написать надо.

Итак, о гео-таргетинге, в россии его умеют делать только огромные стат-серверы, типа liveinternet, spylog, и российские почтовики. Ещё модуль geo-ip есть можно купить в составе umi-cms, этот модуль весьма распростаранён, его разрабатывала CN-Software, заявленная скорость работы 500 запросов в секунду. На практике я не думаю что это так, а вот у меня скорость работы получилась выше (например вот тут за секунду определение городов, группировка и вывод таблицы, полюбуйтесь) =), кроме того их база данных российских адресов всегда оставляла желать лучшего, по моему, до сих пор часть диапазона московского стрима считается канадскими адресами.

Единственные кто знают точную базу данных российских ip-адресов это регистраторы, в частности nic.ru, который в бытность свою сделал ipgeobase.ru, и автоматически выкладывает свежие базы данных каждый день. На сайте предложены программные способы поиска в базе данных, но во-первых, они на языке Perl, во-вторых, совершенно не оптимизированны.

Сейчас я с некоей помощью напишу как оптимизировать и выполнить поиск данных на языке PHP.

22 апреля 2009.  Про внешние ссылки на сайты.

Вообще в интернете у поисковиков насчёт ссылок есть мнение, и я его разделяю, если автор указал ссылку на какую-то страницу - значит он считает её авторитетным источником, и делится с ней своим авторитетом. По этому принципу основаны такие системы как PageRank гугла, и тИЦ яндекса. Реализованы они правда по разному, но тем не менее. Иногда (часто/всегда) бывают случаи когда мне не хочется делиться авторитетом своего сайта с незаплатившими ни с кем. Для этих целей можно использовать тег <noindex>ссылочка</noindex> для яндекса и атрибут ссылки rel="nofollow" для гугла.

Также можно использовать перенаправления на уровне сервера - header('location: site.ru'); на другой сайт. Они не передают тиц и pagerank.

Для того чтобы сделать кошерное перенаправление нужна php-перенаправлялка, запись в .htaccess для ЧПУ, и замена всех ссылок где нужно.

Код php-перенаправлялки go.php я например сокращённо написала так:

<?$_GET['to'] = substr($_SERVER['QUERY_STRING'],3);
$to=str_replace('http:/','',$to);
$to=trim($to,'/');
if(!strpos($to,'?') and strpos($to,'&'))
$to=substr($to,0,strpos($to,'&')).'?'.substr($to,strpos($to,'&')+1);
header('location: http://' . $to);?>Hi all =)

запись в .htaccess нужна примерно такая

RewriteCond %{REQUEST_URI} !^/go.php
RewriteCond %{REQUEST_URI} ^/go/
RewriteRule go/(.*) go.php?to=$1 [QSA,L]

для использования маскирования ссылки в новостях например я пишу так:

str_replace('a hr'.'ef=&quot;http://','a rel="nofollow" hr'.'ef=&quot;/go/',$row['text'])

в итоге ссылка на яндекс выглядит так: http://usabili.ru/go/ya.ru

пользуйтесь =)

Метки данной записи: советы, о поисковиках, PHP

10 апреля 2009.  Про Gzip и магическое число 10

Технологи фирмы где я работаю иногда делятся со мной своими заметками, вот одна из них.

Не так много людей (не только разработчиков, а вообще), которые знают о том что сайты могут сжимать данные для экономии траффика, методом Gzip. Ещё меньше тех кто для той же экономии траффика решил программно скачивать (на PHP например) страницы именно в этом формате. И на этом начинается интересное.

Метки данной записи: PHP, Gzip

Предыдущие записи, смотрите в архиве новостей »

Подпишитесь на статьи через RSS

15 самых популярных статей: