PHP: красота кода сказывается на производительности: часть 2

В прошлой части:

  • if быстрее, чем switch;
  • echo быстрее, чем print;
  • явная проверка на (не)нулевое значение медленнее, чем неявная.

А также:

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

Продолжим. Далее »

Автор: , опубликовано в: PHP, комментариев: 4
7
Окт
2009

PHP: красота кода сказывается на производительности

Недавно я для себя открыл, что PHP не умеет оптимизировать код, а тут новый удар: оказывается, что красота кода отрицательно влияет на . Далее »

Автор: , опубликовано в: PHP, комментариев: 11
25
Сен
2009

Хранение PHP-сессий в кэше xCache

Продолжение статьи «Хранение PHP-сессий в базе данных».

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

В данной статье мы рассмотрим хранение сессий в кэше (изменения в коде для использования APC/ будут минимальными). Далее »

Автор: , опубликовано в: PHP, комментариев: 3
19
Сен
2009

Оптимизация байт-кода в PHP

Я давно задавался вопросом, насколько «умным» является интерпретатор в том, что касается оптимизации. В частности, меня всегда интересовала поддержка исключения неиспользуемого кода (известная как dead code elimination) и распространение константных значений (constant propagation). И теперь, когда я вплотную занялся изучением внутренностей , у меня такая возможность появилась. Далее »

Автор: , опубликовано в: PHP, комментариев: 2
15
Сен
2009

Расширения PHP и Doxygen

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

В зависимости от настроек препроцессора Doxygen (в частности, директивы SKIP_FUNCTION_MACROS) отдельные блоки кода могут быть вообще пропущены; например, в коде:

[-]
View Code C
PHP_INI_BEGIN()
    STD_PHP_INI_BOOLEAN("chuid.disable_posix_setuid_family", "1",     PHP_INI_SYSTEM, OnUpdateBool,   disable_setuid, zend_chuid_globals, chuid_globals)
    STD_PHP_INI_BOOLEAN("chuid.never_root",                  "1",     PHP_INI_SYSTEM, OnUpdateBool,   never_root,     zend_chuid_globals, chuid_globals)
    STD_PHP_INI_BOOLEAN("chuid.cli_disable",                 "1",     PHP_INI_SYSTEM, OnUpdateBool,   cli_disable,    zend_chuid_globals, chuid_globals)
    STD_PHP_INI_BOOLEAN("chuid.be_secure",                   "1",     PHP_INI_SYSTEM, OnUpdateBool,   be_secure,      zend_chuid_globals, chuid_globals)
    STD_PHP_INI_ENTRY("chuid.default_uid",                   "65534", PHP_INI_SYSTEM, OnUpdateLong,   default_uid,    zend_chuid_globals, chuid_globals)
    STD_PHP_INI_ENTRY("chuid.default_gid",                   "65534", PHP_INI_SYSTEM, OnUpdateLong,   default_gid,    zend_chuid_globals, chuid_globals)
    STD_PHP_INI_ENTRY("chuid.global_chroot",                 NULL,    PHP_INI_SYSTEM, OnUpdateString, global_chroot,  zend_chuid_globals, chuid_globals)
PHP_INI_END()

Блок PHP_INI_BEGIN()PHP_INI_END() может быть рассмотрен как функциональный макрос и проигнорироваться Doxygen. Либо, если директива SKIP_FUNCTION_MACROS установлена в No, распознать декларации PHP_INI_BEGIN() и ZEND_DECLARE_MODULE_GLOBALS() как функции.

У меня не получилось никаким настройками (кроме ручного задания соответствия макросов) заставить Doxygen развернуть макросы из zend_module_entry или всякие PHP_MINIT_FUNCTION. Далее »

Автор: , опубликовано в: C/C++, PHP, комментариев: нет
6
Сен
2009

Последовательность инициализации и сброса в расширениях PHP

Я сейчас занимаюсь написанием расширения , которое меняет UID/EUID (а также GID/EGID) процесса -интерпретатора на UID/GID владельца DocumentRoot сайта. При этом по замыслу расширение должно отключаться, если SAPI не используется (например, запущена CLI-версия интерпретатора).

Для этой задачи оказалось важным знать точную последовательность инициализации и финализации. Далее »

Автор: , опубликовано в: C/C++, PHP, комментариев: нет
29
Авг
2009

oDesk Time Tracker Vulnerabilities

  1. Time Tracker does not verify the certificate of the host it connects to thus becoming vulnerable to various Man-in-the-Middle attacks (if an attacker is able to spoof DNS for team.odesk.com — say, by setting up a fake DHCP and DNS servers in the local network — or posion the DNS cache or whatever — this is doable). Далее »
Автор: , опубликовано в: Безопасность, комментариев: 3
15
Июн
2009

WordPress 2.8 и $_REQUEST

Тем, у кого возникли проблемы с интеграцией в сторонних приложений, использующих аутентификацию по cookie: разработчики в релизе 2.8 переплюнули сами себя и добавили одну фичу: выбросили из суперглобальной переменной $_REQUEST данные из $_COOKIE. Далее »

Автор: , опубликовано в: WordPress, комментариев: нет
14
Июн
2009

Особенности магического метода __call в PHP

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

Один из методов, __call(), согласно документации используется при попытке вызова недоступного метода в контексте объекта.

Иными словами, в следующем фрагменте кода

[-]
View Code PHP
< ?php
    class A {
        public function __call($method, $params)
        {
            print "Attempt to call {$method}\n";
        }
    }

    $a = new A();
    $a->someMethod();
?>

будет вызван магический метод A::__call("someMethod", array()), который напечатает

[-]
View Code Text
Attempt to call someMethod

С несуществующими методами всё ясно, но в документации упоминается слово «недоступные» (inaccessible). Далее »

Автор: , опубликовано в: PHP, комментариев: 3
7
Июн
2009

Плагин Redirect от Nick Berlette

Сегодня по долгу работы пришлось столкнуться с плагином Redirect от Nick Berlette. выполняет перенаправление на URL, заданный в Произвольных полях записи или страницы. Сам по себе простой — кода всего 10 строк. Я бы на него даже не обратил внимание, если бы CLI-скрипт не вернул фатальную ошибку. Далее »

Автор: , опубликовано в: Плагины WordPress, комментариев: 4
15
Май
2009