Назад | Перейти на главную страницу

PHP - Расширения - no-debug-non-zts-xxxxxxxx

Я компилирую расширения php (memcached и xdebug), и когда я запускаю make install, они продолжают устанавливаться в / usr / local / php / lib / php / extensions / no-debug-non-zts-20090626. Итак, несколько вопросов:

  1. Что вообще означает no-debug-non-zts-20090626 и почему это значение по умолчанию?

  2. Является ли хорошей практикой редактировать файл php.ini и устанавливать директиву extension_dir для вышеупомянутого каталога? Или мне следует скомпилировать каждый модуль с PREFIX = / usr / local / php / extensions? Поэтому, когда я выполняю установку, они помещаются в каталог настраиваемых расширений, после чего я могу добавить строки extension = / usr / local / php / extensions / memcached.so в свои файлы .ini.

  3. Существует ли когда-либо риск при компиляции нового модуля, что он окажется в другом каталоге, чем каталог, о котором идет речь # 1?

«no-debug-non-zts-20090626» означает, что он построен без флага отладки и без ZTS, который является аббревиатурой, которую PHP использует для обозначения безопасности внутренних потоков. Отметка даты используется для идентификации внутренней версии API. Я почти уверен, что один из них идентифицирует PHP 5.3.

Вместо того, чтобы собирать их самостоятельно и, таким образом, требовать ответов на эти вопросы, вы наверное действительно хотите найти предварительно скомпилированные версии этих модулей, предоставленные вашим дистрибутивом ОС или доверенной третьей стороной. Memcached и xdebug - удивительно распространенные расширения, и есть вероятность, что они уже легко доступны для вас.

В противном случае вы наверное хочу использовать pecl инструмент для их загрузки, компиляции и установки. Эти инструменты существуют не зря.

Закончился нестандартной настройкой местоположения модуля, вместо этого я просто создал файлы расширения .ini, каждый из которых загружает расширение с использованием полного uri модуля:

; memcached.ini
extension=/path/to/php/lib/php/extensions/no-debug-non-zts-20090626/memcached.so

Таким образом, когда я это сделаю make install, Мне не нужно делать никаких символических ссылок и т. Д.

Одно замечание: если я не использую полный uri модуля в пользовательском файле .ini, то PHP не может найти модуль, что является странным, потому что если я добавлю следующее в php.ini, он будет работать нормально:

; php.ini
extension=memcached.so

Во всяком случае, заставил его работать.

Проверяем, найдены ли библиотеки:

ldd /usr/lib/php/extensions/no-debug-non-zts-xxxxxxxx/memcached.so

Хозяйственные постройки:

yum -y install gcc make automake autoconf gcc-c++ flex bison
yum remove libmemcached
/usr/bin/pecl uninstall memcached
wget https://launchpad.net/libmemcached/1.0/1.0.18/+download/libmemcached-1.0.18.tar.gz
tar -xvzf libmemcached-1.0.18.tar.gz
cd libmemcached-1.0.18
./configure
make && make install
/usr/bin/pecl install memcached-2.2.0
echo "extension=memcached.so" >/etc/php.d/memcached.ini
service httpd restart
/usr/bin/php -i | grep memcached
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php

Проверить журналы:

tail -f /var/log/httpd/error_log