Компиляция плагина mysqlnd_uh
Я пытаюсь реализовать mysql logger, похожий на тот, который описан в следующей статье, используя расширение 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
Это работает нормально для части конфигурации, но завершается неудачно в make со следующей ошибкой. Ясно, что он жалуется на то, что не может найти исходный файл, но где он выглядит? Должен ли я передать параметр в 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
Спасибо за любые подсказки! Джейсон
1 ответ
Редактировать: Попробовать # sudo apt-get install php5-dev
это должно установить заголовки, затем попробуйте установить расширение снова. Если это работает, отлично!
Но если это не так, то мы должны идти шаг за шагом. Во-первых, ссылка на компиляцию PHP+Apache предназначена для PHP 4.3, то же самое не может быть правдой для PHP 5.3, эта ссылка должна быть полезна для компиляции PHP 5.3. Попробуйте следовать этим инструкциям
Кстати, что делает # sudo updatedb; locate 'mysqlnd.h'
возвращается? Я предполагаю, что исходники PHP (которые вы, возможно, скачали по этим ссылкам, не размещены в соответствующих местах (или файлы заголовков не существуют) и, следовательно, ошибка
PS: будет обновлять этот ответ по мере его продвижения