PHP: зависимости времени выполнения между расширениями

Так (как, кстати, рекомендует Sara Golemon) нельзя:

[-]
View Code C
#if ZEND_MODULE_API_NO >= 220050617
static zend_module_dep php_afs_depencies[] ={
    ZEND_MODULE_REQUIRED("krb5");
    {NULL,NULL,NULL}
}
#endif

Потому что даже не скомпилируется, если с ZEND_MODULE_API_NO (не) повезёт. Далее »

Автор: , опубликовано в: C/C++, комментариев: нет
13
Май
2009

О пользе избыточной инициализации, или, В исходный код смотреть вредно

То, что данные нужно инициализировать перед использованием, знают все. Но иногда правильная инициализация — хитрая штука. Я с этим столкнулся, когда писал расширение для , работающее с Voxel Hosting API.

Одна из проблем PHP — плохая документация (отсутствие таковой) по внутреннему API. А из кода не всегда всё однозначно ясно, чо временами приводит к очень милым ошибкам вида «фиг ты меня найдешь» (смягчено из соображений цензуры).

Об одной из таких особенностей я хочу рассказать. Далее »

Автор: , опубликовано в: C/C++, комментариев: нет
7
Май
2009

Вывод списка страниц с описанием

Для вывода подстраниц (иными словами, дочерних страниц текущей страницы) авторы тем очень часто используют такой код (пример взят из OneTheme):

[-]
View Code PHP
< ?php
    $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0');
    if ($children) { ?>
    <ul>
        < ?php echo $children; ?>
    </ul>
< ?php } ?>

У wp_list_pages(), на мой взгляд, есть два серьёзных недостатка:

  1. Хотя для вывода информации нужны всего два поля (ID и post_title), wp_list_pages() выбирает всю информацию, что ведёт к увеличению трафика между и (и, в конечном итоге, сказывается на производительности);
  2. При использовании wp_list_pages() не получается вывести дополнительную информацию о странице (например, её описание, рейтинг и т.п.).

Далее »

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

WordPress, FastCGI и редирект 301: часть 2

Более изящное решение, нежели представленное в первой части (WordPress, FastCGI и редирект 301).

В первой части предлагалось при использовании web-сервера закомментировать проверку на SAPI (if ( php_sapi_name() != 'cgi-fcgi' )). Однако есть лучшее решение. Далее »

Автор: , опубликовано в: nginx, Патчи, комментариев: 3
13
Мар
2009

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

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

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

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

WordPress, FastCGI и редирект 301

Всё-таки удивительная штука … Сегодня чисто случайно обнаружил, что если работает в режиме (например, связка WordPress +  + ), то все редиректы с кодом 301 (Permanent ) превращаются в редиректы с кодом 302 (Temporary ).

Чем это грозит? Если Вы занимаетесь спамомSEO, то Вы, вероятно, знаете, что переход с кодом 302 не передаёт PageRank. Иными словами, если Вы изменили структуру пермалинков или по той или иной причине в Google "раскручена" страница с несколько другой постоянной ссылкой (например, http://example.com/?p=202), то «канонический редирект» (см. wp-includes/canonical.php) не передаст PageRank целевой странице. Далее »

Автор: , опубликовано в: nginx, SEO, WordPress, комментариев: 14
5
Мар
2009

PHP 5.2.8 в Ubuntu

Просто, как два байта переслать:

[-]
View Code Bash
sudo -i
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

Вуаля!

Автор: , опубликовано в: Linux, комментариев: 4
9
Фев
2009

WordPress: одновременный логин для HTTP и HTTPS

В , начиная с версии 2.6, встроена поддержка : можно сделать либо -логин, либо поместить панель администратора за . Однако, из-за особенностей реализации, когда пользователь входит в систему, он получает cookie либо для HTTP, либо для HTTPS. Иными словами, если пользователь попал на http://example.com/wp-admin/, то при переходе на https://example.com/wp-admin/ ему придётся входить в систему еще раз.

Всё бы ничего, но если плагин делает POST на HTTPS, то пользователь попадает на wp-login., который после успешного входа сделает перенаправление (GET) на URL, который ожидает принять POST. При этом если POST шёл на https://example.com/wp-admin/admin.php?page=somepage&noheader=1, то пользователь увидит безобразную страницу. Далее »

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

Обновление PHP до 5.2.x в CentOS 5

На сервере с  5.1 столкнулся с такой проблемой: при открытии -страниц с завидным постоянством писал в лог следующие ошибки:

[-]
View Code Text
*** glibc detected *** /usr/sbin/httpd: corrupted double-linked list: 0x09a939f8 ***

К сожалению, поиск в Google практических результатов не дал: могла случаться на любом железе и любой версии . Больше всего жаловались (не)счастливые обладатели Zend Optimizer.

Обновил CentOS до 5.2 (в обновлении пришёл новый libc), но это не помогло. Странно, я видел много серверов, работающих на CentOS без таких ошибок.

Пытаясь найти минимальную конфигурацию, на которой бы воспроизводились ошибки, я отключал один за одним модули Apache, модули PHP, но всё тщетно. Когда же я отключил mod_php, ошибка пропала — на статических страницах всё было прекрасно. Далее »

Автор: , опубликовано в: Linux, Администрирование, комментариев: 17
21
Дек
2008