Хранение PHP-сессий в кэше xCache
Продолжение статьи «Хранение PHP-сессий в базе данных».
Хотя во многих случаях хранение сессий в базе данных удобнее, чем использование стандартного механизма хранения сессий в файлах, для нагруженных сайтов может иметь смысл снять часть нагрузки с сервера баз данных за счёт переноса сессий в разделяемую память.
В данной статье мы рассмотрим хранение сессий PHP в кэше xCache (изменения в коде для использования APC/eAccelerator будут минимальными). Далее »
Автор: Vladimir, опубликовано в: PHP, комментариев: 3Сен
2009
Оптимизация байт-кода в PHP
Я давно задавался вопросом, насколько «умным» является интерпретатор PHP в том, что касается оптимизации. В частности, меня всегда интересовала поддержка исключения неиспользуемого кода (известная как dead code elimination) и распространение константных значений (constant propagation). И теперь, когда я вплотную занялся изучением внутренностей Zend Engine, у меня такая возможность появилась. Далее »
Автор: Vladimir, опубликовано в: PHP, комментариев: 2Сен
2009
Расширения PHP и Doxygen
Любимые разработчиками PHP макросы и их уровень вложенности зачастую оказываются плохо совместимыми с системой документирования исходных текстов Doxygen.
В зависимости от настроек препроцессора Doxygen (в частности, директивы SKIP_FUNCTION_MACROS) отдельные блоки кода могут быть вообще пропущены; например, в коде:
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. Далее »
Сен
2009
Последовательность инициализации и сброса в расширениях PHP
Я сейчас занимаюсь написанием расширения PHP, которое меняет UID/EUID (а также GID/EGID) процесса PHP-интерпретатора на UID/GID владельца DocumentRoot сайта. При этом по замыслу расширение должно отключаться, если SAPI не используется (например, запущена CLI-версия интерпретатора).
Для этой задачи оказалось важным знать точную последовательность инициализации и финализации. Далее »
Автор: Vladimir, опубликовано в: C/C++, PHP, комментариев: нетАвг
2009
Особенности магического метода __call в PHP
Те, кто хорошо знают PHP5, наверняка знакомы или хотя бы раз использовали такой мощный инструмент, как магические методы.
Один из методов, __call(), согласно документации используется при попытке вызова недоступного метода в контексте объекта.
Иными словами, в следующем фрагменте кода
class A {
public function __call($method, $params)
{
print "Attempt to call {$method}\n";
}
}
$a = new A();
$a->someMethod();
?>
будет вызван магический метод A::__call("someMethod", array()), который напечатает
С несуществующими методами всё ясно, но в документации упоминается слово «недоступные» (inaccessible). Далее »
Автор: Vladimir, опубликовано в: PHP, комментариев: 3Июн
2009
Статические переменные внутри метода
В одном из проектов, которые я сопровождаю, обнаружилась одна мерзкая и трудноуловимая ошибка, связанная с использованием статических переменных внутри методов.
Рассмотрим простой пример PHP-кода:
class A {
public function __construct()
{
static $i = 0;
++$i;
print $i . "\n";
}
}
$a = new A();
$b = new A();
?>
Внимание, вопрос: что будет выведено на экран (очень хороший вопрос для собеседования)? Далее »
Автор: Vladimir, опубликовано в: PHP, комментариев: нетАпр
2009
PHP 5.2.6 в Debian Lenny: неожиданный сюрприз
Есть сервер с Debian Lenny на борту. На сервер стоит Apache, MySQL, PHP5 — одним словом, стандартный web-сервер. Плюс XCache и ionCube Loader.
С некоторого времени стали замечать, что PHP начал падать с ошибками сегментации, причем падал исключительно CLI, модуль Apache работал исправно. Далее »
Автор: Vladimir, опубликовано в: Linux, PHP, Администрирование, комментариев: 5Мар
2009
Недокументированные особенности APC
APC (он же Alternative PHP Cache) — бесплатное расширение к PHP, предназначенное для оптимизации промежуточного кода и кэширования данных и компилированного байт-кода в разделяемой памяти.
Я заинтересовался APC с позиции его возможного применения в плагине WP File Cache, но при реализации модуля столкнулся с некоторыми особенностями (читай: ошибками), о которых документация умалчивает. Далее »
Автор: Vladimir, опубликовано в: PHP, комментариев: нетДек
2008
Патч для WP WassUp 1.5.1
Сегодня явно день патчей
Полтора месяца назад я уже писал про замечательный плагин Wassup, а также о его нелюбви к Windows. Помимо этой ошибки, я обратил внимание на нелюбовь плагина к строкам, состоящим из многобайтных символов (например, UTF-8).
Сегодняший патч исправляет:
- проблему с разделителями каталогов (традиционно);
- мелкие ошибки, связанные с невалидностью генерируемого HTML-кода;
- добавляет поддержку строк, состоящим из многобайтных символов (поддержка таких строк требует наличия активированного расширения PHP mb_string);
- добавляет
rel="nofollow"к ссылкам в блоках типа 'Top 5 Referrers', 'Top 5 Search Terms'.
Скачать патч в формате unified diff.
Патч нужно применить рекурсивно к каталогу /wp-content/plugins/wassup.
Июн
2008
Typo3, ExtDevEval и PHP5: избавляемся от фатальных ошибок
Так уж случилось, что пришлось заняться разработкой расширений для Typo3. Так вот получилось, что буквально через 15 минут тесного знакомства я нарвался на фатальную ошибку, вызванную расширением ExtDevEval:
Fatal error: Cannot re-assign $this in /var/www/typo3.sjinks.org.ua/typo3conf/ext/extdeveval/class.tx_extdeveval_fetchContentTopMenu.php on line 36
Автор: Vladimir, опубликовано в: PHP, комментариев: нетМай
2008


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

