Все лгут
Вчера наткнулся на недокументированные функции ionCube Loader, сегодня набрёл на давний пост на форуме ionCube, где Nick Lindridge (гендиректор ionCube Ltd или кто-то в этом духе) рассказывал интересующемуся пользователю, что функции _dyuweyrj4() и _dyuweyrj4r() при вызове возвращают «жемчужины мудрости». Далее »
Окт
2010
Создание пользовательских классов из расширений PHP
Задача: нужно создать класс из расширения PHP, при этом созданный класс должен быть виден только в пределах выполнения одного запроса. При этом должно поддерживаться наследование классов, реализация интерфейсов, а также автоматическая загрузка классов (spl_autoload_register/__autoload).
Зачем это нужно: расширения PHP/Zend обычно гораздо быстрее PHP-кода. Капитан Очевидность не может не заметить, что вынесение критичных по быстродействию и потреблению памяти участков кода в расширение PHP позволяет снизить объём потребляемой памяти («родные» типы данных языка C компактнее zval) и увеличить быстродействие (машинный код выполняется явно быстрее интерпретируемого).
Поддержка автоматической загрузки полезна, если, например, используется фреймворк наподобие Kohana, позволяющий расширять функциональность системных классов без изменения их кода (что достигается благодаря использованию каскадной файловой системы). Далее »
Автор: Wandering Soul, опубликовано в: Zend, комментариев: 3Окт
2010
Простой DoS для PHP
Копался сегодня во внутренностях PHP, и обнаружил такую вещь: функция zend_hash_sort() (она вызывается из функций типа usort() и прочих) сортирует не сам массив (в терминах Zend Engine), а массив (в терминах языка C) указателей на элементы массива (в терминах Zend Engine), а потом по отсортированному C-массиву пересоздаёт PHP-массив. Далее »
Окт
2009
Оптимизация байт-кода в PHP
Я давно задавался вопросом, насколько «умным» является интерпретатор PHP в том, что касается оптимизации. В частности, меня всегда интересовала поддержка исключения неиспользуемого кода (известная как dead code elimination) и распространение константных значений (constant propagation). И теперь, когда я вплотную занялся изучением внутренностей Zend Engine, у меня такая возможность появилась. Далее »
Автор: Vladimir, опубликовано в: PHP, комментариев: 2Сен
2009
Последовательность инициализации и сброса в расширениях PHP
Я сейчас занимаюсь написанием расширения PHP, которое меняет UID/EUID (а также GID/EGID) процесса PHP-интерпретатора на UID/GID владельца DocumentRoot сайта. При этом по замыслу расширение должно отключаться, если SAPI не используется (например, запущена CLI-версия интерпретатора).
Для этой задачи оказалось важным знать точную последовательность инициализации и финализации. Далее »
Автор: Vladimir, опубликовано в: C/C++, PHP, комментариев: нетАвг
2009
PHP: зависимости времени выполнения между расширениями
Так (как, кстати, рекомендует Sara Golemon) нельзя:
static zend_module_dep php_afs_depencies[] ={
ZEND_MODULE_REQUIRED("krb5");
{NULL,NULL,NULL}
}
#endif
Потому что даже не скомпилируется, если с ZEND_MODULE_API_NO (не) повезёт. Далее »
Май
2009
О пользе избыточной инициализации, или, В исходный код смотреть вредно
То, что данные нужно инициализировать перед использованием, знают все. Но иногда правильная инициализация — хитрая штука. Я с этим столкнулся, когда писал расширение для PHP, работающее с Voxel Hosting API.
Одна из проблем PHP — плохая документация (отсутствие таковой) по внутреннему API. А из кода Zend Engine не всегда всё однозначно ясно, чо временами приводит к очень милым ошибкам вида «фиг ты меня найдешь» (смягчено из соображений цензуры).
Об одной из таких особенностей я хочу рассказать. Далее »
Автор: Vladimir, опубликовано в: C/C++, комментариев: нетМай
2009

Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.

