Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode

Документация PHP-CPP

У PHP-CPP появился раздел с документацией.

Вообще разработка библиотеки идет семимильными шагами, и, похоже, недолго осталось ждать первого рабочего релиза. Когда будет готово, напишу подробнее про саму библиотеку и её возможности.


PS: Вместо того чтобы что-то писать здесь про библиотеку, я просто взял и начал переводить документацию на русский язык: http://phpcpp.ru/

Основная цель этого перевода — познакомить русскоязычное сообщество с библиотекой.

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

Сравнение производительности C++ php-расширения с нативным кодом

Давно меня интересовал вопрос: насколько увеличивается производительность при переписывании нативного кода в php-расширение.

И вот я решил провести сравнение.

В качестве платформы для написания расширения была выбрана библиотека PHP-CPP.

Пару слов о самой библиотеке PHP-CPP.
Довольно неплохая библиотека. Работать с ней приятно и удобно. Честно говоря, никогда еще не было так легко писать расширения для php.
Из минусов могу отметить недостаток документации. Чтобы разобраться с некоторыми вещами, недостаточно даже примеров, которыми автор снабжает код — приходится смотреть исходники. В частности, я так и не разобрался, как перенести статический метод класса из C++ в статический же метод в php.
Основана она на C++11, т.е. на старых дистрибутивах может потребоваться обновить gcc.

Read full post gblog_arrow_right

Сериализация в PHP

Будут сравниваться 4 способа сериализации:

  1. Стандартная сериализация serialize
  2. JSON
  3. msgpack
  4. igbinary

Кратко об установке

JSON раньше шел в стандартной поставке PHP. Сейчас нужно поставить дополнительное расширение php5-json.

Read full post gblog_arrow_right

Разжился SSD диском

Вот и я разжился SSD диском.

Будет на чем тестить NoSQL SSD хранилища.

В планах потестить на нем RocksDB, LevelDB и, возможно, RethinkDB.

Пластилиновый мультик

Сделали с дочей мультик из пластилина.

Делается так:

convert -delay 20 -loop 0 *.jpg mygif.gif

Вот результат:

Пластилиновый мультик

Еще полезное:

Сделать из кадров ролик:

convert -delay 20 -loop 0 *.jpg mympg.mpg

MOV из gif:

convert mygif.gif mymov.mov

Видео на YouTube:

Смотреть на YouTube

Топ 7 ботов за сутки

По результатам выборки из логов сервера за 1 сутки.

  1. Googlebot — 43 229 запросов
  2. YandexDirect — 21 260
  3. Mediapartners-Google — 14 386
  4. Mail.RU_Bot — 13 715
  5. YandexBot — 13 079
  6. AhrefsBot — 11 997
  7. openstat ru/Bot — 2 709

Выводы:
Гугл предсказуемо обошёл всех и вся. Честь и хвала ему.
Удивил Mail.RU, который обошёл Яндекс.
Что касается Яндекса, то очевидно, что приоритет Яндекса — их рекламная сеть. И уже потом поисковые технологии.

Read full post gblog_arrow_right

Google Chrome и "-" 400 0 "-" "-"

Еще раз к вопросу откуда в логах берутся строки вида:

1.1.1.1 - - [19/Jan/2013:07:19:23 +0400] "-" 400 0 "-" "-"

При медленном соединении удалось отловить эффект появления таких записей в браузере и увидеть все вживую.

Вот тут видно, как Chrome отправил два запроса, держит соединение открытым, а потом закрывает:

chrome-400

А секундой позже уже загружает то, что его просили.

chrome-400-1

Успел сделать снимки экрана.

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

Баним ботов. Часть 2

Небольшой анализ логов сервера. Какие странные сущности обитают в Интернете. И как с ними бороться.

Открытые подключения

В логах nginx’а обнаружил десятки тысяч записей вида:

1.1.1.1 - - [19/Jan/2013:07:19:23 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:23 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:23 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:34 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:34 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:34 +0400] "-" 400 0 "-" "-"
1.1.1.1 - - [19/Jan/2013:07:19:34 +0400] "-" 400 0 "-" "-"

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

Read full post gblog_arrow_right

Баним ботов. Часть 1

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

113.204.67.51 - - [19/Jan/2013:07:22:08 +0400] "GET /phpmyadmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:12 +0400] "GET /PMA/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:17 +0400] "GET /pma/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:17 +0400] "GET /admin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:18 +0400] "GET /dbadmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:19 +0400] "GET /sql/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:20 +0400] "GET /mysql/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:20 +0400] "GET /myadmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:21 +0400] "GET /phpmyadmin2/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:22 +0400] "GET /phpMyAdmin2/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:23 +0400] "GET /phpMyAdmin-2/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:23 +0400] "GET /php-my-admin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:24 +0400] "GET /sqlmanager/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:25 +0400] "GET /mysqlmanager/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:26 +0400] "GET /p/m/a/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:26 +0400] "GET /php-myadmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:27 +0400] "GET /phpmy-admin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:28 +0400] "GET /webadmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:29 +0400] "GET /sqlweb/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:30 +0400] "GET /websql/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:31 +0400] "GET /webdb/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:31 +0400] "GET /mysqladmin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"
113.204.67.51 - - [19/Jan/2013:07:22:32 +0400] "GET /mysql-admin/ HTTP/1.1" 404 564 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)"

и решил я всех этих мерзких ботов забанить.

Read full post gblog_arrow_right

Как в PHP узнать протокол (https)

Оказывается, узнать, что сайт использует SSL и страница открыта по протоколу https — не настолько тривиальная задача, чтобы решить её с наскока.
Однако, решение оказалось достаточно простое.

Проблема заключается в том, что для определения протокола могут быть использованы переменные:

$_SERVER['HTTPS']
$_SERVER['HTTP_SCHEME']
$_SERVER['HTTP_X_FORWARDED_PROTO']

И косвенно:

$_SERVER['SERVER_PORT']

Но все эти переменные, кроме номера порта, почти наверняка будут отсутствовать.
Определять http-схему, основываясь только на номере порта — приемлемое, но не очень гибкое решение.

Read full post gblog_arrow_right