PHP - 扩展 - no-debug-non-zts-xxxxxxxx

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 编译每个模块?因此,当我执行 make install 时,它们会被放入自定义扩展目录中,然后我可以将 extension=/usr/local/php/extensions/memcached.so 行添加到我的 .ini 文件中。

  3. 编译新模块时,是否存在风险,即它会进入与问题 1 中的目录不同的目录?

答案1

“no-debug-non-zts-20090626” 表示它是在没有调试标志的情况下构建的,并且没有 ZTS,这是 PHP 用来表示内部线程安全的首字母缩略词。日期戳用于识别内部 API 版本。我很确定有一个标识是 PHP 5.3。

您无需自己编写这些内容,从而导致这些问题需要答案,而是大概想要真正寻找由您的操作系统发行版或受信任的第三方提供的这些模块的预编译版本。Memcached 和 xdebug 是非常常见的扩展,而且很可能您已经可以轻松获得它们。

否则,你大概希望使用该pecl工具为您下载、编译和安装这些内容。这些工具的存在是有充分理由的。

答案2

最终没有自定义配置模块的位置,而是仅创建了扩展 .ini 文件,每个文件都使用完整模块 uri 加载扩展:

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

这样,当我这样做时make install,我不需要进行任何符号链接等。

附注:如果我在自定义 .ini 文件中未使用完整模块 uri,则 PHP 无法找到该模块,这很奇怪,因为如果我将以下内容添加到 php.ini,它就可以正常工作:

; php.ini
extension=memcached.so

无论如何,让它工作起来。

答案3

检查是否找到库:

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

相关内容