Статьи из рубрики «php» RSS

Полезные вещи на PHP

Дочерние рубрики:

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

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

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

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

Автор: , опубликовано в: 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

Особенности магического метода __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

Статические переменные внутри метода

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

Рассмотрим простой пример -кода:

[-]
View Code PHP
< ?php
class A {
    public function __construct()
    {
        static $i = 0;
        ++$i;
        print $i . "\n";
    }
}

$a = new A();
$b = new A();
?>

Внимание, вопрос: что будет выведено на экран (очень хороший вопрос для собеседования)? Далее »

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

PHP 5.2.6 в Debian Lenny: неожиданный сюрприз

Есть сервер с Lenny на борту. На сервер стоит Apache, , 5 — одним словом, стандартный web-сервер. Плюс и ionCube Loader.

С некоторого времени стали замечать, что PHP начал падать с ошибками сегментации, причем падал исключительно CLI, модуль Apache работал исправно. Далее »

Автор: , опубликовано в: Linux, PHP, Администрирование, комментариев: 5
13
Мар
2009

Недокументированные особенности APC

(он же Alternative Cache) — бесплатное расширение к , предназначенное для оптимизации промежуточного кода и кэширования данных и компилированного байт-кода в разделяемой памяти.

Я заинтересовался APC с позиции его возможного применения в плагине WP File Cache, но при реализации модуля столкнулся с некоторыми особенностями (читай: ошибками), о которых документация умалчивает. Далее »

Автор: , опубликовано в: PHP, комментариев: нет
6
Дек
2008

Патч для WP WassUp 1.5.1

Сегодня явно день патчей :-)

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

Сегодняший исправляет:

  • проблему с разделителями каталогов (традиционно);
  • мелкие ошибки, связанные с невалидностью генерируемого HTML-кода;
  • добавляет поддержку строк, состоящим из многобайтных символов (поддержка таких строк требует наличия активированного mb_string);
  • добавляет rel="nofollow" к ссылкам в блоках типа 'Top 5 Referrers', 'Top 5 Search Terms'.

Скачать патч в формате unified diff.

Патч нужно применить рекурсивно к каталогу /wp-content/plugins/wassup.

Автор: , опубликовано в: PHP, Патчи, комментариев: 1
1
Июн
2008

Typo3, ExtDevEval и PHP5: избавляемся от фатальных ошибок

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

Fatal error: Cannot re-assign $this in /var/www/typo3.sjinks.org.ua/typo3conf/ext/extdeveval/class.tx_extdeveval_fetchContentTopMenu. on line 36

Fatal error: Cannot re-assign $this in /var/www/typo3.sjinks.org.ua/typo3conf/ext/extdeveval/class.tx_extdeveval_fetchContentTopMenu.php on line 36
Далее »

Автор: , опубликовано в: PHP, комментариев: нет
12
Май
2008