Я пытаюсь реализовать регистратор mysql, аналогичный тому, что описан в следующей статье, с использованием расширения mysqlnd_uh.
http://blog.mayflower.de/archives/578-MySQLnd-Plugins-Writing-a-MySQL-Query-Logger-in-PHP.html
Предполагается, что он будет работать так, что он будет перехватывать вызовы, которые входят в функции mysql и mysqli, в прокси-класс, где мы можем перехватывать вызов для целей регистрации. Естественно, для этой клиентской библиотеки требуется собственный драйвер Mysql, который не установлен вместе с PHP 5.3, поэтому я выполнил процедуры, описанные в этом руководстве, чтобы проверить исходный код Apache и PHP и скомпилировать их на моей виртуальной машине с последней версией Ubuntu с параметры компиляции для mysqli и mysql установлены на mysqlnd.
http://www.web-tech-india.com/articles/php/compiling_php_apache/
Похоже, это сработало хорошо, поскольку я могу получить доступ к функции mysqli_fetch_all, которая поддерживается только из mysqlnd.
Теперь я пытаюсь установить плагин mysqlnd_uh с помощью pecl.
sudo /home/jason/pear/bin/pecl install mysqlnd_uh-alpha
Это работает нормально для части настройки, но не удается выполнить со следующей ошибкой. Ясно, что он жалуется на то, что не нашел исходный файл, но где его искать? Должен ли я передать параметр в pecl, чтобы указать, где находится моя копия исходного кода php? В учебнике мне было сказано скомпилировать apache с параметром --enable-so, может ли это вызывать путаницу?
running: make
/bin/bash /tmp/pear/install/pear-build-roothNJj2h/mysqlnd_uh-0.1.0a1/libtool --mode=compile cc -I. -I/tmp/pear/install/mysqlnd_uh -DPHP_ATOM_INC -I/tmp/pear/install/pear-build-roothNJj2h/mysqlnd_uh-0.1.0a1/include -I/tmp/pear/install/pear-build-roothNJj2h/mysqlnd_uh-0.1.0a1/main -I/tmp/pear/install/mysqlnd_uh -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -c /tmp/pear/install/mysqlnd_uh/php_mysqlnd_uh.c -o php_mysqlnd_uh.lo
libtool: compile: cc -I. -I/tmp/pear/install/mysqlnd_uh -DPHP_ATOM_INC -I/tmp/pear/install/pear-build-roothNJj2h/mysqlnd_uh-0.1.0a1/include -I/tmp/pear/install/pear-build-roothNJj2h/mysqlnd_uh-0.1.0a1/main -I/tmp/pear/install/mysqlnd_uh -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DHAVE_CONFIG_H -g -O2 -c /tmp/pear/install/mysqlnd_uh/php_mysqlnd_uh.c -fPIC -DPIC -o .libs/php_mysqlnd_uh.o
In file included from /tmp/pear/install/mysqlnd_uh/php_mysqlnd_uh.c:23:0:
/tmp/pear/install/mysqlnd_uh/mysqlnd_uh.h:46:33: fatal error: ext/mysqlnd/mysqlnd.h: No such file or directory
compilation terminated.
make: *** [php_mysqlnd_uh.lo] Error 1
ERROR: `make' failed
Спасибо за любые подсказки! Джейсон
Изменить: попробовать # sudo apt-get install php5-dev
который должен установить заголовки, затем попробуйте установить расширение еще раз. Если работает - отлично!
Но если это не так, мы должны действовать постепенно. Во-первых, ссылка на компиляцию PHP + Apache предназначена для PHP 4.3, чего нельзя сказать о PHP 5.3, эта ссылка должен подходить для компиляции PHP 5.3. Попробуйте следовать этим инструкциям
Кстати, что значит # sudo updatedb; locate 'mysqlnd.h'
возвращается? Я предполагаю, что источники PHP (которые вы могли загрузить с помощью этих ссылок, не размещены в соответствующих местах (или файлы заголовков не существуют) и, следовательно, ошибка
PS: будет обновлять этот ответ по мере его продвижения