在Linux上安装php的拓展的思路大同小异,这次通过安装php-mongodb拓展的实例抛砖引玉,让大家接触一下这方面的知识。
思路
- 安装应用
- 安装php拓展
- 封装操作类库
- 使用案例
- 总结
服务器环境
- centos 7.2
- php 5.6
- Thinkphp 3.2
安装应用
安装应用,一般推荐去相对应的官网下载最新的stable 版本。一方面官网上的源码包一般都有对应的md5值或者sha1值,这个可以保证了数据包的完整性和安全性;另一方面官网上各种安装教程都是最新有效的。
我们点击进入mongodb的下载页面。这里插一句,Linux安装软件有三种方式,一种是包管理工具安装,另一种是软件仓库,还有一种是源码包安装。如上图就是需要下载mongodb的源码包,通过源码包编译安装的。如上图,我们可以选择自己对应的操作系统,然后选择操作系统对应的分支,最后下载对应的源码包。
但是我们一般推荐使用YUM软件仓库安装,软件仓库是为了进一步降低软件安装难度和复杂度而设计的技术,为了解决软件包之间的依赖关系。我们可以看到上图中有Instructions for installing with yum,点击进去可看到
我们根据上图中的指导:
- 新建一个/etc/yum.repos.d/mongodb-org-3.6.repo文件,填充内容如下
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
- 执行一下命令
sudo yum install -y mongodb-org
- 安装完毕后,开启mongodb服务,接着尝试连接mongodb数据库
sudo service mongod start
mongo --host 127.0.0.1:27017
- 如果一切顺利,结果如下图:
到此,我们完成了mongodb的安装了。
安装php拓展
接下来,就是需要安装php-mongodb拓展,我们先下载解压
git clone https://github.com/mongodb/mongo-php-driver.git
然后进入拓展包目录,接着源码包编译安装这个拓展。源码包安装linux软件的命令原理可以参考这篇文章
cd mongo-php-driver
### 实践证明,php5.6需要更新子模块,下载完整的文件
git submodule update --init
phpize
./configure
make
sudo make install
####检测拓展安装是否的命令。如出现下图,代表OK!
php -m | grep mongodb
至此,php-mongodb的安装完毕。
封装操作类库
mongodb之前有了好几次重大的更新,所以一些php框架集成的mongodb的类库兼容不好。mongodb官方也意识到这个问题,所以官方自己出了个类库,而且支持composer安装。只要将
"mongodb/mongodb": "1.0.2"
添加到项目的composer.json的require对象中就行,然后再项目目录下执行
composer update
等待更新完毕就OK,此时我们就可以在项目使用mongodb了。
使用案例
我们参考mongodb官方的建议案例,并结合我们自己使用的TP框架,可以用来存储OA的用户行为。
大概实现如下
安装robo 3Tmongodb的GUI客户端,建立一个test数据库,在test数据库下建立一个名为test的collections,为test数据库添加一个用户,用户名:root,密码:root,详细命令参考官网文档。最后修改mongodb的配置文件/etc/mongod.conf,使它支持安全验证
在Application/Common/Conf/tags.php中为action_begin这个标志位添加一个行为
<?php
return array(
//本地没有mongodb可以注释掉下面这行
'action_begin'=>array('Home\\Behaviors\\LogAnyThingsBehavior'),
);
- 然后在相对应位置创建一个Home/Behaviors/LogAnyThingsBehavior.class.php文件
<?php
namespace Home\Behaviors;
use Think\Behavior;
class LogAnyThingsBehavior extends Behavior{
/** 行为 : 记录用户行为
* @param mixed $param
*/
public function run(&$param){
//获取行为信息
$data['user_id'] = session('user_uid_yz');
$data['username'] = session('user_yz');
$data['ip'] = $_SERVER['REMOTE_ADDR'];
$data['class'] = CONTROLLER_NAME;
$data['function'] = ACTION_NAME;
$data['create_time'] = date("Y-m-d H:i:s",time());
$mongo = (new \MongoDB\Client("mongodb://root:root@127.0.0.1/test"));
$collection = $mongo ->selectCollection("test","test");
$insertOneResult = $collection->insertOne($data);
}
}
?>
- 然后就可以登录项目网站,点击浏览下网页。就可以在robo 3T客户端中看到日志数据了
总结
至此,我们的目标基本完成了。php的其他拓展也大概是这个思路。希望对大家有帮助。