实在是不得已,php最简单的安装扩展,我也基本不会。。。 以前倒是做过,但是毕竟搞开发的,都是往上搜索,照着教程,一键安装。加之,开发,只搞代码,就够让人受的了,服务器的命令忘记的差不多,一般不太愿意搞服务器。现在,公司没有运维,必须得搞搞,另外,作为PHPer,安装个 PHP 扩展,居然还要往上搜索各种教程,而教程又是各种混乱。。 这篇博客的目的,就是自己走一遍整个流程,我是需要在 Linux 下,PHP使用 mongodb,以此为例,总结: 1.既然得使用 mongodb,系统得先安装这个工具。我没有通过源码安装,那个过程可能也很痛苦,直接yum安装: yum -y install mongodb /* 安装mongodb扩展,发现有2个: mongo mongodb 区别: mongo 这个扩展已经废弃了,不过 bug 和 security 方面的问题还会继续修复,不支持PHP7 mongodb 支持PHP7,同时不断加入 MongoDB 新版本的特性支持 且两个扩展提供的类和接口完全不一样 */ 2.有了 mongodb,开始安装 php 相应的扩展(这也是这篇教程的主体内容) 1>下载最新的 php mongodb 扩展源码 http://pecl.php.net/package/mongodb 2>看出来了吧,是放在 'pecl' 上的,这里得引出2个PHPer应该知道的东西(我之前真的已经看过N多次这些文章了,当时真心记忆的很好,现在真心是一点都想不起来) PEAR - PHP扩展与应用库(the PHP Extension and Application Repository) 是一个PHP扩展及应用的代码仓库,纯粹由PHP代码编写。就是别人帮我们用PHP写了一些工具,图像处理、文件上传等,我们直接在我们项目中使用即可。 PECL - PHP扩展库(PHP Extension Community Library) 提供了一系列已知的扩展库,由C、C++等其他语言编写,以 '.so' 形式出现。'.so' 为共享库,是share object,用于动态链接。和 'dll' 差不多,比 'PEAR' 更快。(因为非PHP代码,需要在服务器上配置并注册到主机中) PHP的标准扩展,可以补充实际开发中所需的功能,所有的扩展都需要安装,windows下以 'DLL',linux下,需要进行编译,生成 '.so' 二进制 最直接的表述: PEAR 是PHP的上层扩展,用过PHP来写的扩展 PECL 是PHP的底层扩展,PHP可能不支持的一些操作系统底层的功能,通过C写个扩展,对PHP语言本身,进行了扩充(个人理解) 综上所属,我们就知道了扩展PHP有2种方法: 1.纯粹使用 PHP 代码来编写函数和类 - 其实也就是我们自己平常写的应用层代码。例如,写了一个 论坛、商城,或者 图片上传库、Excel导入导出的类库。PEAR就是这样的一个平台,其他人可以将自己的代码发布上来,主页:pear.php.net 2.用C、C++等编写外部模块,然后加载到 PHP 中,对PHP进行了扩充(也可能通过php现有的已经可以实现,但是可能更快)。PECL就是这样一个平台,主页是:pecl.php.net 参考文章: http://blog.csdn.net/21aspnet/article/details/158961 3>打开 'http://pecl.php.net/package/mongodb',我们可以下载 'mongodb' 的PHP扩展包了。上方的包信息,homepage - 主页链接,我们点开,查看 'mongodb' 官方关于PHP Mongo扩展的一些介绍 https://docs.mongodb.com/ecosystem/drivers/php/ 里面有: MongoDB PHP 扩展库的文档 MongoDB PHP 和 HHVM 扩展库的文档 MongoDB相关的一些兼容性 MOngoDB扩展的几个类库(Mongo Queue PHP,Mongo PHP Adapter,Mongodm,Yadm),Mongo 可用的不同场景的扩展吧 框架整合: Drupal,laravel,Yii2等 4>我们只看第一个,MongoDB PHP扩展库:https://docs.mongodb.com/php-library/master/ 安装部分:https://docs.mongodb.com/php-library/master/tutorial/install-php-library/ /* 翻译: */ 安装 MongoDB PHP 扩展库 前提: MongoDB PHP库是MongoDB PHP驱动的高级抽象。 因此,您必须安装mongodb扩展以使用库。 安装教程,链接到了PHP手册:http://php.net/manual/en/mongodb.installation.php 步骤: 1.安装库 安装MongoDB PHP库的首选方法是在项目根目录,使用composer来安装: composer require mongodb/mongodb 你可能也想通过源码包,来手动安装包,代码在 'github' 上 'https://github.com/mongodb/mongo-php-library/releases',不推荐这种方式安装 2.配置自动加载 一旦安装了库,确保我们的应用中,包含 Composer 的自动加载文件。'require_once' 语句应该,引入 Composer 的自动加载文件: require_one __DIR__ . '/vendor/autoload.php'; 可查看 Composer 的自动加载文档 'https://getcomposer.org/doc/01-basic-usage.md#autoloading' 3.如果我们手动从源码包,安装库,需要手动来配置自动加载: 1>使用你喜欢的自动加载实现,将*的 'MongoDB\' 命名空间指向 'src\' 目录 2>手动 'require' 'src/functions.php' 文件,因为,PHP不支持函数自动加载 5>打开PHP手册的mongodb的安装教程 Installing the MongoDB PHP Driver with PECL - 通过 'PECL' 来安装 Installing the MongoDB PHP Driver on OSX with Homebrew - max下通过 'brew' 来安装 Installing the MongoDB PHP Driver on Windows - windows下安装 Manually Installing the MongoDB PHP Driver - 手动安装 mongodb php 扩展(可以安装最新版本,从github上获取) Manually Installing the MongoDB HHVM Driver - 手动安装 mongodb hhvm 驱动 6>我们从 'PECL' 安装: 首先会发现一个 'PECL扩展库' 的安装 - http://php.net/manual/zh/install.pecl.intro.php PECL库,被称为共享扩展库(share object,也称动态扩展库),必须经过 编译、安装、然后加载。为什么称为共享呢,我们都知道windows下是 '.dll',linux下是 '.so',只要我们编译过,同样的环境和版本下,我们直接可以复制编译好的来使用。而且,不同于直接编译到PHP中的模块,我们可以使用 'dl()' 来动态加载。 dl() - 在5.3版本,被某些SAPI移除了,现在貌似一直都支持。 静态扩展库 - 直接编译在PHP中 1)下载 PECL 扩展库 1.pecl install 扩展库 - pear 命令 2.在http://pecl.php.net/ 平台上,搜索我们想要安装的扩展库,然后下载 3.pecl download 扩展库 - pear 命令 4.SVN下载,大多数 PECL 扩展库也在SVN中,web页面,可查看 'http://svn.php.net/viewvc/pecl/'。从SVN下载,可用: svn checkout http://svn.php.net/repository/pecl/extname/trunk extname 2)用PEAR编译共享PECL扩展库 PECL 使建立共享 PHP 扩展库更容易。用 pecl 命令(好像命令都是pear的命令,pecl好像也是用pear来管理) 1.pecl install 扩展库 // 下载扩展库源代码 -> 编译 -> 并将 扩展库.so 安装到 'extension_dir' 目录下 2.然后,我们就可在php.ini中,添加上 '.so' 扩展库 默认情况下,pecl不会安装 'alpha' 或 'beta' 版本的包,如果没有 'stable' 版本的包可用,我们也可以安装 'beta' 版: pecl install extname-beta // beta版 也可以安装一个指定的版本: pecl install extname-0.1 // 指定版本 3)用 phpize 编译共享 PECL 扩展库 有时候,不能用pecl安装命令。可能是因为防火墙,或想要安装的扩展库还没有 PECL 兼容的包,例如 SVN 中尚未发布的扩展库。如果要编译这种扩展库,可以用更底层的编译工具来手工进行编译。 phpize 命令,是用来准备PHP扩展库的编译环境的。我们说明下,使用 phpize 编译扩展库的步骤: 1.下载扩展库,并解压,假设目录为 mongodb 2.cd mongodb 3.phpize // 准备编译环境 4. ./configure // 生成makefile 5.make // 编译 6.make install // 安装 生成的 mongodb.so,放在PHP的 'extension_dir - 扩展库目录' 7.vim php.ini ,添加上 mongodb.so 4)php-config php-config 是一个简单的命令行脚本用于获取所安装的 PHP 配置的信息。 在编译扩展时,如果安装有多个 PHP 版本,可以在配置时用 --with-php-config 选项来指定使用哪一个版本编译,该选项指定了相对应的 php-config 脚本的路径。 php-config -h // 查看命令行选项 --prefix PHP 所安装的路径前缀,例如 /usr/local --includes 列出用 -I 选项包含的所有文件 --ldflags PHP 编译时所使用的 LD 标志 --libs PHP 编译时所附加的库 --extension-dir 扩展库的默认路径 --include-dir 头文件的默认路径前缀 --php-binary PHP CLI 或者 CGI 可执行文件的完整路径 --php-sapis 列出所有可用的 SAPI 模块 --configure-options 重现当前 PHP 在编译时的配置选项 --version PHP 版本号 --vernum PHP 版本号,以整数表示 5)将 PECL 扩展库,静态编译到 PHP 中 有时可能需要将扩展库静态编译到 PHP 中。这需要将扩展库源程序放入 php-src/ext/ 目录中去并告诉 PHP 编译系统来生成其配置脚本(php编译的扩展模块目录:/usr/local/php/include/php/ext/ --- 这个地址不对,应该是下载的PHP源码时,自带的扩展目录) 1>下载mongodb源码 1.cd /usr/local/php/include/php/ext/ --- 这个地址不对,应该是下载的PHP源码时,自带的扩展目录 2.pecl download mongodb 3.gzip -d < mongodb-1.2.8.tgz | tar -xvf - 4.mv mongodb-1.2.8 mongodb 2>强制PHP重新生成配置脚本,然后正常编译PHP cd /usr/local/php/include/php/ext/ rm configure ./buildconf --force ./configure --help ./configure --with-mongodb --enable-其他扩展 --with-其他扩展 make make install 3>是否用 --enable-extname 或 --with-extname 取决于扩展库。通常不需要外部库文件的扩展库使用 --enable。要确认的话,在 buildconf 之后运行: ./configure --help | grep extname 搜到一个有点用的文章,参考地址: http://wiki.jikexueyuan.com/project/extending-embedding-php/5.3.html 关于PEAR和PECL的命令,相关性,还是不清楚,有时间再看下,暂留: 通过 PEAR 的 Package Manager 的安装管理方式,可以对 PECL 模块进行下载和安装 http://baike.baidu.com/link?url=nVTwiCXUdXdlfux5Dch5WGjS1EufPMFbzJajJO1aT3nnCDl9D1mLNaZfv17J87b1_vBG_FlrxKHkNl1G1IhXTa - 可参考百度百科的这篇文章 http://pear.php.net/manual/en/guide.users.commandline.cli.php http://blog.csdn.net/hguisu/article/details/7381978