introduce lite
PHP Extension Community Library php 的 C 扩展仓库,即 php 的 so 格式的扩展
需要安装C编译器
yum groupinstall "Development tools"
yum -y install gcc gcc-c++ make cmake automake autoconf
安装redis扩展
pecl info redis
pecl install redis
pecl unisntall redis
也可以使用安装包
wget http://pecl.php.net/get/redis-3.0.0.tgz
pecl install redis-3.0.0.tgz
就会生成redis.so
文件,加入到php.ini
中即可
执行命令
/usr/local/php/bin/pecl install redis-2.2.8
可以看到,pecl会自动帮我们下载redis扩展的源码包,然后自动编译安装,安装好之后,扩展也是放在/usr/local/php/lib/php/extensions/no-debug-zts-20131226/
下,我们只要在php.ini
中添加extension=redis.so
就可以了.pecl安装php扩展的简单语法如下 :
pecl install 扩展名-版本号
PECL 安装介绍
» PECL 是通过 » PEAR 打包系统来的 PHP 扩展库仓库,本章内容示范了怎样取得并安装 PECL 扩展。
以下指南中假定 /your/phpsrcdir/ 是 PHP 源程序的路径,extname 是 PECL 扩展库的名字。自己根据实际情况调整。此外还假定用户熟悉 » pear 命令。 PEAR 手册里 pear 命令的信息同样适用于 pecl。
要使用共享扩展库,必须经过编译,安装,然后加载。以下说明的方法提供了怎样编译和安装扩展库的各种指导,但并不会自动加载它们。可以通过将其包括在 php.ini 中用 extension PHP 指令加载,或者 用 dl() 函数。
当编译 PHP 模块时,拥有各种工具(autoconf,automake,libtool 等)的已知好使的版本很重要。所需工具和所需版本的详情见» 匿名 Git 说明。
下载 PECL 扩展库
pecl install extname 命令会自动下载扩展代码, 所以在这种情况下不需要再次下载。
» http://pecl.php.net/ PECL 网站包括有 PHP 开发组提供的不同扩展库的信息。这里的信息包括:更新记录,版本说明,需求,以及其它信息。
pecl download extname PECL 网站中列出的 PECL 扩展库的发行版本可以用 » pear 命令来下载和安装。也可以指明具体的修正版。
SVN 大多数 PECL 扩展库也在 SVN 中。其 web 页面见 be seen at » http://svn.php.net/viewvc/pecl/。要直接从 SVN 中下载,用以下命令:
$ svn checkout http://svn.php.net/repository/pecl/extname/trunk extname
在 Windows 上安装 PHP 扩展
在 Windows 上有两种加载 PHP 扩展的方式:把扩展编译进 PHP,或者加载 DLL。加载预编译的扩展是更简单更被推荐的方式。
要加载某扩展,需要在系统中有其相对应的“.dll”文件。所有扩展都会由 PHP 小组定期自动编译(如何下载见下节)。
要将一扩展编译入 PHP,请参考从源程序编译一章。
要编译一个独立的扩展(即 DLL 文件),请参考从源程序编译一章。如果在 PHP 发行包和 PCEL 中都没有某 DLL 文件,那可能需要自己编译之后才能使用该扩展。
去哪里找扩展库?
PHP 扩展库通常称为“php_*.dll”(其中星号代表具体某扩展的名字),位于“PHP\ext”目录下(在 PHP 4 中位于“PHP\extensions”目录下)。
PHP 发行包中包括了大多数开发者最常用到的扩展库。这些被称为“核心”扩展库。
不过呢,如果用户所需要的功能并没有被任何核心扩展提供,那还是有可能在 PECL 中找到。PHP Extension Community Library(PECL,PHP 扩展社区库)是个 PHP 扩展的储存室,提供了对于所有已知扩展的下载及开发途径的指南。
如果用户开发了一个自己使用的扩展,可以考虑将其发布到 PECL 中以便于其他有相同需求的用户使用。一个很好的副作用是可以得到其他用户的反馈,感谢,错误报告甚至修正/更新。不过在向 PECL 发布扩展之前,请先阅读 http://pecl.php.net/package-new.php。
下载哪个扩展?
用户常常会发现每个 DLL 都有好几个版本:
不同的版本号(至少前两个数字要一致)
不同的线程安全性设定
不同的处理器体系(x86,x64,…)
不同的排错设定
其它
请记住用户的扩展设定应该与所使用的 PHP 可执行文件的设定都保持一致。以下脚本可以显示所有 PHP 设定:
Example #1 phpinfo() call
或者在命令行运行:
drive:\\path\to\php\executable\php.exe -i
载入一个扩展
最常见的方式是在 php.ini 配置文件里包含一个 PHP 扩展。请注意很多扩展已经在 php.ini 里了,仅需要移除分号来激活它们。
;extension=php_extname.dll
extension=php_extname.dll
不过呢,有些 web 服务器会搞混,因为其并不一定使用和 PHP 可执行文件处于同一目录下的 php.ini 文件。要搞清楚具体使用了哪一个 php.ini 文件,在 phpinfo() 的输出中查看:
Configuration File (php.ini) Path C:\WINDOWS
Loaded Configuration File C:\Program Files\PHP\5.2\php.ini
激活一个扩展后,保存 php.ini 文件并重启动 web 服务器,然后用 phpinfo() 再次查看确定。新的扩展应该有其自己的一节。
解决问题
如果某扩展并未在 phpinfo() 中显示,应该查看日志以确定问题出在哪里。
如果是在命令行使用 PHP(CLI),扩展加载出错信息会直接在屏幕显示。
如果在 web 服务器中使用 PHP,则日志文件的位置与格式各不相同。请阅读所使用的 web 服务器之文档以确定日志文件的位置,这与 PHP 本身并无关系。
最常见的问题是 DLL 文件的位置,php.ini 中“extension_dir”设定的值,以及编译时的设置不匹配。
如果问题出在编译时设置不匹配,那可能所下载的 DLL 文件不对。可以尝试重新下载一个设置匹配的扩展。此外,phpinfo() 可以起到很大帮助。
用 PEAR 编译共享 PECL 扩展库
PECL 使建立共享 PHP 扩展库更容易。用 » pecl 命令这样做:
$ pecl install extname
这将下载extname
的源代码,编译之,并将extname.so
安装到extension_dir
中。然后 extname.so
就可以通过php.ini
加载了。
默认情况下,pecl 命令不会安装标记为 alpha 或 beta 状态的包。如果没有 stable 包可用,也可以用以下命令安装一个 beta 包:
$ pecl install extname-beta
也可以用此命令安装一个指定的版本:
$ pecl install extname-0.1
Note:
在 php.ini 中激活扩展之后,需要重新启动 web 服务以使更改生效。
用 phpize 编译共享 PECL 扩展库 ¶
有时候不能用 pecl 安装命令。这可能是因为在防火墙后面,或者是因为想要安装的扩展库还没有 PECL 兼容的包,例如 SVN 中尚未发布的扩展库。如果要编译这种扩展库,可以用更底层的编译工具来手工进行编译。
phpize 命令是用来准备 PHP 扩展库的编译环境的。下面例子中,扩展库的源程序位于 extname 目录中:
$ cd extname
$ phpize
$ ./configure
$ make
# make install
成功的安装将创建extname.so
并放置于 PHP
的扩展库目录中。需要调整php.ini
,加入extension=extname.so
这一行之后才能使用此扩展库。
如果系统中没有phpize
命令并且使用了预编译的包(例如 RPM),那要安装PHP
包相应的开发版本,此版本通常包含了phpize
命令以及相应的用于编译 PHP 及其扩展库的头文件。
使用phpize --help
命令可以显示此命令用法。
将 PECL 扩展库静态编译入 PHP
有时可能需要将扩展库静态编译到PHP
中。这需要将扩展库源程序放入php-src/ext/
目录中去并告诉PHP
编译系统来生成其配置脚本。
$ cd /your/phpsrcdir/ext
$ pecl download extname
$ gzip -d < extname.tgz | tar -xvf -
$ mv extname-x.x.x extname
这将产生以下目录:
/your/phpsrcdir/ext/extname
此时强制PHP
重新生成配置脚本,然后正常编译PHP
:
$ cd /your/phpsrcdir
$ rm configure
$ ./buildconf --force
$ ./configure --help
$ ./configure --with-extname --enable-someotherext --with-foobar
$ make
$ make install
Note: 要运行“buildconf”脚本,需要autoconf 2.13
和automake 1.4+
(更新版本的autoconf
也许能工作,但不被支持)。
是否用--enable-extname
或 --with-extname
取决于扩展库。通常不需要外部库文件的扩展库使用--enable
。要确认的话,在buildconf
之后运行:
$ ./configure --help | grep extname