Янв 24
/**
 * Конвертирует текст из юникода и обратно
 *
 * @param string $str - Строка текста
 * @param string $type - "w" - utf2win, "u" - win2utf
 * @return string
 */
function utf8_convert($str, $type)
{
   static $conv = '';
   if (!is_array($conv))
   {
      $conv = array();
      for ($x=128; $x <= 143; $x++)
      {
         $conv['utf'][] = chr(209) . chr($x);
         $conv['win'][] = chr($x + 112);
      }
      for ($x=144; $x<= 191; $x++)
      {
         $conv['utf'][] = chr(208) . chr($x);
         $conv['win'][] = chr($x + 48);
      }
      $conv['utf'][] = chr(208) . chr(129);
      $conv['win'][] = chr(168);
      $conv['utf'][] = chr(209) . chr(145);
      $conv['win'][] = chr(184);
   }
   if ($type == 'w')
   {
      return str_replace($conv['utf'], $conv['win'], $str);
   }
   elseif ($type == 'u')
   {
      return str_replace($conv['win'], $conv['utf'], $str);
   }
   else
   {
      return $str;
   }
}

автор:

Ноя 09

Сегодня в FireFox обнаружил что при обновлении через Xajax обновленная таблица выглядит так как будто там перепутаны открывающие/закрывающие теги (td, tr).

Сразу скажу что в IE6 этого не происходит.

С помощью Web Developer Toolbar смотрю (View Generated Source), и что вижу:

1) Тег form из первой ячейки закрыт, хотя я его не закрывал

2) Тег TD тоже закрыт, причем до содержимого ячейки, после содержимого естественно стоит </td> поставленное мною

Каждая строка таблицы содержит форму, вот так схематически выглядит строка, если таблицу получаю не через ajax


   
1 2 3
x

А вот так через xajax


   
1 2 3 x

Решение как такое победить пока не найдено …

автор: \\ теги: ,

Ноя 06

Частенько нужно программно зайти на какой нибудь сайт, но так, чтобы это выглядело так, что кто-то загрузил страницу в браузере.

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

Последняя дата обновления ноябрь 2005 года.

Запросу на получение страницы можно подсунуть: хост (адрес страницы), порт, куки, реферальную страницу(адрес страницы по ссылке с которой якобы заходим), агента(название браузера), логин/пароль базовой авторизации, все что хотите в содержимое заголовка (header). Еще можно установить атрибуты прокси сервера — это нужно во первых для анонимности и во вторых против бана можно сменить прокси сервер. Есть поддержка редиректов, фреймов.

Кроме получения содержимого страницы есть функции для:

а) вытаскивания чистого текста (без тегов)

б) получения всех ссылок на странице

в) получения форм

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

==================================

Теперь о том чего нет, и что хотелось бы видеть в классе

1) Более сложный парсинг ссылок, т.е. не только нужны порой сами урлы, но и текст ссылок

2) Парсинг всех используемых на странице картинок

3) Более сложная работа с формами. Получение формы в объект, заполнение переменных объекта значениями, отправка запроса

Немного фантастики …

4) Эмуляция выполнения событий javascript например клики по объектам наведение курсором и т.д. получения измененной страницы после действия javascript. Это же касается и vb script

5) Выполнение ajax запросов. Получение измененной страницы после исполнения ajax

6) Поддержка работы flesh обектов. Возможность сохранить в файл, нажать на ссылку

автор: \\ теги: , ,

Ноя 02

Сразу скажу что на PHPConf 2007 я не был, получилось это потому что я живу в другой стране (Казахстане), а конференция проходила в Москве. Первая из причин Россияне очень долго не отвечали на присланную заявку на участие, потом ожили когда было уже поздно, т.к. бронировать билет на самолет нужно за месяц до отлета, еще довольно интересно себя повели … прислали письмо в котором требовали оплатить в течении 3 дней иначе меня исключат из участников, у нас на работе естественно своя бюрократия — оформление платежа займет 3 недели. Организаторы как раз через 3 недели опять написали письмо, с вопросом поеду ли я на конференцию, до начала конференции оставалось 4 дня, конечно ответил что не поеду.

Вобщем или бюрократия виновата или самому шустрее быть надо было.

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

Потом на сайте phpclub.ru выложили в новостях «Принимаются заказы на DVD с материалами конференции PHPConf2007(7 DVD, доклады и ответы на вопросы)», конечно я заказал, итогом мне это обошлось в 144 USD. Доставка заняла почти две недели, авипочтой России. Еще один казус по доставке, оправка через пониэкспресс или DHL, чревата еще таможенным налогом. В DHL(г.Москва) сказали, что могут доставить тока в Алматы и я там буду растомаживать, ладно растоможка деньги дело наживное, но в Алмату то почему при том, что офис DHL есть в Усть-Каменогорске (гы-гы наверное нет таможни). Вобщем через DHL шлите письма и открытки, повторяю никаких бандеролей.

Вчера просмотрел первый диск

Практика разработки корпоративных веб-приложений 2007

Аспектно-ориентированное программирование(AOP) в PHP

автор: \\ теги: ,

Окт 31

Не секрет что движок форума PHPbb очень сильно распространен в интернете. Это и не удивительно т.к. он бесплатен и по своему функционалу не уступает платным аналогам. Но он имеет слабую защиту captcha.

Разместил статью «Распознавание CAPTCHA от PHPbb» из личного, так сказать опыта.

автор:

Окт 23

Ошибка наверное все таки не php, а моя собственная, хотя кто его знает может так и должно обрабатываться …

Итак как я наступил на эти грабли: в массиве $_REQUEST лежит переменная operator в переменной значение 0, в операторе if сравниваю значение этой переменной с нулем

if ($_REQUEST["operator"] != 0)
   echo "Not ok";
else
   echo "Ok";

И вижу на выводе «Not ok». Я точно знаю что в переменной $_REQUEST[«operator»] лежит ноль, более того я вижу это распечатав массив $_REQUEST, командой print_r($_REQUEST);

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

Пока товарищь шел, за эти 5 секунд я поставил ноль в кавычки, и оппа все заработало, и товарищь выпалил что нужно поставить !== (восклицательный знак и два равно), хм всю жизнь сравнивал == или !=, полез в документацию разбираться с темой.

В документации написано:
$a !== $b Неидентичность True, если $а не равно $b, или они разного типа

Товариш был не прав, но его указание из этой темы.

Копаем дальше, функцией gettype($_REQUEST[«operator»]) выясняю что у меня из формы нуль приходит строкового типа, а нуль без кавычек естественно числовой тип. Хм. ну и что PHP слабо типизированный язык программирования, когда нужно приведение типов должно сработать автоматом, но у меня в скрипте в IF этого не произошло 🙁

Итого: Или это у меня такая версия php, или учить php лучше надо было, блин и такие грабли после 3,5 лет программирования на php, стыд и позор.

автор: \\ теги: , ,