我正在编译php扩展(memcached和xdebug),当我运行make install时,它们一直被安装到/ usr / local / php / lib / php / extensions / no-debug-non-zts-20090626。 所以有几个问题:
no-debug-non-zts-20090626甚至意味着什么,为什么它是默认的?
编辑php.ini文件并将extension_dir指令设置为上述目录是一种很好的做法吗? 还是应该用PREFIX = / usr / local / php / extensions来编译每个模块? 所以,当我做安装,他们被放到一个自定义的扩展目录,然后我可以添加扩展= / usr / local / php / extensions / memcached.so行到我的.ini文件。
在编译一个新的模块时是否有风险,它会进入与#1目录不同的目录?
“no-debug-non-zts-20090626”表示它没有debugging标志,没有ZTS,这是PHP用来表示内部线程安全的缩写。 datestamp用于标识内部API版本。 我很确定,一个标识PHP 5.3。
您可能不希望自己编译这些问题,从而导致这些问题需要解答,而是希望真正查找由您的操作系统发行版或受信任的第三方提供的这些模块的预编译版本。 Memcached和xdebug是非常常见的扩展,有可能已经很容易为您提供。
如果不这样做,你可能想用pecl工具来下载,编译和安装。 这些工具的存在是有原因的。
最后没有自定义configuration模块的位置,而是我创build了扩展.ini文件,每个扩展名使用完整的模块uri加载扩展名:
; memcached.ini extension=/path/to/php/lib/php/extensions/no-debug-non-zts-20090626/memcached.so
这样,当我做make install ,我不需要做任何符号链接等。
一个旁注,如果我不使用自定义.ini文件中的完整模块uri,那么PHP无法find该模块,这是奇怪的,因为如果我将以下内容添加到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