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
Вывод списка страниц с описанием
Для вывода подстраниц (иными словами, дочерних страниц текущей страницы) авторы тем очень часто используют такой код (пример взят из OneTheme):
$children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0');
if ($children) { ?>
<ul>
< ?php echo $children; ?>
</ul>
< ?php } ?>
У wp_list_pages(), на мой взгляд, есть два серьёзных недостатка:
- Хотя для вывода информации нужны всего два поля (
IDиpost_title),wp_list_pages()выбирает всю информацию, что ведёт к увеличению трафика между PHP и MySQL (и, в конечном итоге, сказывается на производительности); - При использовании
wp_list_pages()не получается вывести дополнительную информацию о странице (например, её описание, рейтинг и т.п.).
Апр
2009
Статические переменные внутри метода
В одном из проектов, которые я сопровождаю, обнаружилась одна мерзкая и трудноуловимая ошибка, связанная с использованием статических переменных внутри методов.
Рассмотрим простой пример PHP-кода:
class A {
public function __construct()
{
static $i = 0;
++$i;
print $i . "\n";
}
}
$a = new A();
$b = new A();
?>
Внимание, вопрос: что будет выведено на экран (очень хороший вопрос для собеседования)? Далее »
Автор: Vladimir, опубликовано в: PHP, комментариев: нетАпр
2009
WordPress, FastCGI и редирект 301: часть 2
Более изящное решение, нежели представленное в первой части (WordPress, FastCGI и редирект 301).
В первой части предлагалось при использовании web-сервера nginx закомментировать проверку на SAPI PHP (if ( php_sapi_name() != 'cgi-fcgi' )). Однако есть лучшее решение. Далее »
Мар
2009
PHP 5.2.6 в Debian Lenny: неожиданный сюрприз
Есть сервер с Debian Lenny на борту. На сервер стоит Apache, MySQL, PHP5 — одним словом, стандартный web-сервер. Плюс XCache и ionCube Loader.
С некоторого времени стали замечать, что PHP начал падать с ошибками сегментации, причем падал исключительно CLI, модуль Apache работал исправно. Далее »
Автор: Vladimir, опубликовано в: Linux, PHP, Администрирование, комментариев: 5Мар
2009
WordPress, FastCGI и редирект 301
Всё-таки удивительная штука WordPress… Сегодня чисто случайно обнаружил, что если PHP работает в режиме FastCGI (например, связка WordPress + nginx + PHP), то все редиректы с кодом 301 (Permanent Redirect) превращаются в редиректы с кодом 302 (Temporary Redirect).
Чем это грозит? Если Вы занимаетесь спамомSEO, то Вы, вероятно, знаете, что переход с кодом 302 не передаёт PageRank. Иными словами, если Вы изменили структуру пермалинков или по той или иной причине в Google "раскручена" страница с несколько другой постоянной ссылкой (например, http://example.com/?p=202), то «канонический редирект» (см. wp-includes/canonical.php) не передаст PageRank целевой странице. Далее »
Мар
2009
PHP 5.2.8 в Ubuntu
Просто, как два байта переслать:
echo "deb http://ppa.launchpad.net/tarkus/ubuntu intrepid main" >> /etc/apt/sources.list
echo "deb-src http://ppa.launchpad.net/tarkus/ubuntu intrepid main" >> /etc/apt/sources.list
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com D8A1B072D21E28605A21D829FE91E998CB542C04
aptitude update
aptitude safe-upgrade
Вуаля!
Автор: Vladimir, опубликовано в: Linux, комментариев: 4Фев
2009
WordPress: одновременный логин для HTTP и HTTPS
В WordPress, начиная с версии 2.6, встроена поддержка HTTPS: можно сделать либо HTTPS-логин, либо поместить панель администратора за SSL. Однако, из-за особенностей реализации, когда пользователь входит в систему, он получает cookie либо для HTTP, либо для HTTPS. Иными словами, если пользователь попал на http://example.com/wp-admin/, то при переходе на https://example.com/wp-admin/ ему придётся входить в систему еще раз.
Всё бы ничего, но если плагин делает POST на HTTPS, то пользователь попадает на wp-login.php, который после успешного входа сделает перенаправление (GET) на URL, который ожидает принять POST. При этом если POST шёл на https://example.com/wp-admin/admin.php?page=somepage&noheader=1, то пользователь увидит безобразную страницу. Далее »
Янв
2009
Обновление PHP до 5.2.x в CentOS 5
На сервере с CentOS 5.1 столкнулся с такой проблемой: Apache при открытии PHP-страниц с завидным постоянством писал в лог следующие ошибки:
К сожалению, поиск в Google практических результатов не дал: ошибка могла случаться на любом железе и любой версии Linux. Больше всего жаловались (не)счастливые обладатели Zend Optimizer.
Обновил CentOS до 5.2 (в обновлении пришёл новый libc), но это не помогло. Странно, я видел много серверов, работающих на CentOS без таких ошибок.
Пытаясь найти минимальную конфигурацию, на которой бы воспроизводились ошибки, я отключал один за одним модули Apache, модули PHP, но всё тщетно. Когда же я отключил mod_php, ошибка пропала — на статических страницах всё было прекрасно. Далее »
Автор: Vladimir, опубликовано в: Linux, Администрирование, комментариев: 17Дек
2008

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

