Pull to refresh

Пишем расширения для PHP на C (Си)

Reading time 7 min
Views 2.9K
Lumber room
Современному PHP разработчику это знание может понадобиться скорее для расширения сознания, чем непосредственное руководство к действию, но несмотря на то, что в PHP уже встроено практически все необходимое, а в разнообразных PEAR и PECL репозитариях можно найти пакет дополнений на любой вкус, многим думаю будет интересно, а некоторым и полезно узнать как и что работает внутри PHP.

И раз уж Zend предоставил нам такие удобные инструменты, почему бы ими не воспользоваться? Например для оптимизации каких-то процессов, сокрытия своего когда в коммерческих приложениях и встраивания механизма лицензий, реализации многопоточности или для чего-то еще…

Читать дальше →
Total votes 32: ↑29.5 and ↓2.5 +27
Comments 12

AMQP теперь и в PHP

Reading time 3 min
Views 10K
Lumber room
типа Введение
Протокол AMQP хорошо был описан в статьях AMQP по русски, RabbitMQ: Введение в AMQP AMQP — практика использования и мне не хотелось бы повторяться.

AMQP используется в серверах очередей: ZeroMQ, ActiveMQ, RabbitMQ.

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

Широкое распространение AMQP в WEB разработках разработках сдерживается двумя причинами: отсутствием необходимых навыков (практики) его использования и малой клиентской поддержкой. В основном есть клиенты на языках с, java, python, с#. Большая популярность РНР в WEB разработках жалала бы видеть и свой AMQP-клиент.
Читать дальше →
Total votes 19: ↑12 and ↓7 +5
Comments 15

Новые идеи по АПИ RabbitMQ AMQP для PHP

Reading time 2 min
Views 2.5K
Lumber room
Недавно опубликовал разработанное ранее PHP API для RabbitMQ «AMQP теперь и для РНР»

При обсуждении было предложено сделать PHP API более объектной моделью,
более близкой к модели, предложенной в Протоколе AMQP.

Код немного усложнится, но объектная модель будет более красивой,

Прежде чем перейти к кодированию, представляю на обсуждение новое API
Читать дальше →
Total votes 8: ↑5 and ↓3 +2
Comments 3

Пишем PHP extension

Reading time 8 min
Views 32K
PHP *
А давайте сегодня взглянем на PHP немного с другой точки зрения, и напишем к нему расширение. Так как на эту тему уже были публикации на Хабре (здесь и здесь), то не будем углубляться в причины того, для чего это может оказаться полезным и для чего может быть использовано на практике. Эта статья расскажет, как собирать простые расширения под Windows с использованием Visual C++ и под Debian с использованием GCC. Также я постараюсь немного осветить работу с PHP-массивами внутри расширений и провести сравнение производительности алгоритма, написанного на native PHP и использующего код, написанный на C.

Писать будем расширение под PHP версии 5.3.
Total votes 121: ↑117 and ↓4 +113
Comments 16

Расширение для PHP или все будет в Zephir'e

Reading time 2 min
Views 24K
PHP *
Recovery mode
imageНаверное у каждого PHP разработчика (и не только PHP) есть мечта — написать своё расширение для PHP, которое по определению работает быстрее интерпретируемого кода, при этом не вникая в тонкости Zend Engine, а еще лучше — не зная C++. И вот близится тот день, когда мечта станет явью. Хочу вам рассказать об очень интересном языке программирования, который называется Zephir. Кому лень читать, проходите на сайт и следуйте инструкциям, а я расскажу о том, как написать свое расширение и о подводных камнях, которые встречаются на сием пути.
Читать дальше →
Total votes 50: ↑41 and ↓9 +32
Comments 37

Асинхронный Php extension для работы с бд Cassandra без Thrift

Reading time 2 min
Views 7.9K
Website development *PHP *
Recovery mode
Приветствую, хабрасообщество!
Думаю многие кто работал с базой Cassandra из php знают, что все существующие драйвера используют в себе Thrift интерфейс, который объявлен как deprecated ещё в версии 0.8.
Вместо него разработчики рекомендуют использовать новый интерфейс доступа к базе CQL (Cassandra Query Language), но драйвера под php для нового протокола уже очень длительное время нет. В официальном репозитории Datastax существуют драйвера для C++, Java, C# и Python. Как известно сам Php написан на Си, а значит, закатав рукава мы можем подружить официальный асинхронный драйвер C++ с Php. Кому интересно что из этого получилось — прошу под кат.
Читать дальше →
Total votes 18: ↑17 and ↓1 +16
Comments 12

Ускорение работы Symfony-бандла с помощью Zephir

Reading time 2 min
Views 5.5K
Website development *PHP *Symfony *
В ряде Symfony-проектов у нас используется hstore. Для тех, кто не в курсе, hstore — это PostgreSQL-модуль, позволяющий сохранять массивы значений в одном поле. Мы накидали отдельны DBAL-тип hstore, а также тип поля hstore для Doctrine ORM, для прозрачного работы с такого рода полями.

Оформлено все в Symfony-бандл Intaro\HStoreBundle. Но речь в целом не о бандле. Речь о том, как мы попробовали оптимизировать его с помощью Zephir.
Читать дальше →
Total votes 17: ↑14 and ↓3 +11
Comments 9

PHP extension. Пишем простой массив с Traversable и ArrayAccess

Reading time 26 min
Views 9.9K
PHP *C *
Tutorial
В этой статье предлагаю на примере простого массива рассмотреть как именно работают внутренние интерфейсы Traversable и ArrayAccess.

Сразу приведу список ресурсов, на которые далее по тексту будет множество ссылок.

И про платформу: я писал код по ubuntu, так что для других linux дистрибутивов (да и OS X) понадобится минимум изменений (поменять apt-get). Если хотите писать под Windows, то придется поискать информацию в других интернетах (все равно никто не пишет код по windows).

Картинки не будет. Приступаем.
Total votes 29: ↑29 and ↓0 +29
Comments 5

Расширение PHP и Kotlin Native. Часть вторая, осознанная

Reading time 4 min
Views 3.3K
Альфа-Банк corporate blog Abnormal programming *PHP *Programming *Kotlin *

Краткое содержание первой части:


  1. Установка и настройка инструментария.
  2. Написание функции helloWorld() на Kotlin Native и компиляция ее в shared library.
  3. Доступ к этой функции из C-кода расширения PHP.


В этой статье я буду рассказывать про создание инструментария для написания расширения PHP без необходимости трогать Си, исключительно на K/N.

Кому интересно — добро пожаловать под кат.
Кому читать не интересно, а просто хочется посмотреть — добро пожаловать на github
Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Comments 0

Расширение PHP и Kotlin Native. Часть третья, наверное финальная

Reading time 7 min
Views 2.8K
Альфа-Банк corporate blog Abnormal programming *PHP *Kotlin *
В первой части рассказываются совсем базовые вещи про настройку инструментария и общие концепции.

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

В этой статье будет чуть больше хардкора про интероп Си и K/N, много макросов, боли, безысходности и «лучей добра». Конечно же будет глава с рассказом о достижениях (сам себя не похвалишь… и в качестве бонуса рассказ о эпичном факапе.
Читать дальше →
Total votes 15: ↑15 and ↓0 +15
Comments 0

Хитрое префиксное дерево Си реализация

Reading time 5 min
Views 8.6K
PHP *C *
image

Введение


Прошло долгих четыре месяца с момента публикации статьи о моей попытке низкоуровневой реализации префиксного дерева. Несмотря на все мои старания потолок на который оказалась способна моя прошлая реализация префиксного дерева был ~80 тыс. слов в секунду. Я потратил тогда кучу сил и времени, но полученный результат сгодился бы только как лабораторная работа по информатике.

Многие тогда мне говорили: «Не изобретай велосипед, который уже изобрели! Используй готовое решение». Сложность в том, что мне не удавалось использовать что-то, что я не понимаю хотя бы в общих очертаниях.

Префиксное дерево я кажется понял, и вот чего удалось добиться.
Читать дальше →
Total votes 23: ↑22 and ↓1 +21
Comments 15

Как сделать расширение на PHP7 сложнее, чем «hello, world», и не стать красноглазиком. Часть 1

Reading time 9 min
Views 11K
PHP *C *
Tutorial

Зачем?


Я пишу эту статью для того, чтобы путь, который у меня занял в общей сложности не меньше года, читатель смог пройти за пару часов. Как показал мой личный опыт, просто программировать на Си несколько легче, чем заставить работать серьезное расширение для PHP. Здесь я максимально подробно расскажу вам о том, как сделать расширение на примере библиотеки libtrie, реализующей префиксное дерево, более известное как trie. Я буду писать и параллельно выполнять описываемые действия на свежеустановленной системе Lubuntu 18.04.

Начнем.
Читать дальше →
Total votes 26: ↑25 and ↓1 +24
Comments 11

Как сделать расширение на PHP7 сложнее, чем «hello, world», и не стать красноглазиком. Часть 2

Reading time 8 min
Views 4.8K
PHP *C *
Tutorial

Краткое содержание первой части


В первой части я сделал болванку расширения, заставил ее правильно работать в IDE Clion, написал функцию-аналог my_array_fill() и проверил ее работоспособность в php.

Что теперь?


Теперь я запилю код библиотеки libtrie в наше расширение.

Немного расскажу как можно заставить работать старые php5 расширения в php7.
Дальше я сделаю несколько основных функций из этой библиотеки в php и проверю, что получилось.
Читать дальше →
Total votes 16: ↑16 and ↓0 +16
Comments 8