一、PECL安装介绍
PECL 是通过PEAR 打包系统来的 PHP 扩展库仓库。例如/your/phpsrcdir/是PHP源程序的路径,extname 是 PECL 扩展库的名字。自己根据实际情况调整。此外还假定用户熟悉 » pear 命令。 PEAR 手册里 pear 命令的信息同样适用于 pecl。
要使用共享扩展库,必须经过编译、安装,然后加载。以下说明的方法提供了怎样编译和安装扩展库的各种指导,但并不会自动加载它们。可以通过将其包括在 php.ini 中用 extension PHP 指令加载,或者 用 dl() 函数。
二、下载PECL扩展库
下载 PECL 扩展库有几种方法,如:
1、pecl install extname 命令会自动下载扩展代码, 所以在这种情况下不需要再次下载。
2、https://pecl.php.net/ PECL 网站包括有 PHP 开发组提供的不同扩展库的信息。这里的信息包括:更新记录,版本说明,需求,以及其它信息。
3、pecl download extname PECL 网站中列出的 PECL 扩展库的发行版本可以用 » pear 命令 来下载和安装。也可以指明具体的修正版。
4、git Github 上有很多 PECL 扩展。
5、SVN 部分 PECL 扩展库也在 SVN 中。其 web 页面见 be seen at » https://svn.php.net/pecl/。要直接从 SVN 中下载,用以下命令:
$ svn checkout http://svn.php.net/repository/pecl/extname/trunk extname
6、Windows 下载 PHP 官方已为 Windows 预编译了大部分的 PECL 扩展(.dll 文件),可以直接从 PECL 官网下载。
三、Windows安装PHP
在 Windows 上有两种加载 PHP 扩展的方式:把扩展编译进 PHP,或者加载 DLL。加载预编译的扩展是更简单更被推荐的方式。要加载某扩展,需要在系统中有其相对应的 “.dll” 文件。所有扩展都会由 PHP 小组定期自动编译。如果在 PHP 发行包和 PCEL 中都没有某 DLL 文件,那可能需要自己编译之后才能使用该扩展。
1、扩展库位置
PHP 扩展库通常称为“php_*.dll”(其中星号代表具体某扩展的名字),位于“PHP\ext”目录下。PHP 发行包中包括了大多数开发者最常用到的扩展库。这些被称为“核心”扩展库。如果用户所需要的功能并没有被任何核心扩展提供,那还是有可能在 PECL中找到。PHP Extension Community Library(PECL,PHP 扩展社区库)是个 PHP 扩展的储存室,提供了对于所有已知扩展的下载及开发途径的指南。
如果用户开发了一个自己使用的扩展,可以考虑将其发布到 PECL 中以便于其他有相同需求的用户使用。一个很好的作用就是可以得到其他用户的反馈、感谢、错误报告甚至修正/更新。
2、下载扩展
用户常常会发现每个 DLL 都有好几个版本:
- 不同的版本号(至少前两个数字要一致)
- 不同的线程安全性设定
- 不同的处理器体系(x86,x64,…)
- 不同的排错设定
- 其它
记住用户的扩展设定应该与所使用的 PHP 可执行文件的设定都保持一致。以下脚本可以显示所有 PHP 设定:
示例 #1 phpinfo() call:
<?php phpinfo(); ?>
或者在命令行运行:
drive:\\path\to\php\executable\php.exe -i
3、载入扩展
最常见的方式是在 php.ini 配置文件里包含一个 PHP 扩展。请注意很多扩展已经在 php.ini 里了,仅需要移除分号来激活它们。需要注意,从 PHP 7.2.0 开始,可以直接用扩展的名称,来替代扩展的文件名。这样配置文件就跟操作系统解耦了,也更容易理解。我们推荐采用此方式加载扩展。为了与之前的版本保持兼容,直接写扩展名的方式会仍然支持。
;extension=php_extname.dll
extension=php_extname.dll
; PHP version 7.2 开始的推荐写法: extension=extname zend_extension=another_extension
不过,有些 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() 再次查看确定。新的扩展应该有其自己的一节。
四、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
注意:在 php.ini 中激活扩展之后,需要重新启动 web 服务以使更改生效。
五、phpize编译PECL
有时候不能用 pecl 安装命令。这可能是因为在防火墙后面,或者是因为想要安装的扩展库还没有 PECL 兼容的包,例如 Git 中尚未发布的扩展库。如果要编译这种扩展库,可以用更底层的编译工具来手工进行编译。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 命令可以显示此命令用法)
六、php-config
php-config 是一个简单的命令行脚本用于获取所安装的 PHP 配置的信息。在编译扩展时,如果安装有多个 PHP 版本,可以在配置时用 –with-php-config 选项来指定使用哪一个版本编译,该选项指定了相对应的 php-config 脚本的路径。
php-config 脚本在命令行所能使用的选项可以通过 -h 选项来显示:
Usage: /usr/local/bin/php-config [OPTION] Options: --prefix [...] --includes [...] --ldflags [...] --libs [...] --extension-dir [...] --include-dir [...] --php-binary [...] --php-sapis [...] --configure-options [...] --version [...] --vernum [...]
命令行选项:
七、PECL静态编译入PHP
有时可能需要将扩展库静态编译到 PHP 中。这需要将扩展库源程序放入 /your/phpsrcdir/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
注意: 要运行“buildconf”脚本,需要 autoconf 2.13 和 automake 1.4+(更新版本的 autoconf 也许能工作,但不被支持)。
是否用 –enable-extname 或 –with-extname 取决于扩展库。通常不需要外部库文件的扩展库使用 –enable。要确认的话,在 buildconf 之后运行:
$ ./configure --help | grep extname