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/? Поэтому, когда я делаю make install, они помещаются в каталог пользовательских расширений, и я могу добавить строки extension = / usr / local / php / extensions / memcached.so в мои файлы.ini.

  3. Есть ли когда-нибудь риск при компиляции нового модуля, что он будет находиться в другом каталоге, чем каталог в вопросе № 1?

3 ответа

Решение

"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
Другие вопросы по тегам