首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

MongoDB主从+php实现

2023-11-10 来源:骅佗教育

环境

172.16.115.202   primary

172.16.111.171   secondary

172.16.115.157   secondary

一、MongoDB安装

1. yum下载安装mongodb

     扩展源http://repo.mongodb.org/yum/redhat/mongodb-org-3.0.repo

     mongodb-org-3.0.7-1.el6.x86_64.rpm #元数据包,它可以实现自动安装下面的4个组件包

     mongodb-org-mongos-3.0.7-1.el6.x86_64.rpm # mongod守护程序,以及相关的配置和初始化脚本

     mongodb-org-server-3.0.7-1.el6.x86_64.rpm # mongos守护程序

     mongodb-org-shell-3.0.7-1.el6.x86_64.rpm # ongo shell环境

     mongodb-org-tools-3.0.7-1.el6.x86_64.rpm # MongoDB工具

2. 编辑配置文件vim  /etc/mongod.conf

    1)去掉以下两行以#开头的注释,以防重启报错

         fork:true

         pidFilePath:/var/mongodb/mongod.pid

    2)bind_ip绑定多个IP,用逗号隔开,如监听全部,留空即可

3. 修改配置参数,启动mongd

    echo never > /sys/kernel/mm/transparent_hugepage/enabled

    echo never > /sys/kernel/mm/transparent_hugepage/defrag

    编辑vim /etc/security/limits.conf,加入内容:

    mongod soft nofile 64000

    mongod hard nofile 64000

    mongod soft nproc 32000

    mongod hard nproc 32000

    service mongd start

    注:启动过程较慢,这是它在写数据/var/lib/mongo,如果启动不了,mongod -f /etc/mongod.conf方式,可以看到报错

4. 编辑三台机器的MongoDB配置文件vim /etc/mongod.conf,重启

    内容:

    ##1)去掉replication的注释

    ##2)加入下面参数(注意首行留空2个空格,固定格式):

    ## 类似于二进制日志

       oplogSizeMB: 20

    ## 副本集名字

       replSetName: huangzhenping

5. 查看日志文件tail /var/log/mongodb/mongod.log

 技术分享

6. 主上配置,搭建副本集   

    use admin # 主上进入admin库

    config={_id:"huangzhenping",members:[{_id:0,host:"172.16.115.202:27017"},{_id:1,host:"172.16.115.157:27017"},{_id:2,host:"172.16.111.171:27017"}]}  #配置机器

    rs.initiate(config)  #刷新

    rs.status()   #查看状态

 如下结果:出现三台机器的信息,主的状态已变为PRIMARY

> rs.initiate(config){ "ok" : 1 }huangzhenping:OTHER> rs.status(){        "set" : "huangzhenping",        "date" : ISODate("2017-01-14T20:24:59.490Z"),        "myState" : 1,        "members" : [                {                        "_id" : 0,                        "name" : "172.16.115.202:27017",                        "health" : 1,                        "state" : 1,                        "stateStr" : "PRIMARY",                        "uptime" : 297,                        "optime" : Timestamp(1484425453, 1),                        "optimeDate" : ISODate("2017-01-14T20:24:13Z"),                        "electionTime" : Timestamp(1484425455, 1),                        "electionDate" : ISODate("2017-01-14T20:24:15Z"),                        "configVersion" : 1,                        "self" : true                },                {                        "_id" : 1,                        "name" : "172.16.115.157:27017",                        "health" : 1,                        "state" : 2,                        "stateStr" : "SECONDARY",                        "uptime" : 45,                        "optime" : Timestamp(1484425453, 1),                        "optimeDate" : ISODate("2017-01-14T20:24:13Z"),                        "lastHeartbeat" : ISODate("2017-01-14T20:24:57.851Z"),                        "lastHeartbeatRecv" : ISODate("2017-01-14T20:24:58.343Z")                  ,                        "pingMs" : 0,                        "configVersion" : 1                },                {                        "_id" : 2,                        "name" : "172.16.111.171:27017",                        "health" : 1,                        "state" : 2,                        "stateStr" : "SECONDARY",                        "uptime" : 45,                        "optime" : Timestamp(1484425453, 1),                        "optimeDate" : ISODate("2017-01-14T20:24:13Z"),                        "lastHeartbeat" : ISODate("2017-01-14T20:24:57.863Z"),                        "lastHeartbeatRecv" : ISODate("2017-01-14T20:24:58.262Z")                  ,                        "pingMs" : 1,                        "configVersion" : 1                }        ],        "ok" : 1}huangzhenping:PRIMARY>

    注:

       1)如执行rs.status()命令,没有发现三台机器,需手动执行添加

            rs.add("172.16.115.157")

            rs.add("172.16.111.171")

       2)如从机的状态为"stateStr":"STARTUP",则需执行:

            var config={_id:"huangzhenping",members:[{_id:0,host:"172.16.115.202:27017"},{_id:1,host:"172.16.115.157:27017"},{_id:2,host:"172.16.111.171:27017"}]}

            rs.initiate(config)

7. 从上登录,状态已变为:SECONDARY

 技术分享

二、MongoDB主从测试

1. mongodb副本集测试

    1)主上建库,建集合

     use mydb

     db.createCollection(‘testA‘)

     show dbs

     show tables

 技术分享

    2)从上查看,已成功同步库和集合

     rs.slaveOk()

     show dbs

 技术分享

2. 副本集更改权重,模拟主宕机

   1)主上设置不同的权重,并查看

       cfg = rs.conf()

       cfg.members[0].priority = 3

       cfg.members[1].priority = 2

       cfg.members[2].priority = 1

       rs.reconfig(cfg)

       rs.config()

       查看生效的权重:

huangzhenping:PRIMARY> rs.config(){        "_id" : "huangzhenping",        "version" : 2,        "members" : [                {                        "_id" : 0,                        "host" : "172.16.115.202:27017",                        "arbiterOnly" : false,                        "buildIndexes" : true,                        "hidden" : false,                        "priority" : 3,                        "tags" : {                        },                        "slaveDelay" : 0,                        "votes" : 1                },                {                        "_id" : 1,                        "host" : "172.16.115.157:27017",                        "arbiterOnly" : false,                        "buildIndexes" : true,                        "hidden" : false,                        "priority" : 2,                        "tags" : {                        },                        "slaveDelay" : 0,                        "votes" : 1                },                {                        "_id" : 2,                        "host" : "172.16.111.171:27017",                        "arbiterOnly" : false,                        "buildIndexes" : true,                        "hidden" : false,                        "priority" : 1,                        "tags" : {                        },                        "slaveDelay" : 0,                        "votes" : 1                }        ],        "settings" : {                "chainingAllowed" : true,                "heartbeatTimeoutSecs" : 10,                "getLastErrorModes" : {                },                "getLastErrorDefaults" : {                        "w" : 1,                        "wtimeout" : 0                }        }}

2) 主上禁用27017端口,模拟主宕机

        iptables -I INPUT -p tcp --dport 27017 -j DROP

        原主上:已连接失败

  技术分享

       原一台从机:状态已变为PRIMARY

  技术分享  

       rs.status()查看状态:

huangzhenping:PRIMARY> rs.status(){        "set" : "huangzhenping",        "date" : ISODate("2017-01-22T15:48:15.453Z"),        "myState" : 1,        "members" : [                {                        "_id" : 0,                        "name" : "172.16.115.202:27017",                        "health" : 0,                        "state" : 8,                        "stateStr" : "(not reachable/healthy)",                        "uptime" : 0,                        "optime" : Timestamp(0, 0),                        "optimeDate" : ISODate("1970-01-01T00:00:00Z"),                        "lastHeartbeat" : ISODate("2017-01-22T15:48:14.551Z"),                        "lastHeartbeatRecv" : ISODate("2017-01-22T15:48:14.632Z"),                        "pingMs" : 0,                        "lastHeartbeatMessage" : "Failed attempt to connect to 172.16.115.202:27017; couldn‘t connect to server 172.16.115.202:27017 (172.16.115.202), connection attempt failed",                        "configVersion" : -1                },                {                        "_id" : 1,                        "name" : "172.16.115.157:27017",                        "health" : 1,                        "state" : 1,                        "stateStr" : "PRIMARY",                        "uptime" : 16333,                        "optime" : Timestamp(1484429320, 1),                        "optimeDate" : ISODate("2017-01-14T21:28:40Z"),                        "electionTime" : Timestamp(1485100022, 1),                        "electionDate" : ISODate("2017-01-22T15:47:02Z"),                        "configVersion" : 2,                        "self" : true                },                {                        "_id" : 2,                        "name" : "172.16.111.171:27017",                        "health" : 1,                        "state" : 2,                        "stateStr" : "SECONDARY",                        "uptime" : 5989,                        "optime" : Timestamp(1484429320, 1),                        "optimeDate" : ISODate("2017-01-14T21:28:40Z"),                        "lastHeartbeat" : ISODate("2017-01-22T15:48:14.751Z"),                        "lastHeartbeatRecv" : ISODate("2017-01-22T15:48:14.749Z"),                        "pingMs" : 0,                        "lastHeartbeatMessage" : "could not find member to sync from",                        "configVersion" : 2                }        ],        "ok" : 1}

3)新主上,创建一个库和集合

     use mydb2

     db.createCollection(‘testB‘)

 技术分享

 

4)恢复旧主,则自动切换为MASTER状态,并同步自己离线时新主上创建的库

      iptables -D INPUT -p tcp --dport 27017 -j DROP

 技术分享

三、MongoDB结合php

1. 下载安装mongo扩展模块

     wget https://github.com/mongodb/mongo-php-driver-legacy/archive/master.zip

     unzip mongo-php-driver-legacy-master.zip

     cd mongo-php-driver-legacy-master

     /usr/bin/phpize

     ./configure --with-php-config=/usr/bin/php-config

     make;make install 

     技术分享

2. 编辑php配置文件vim /etc/php.ini,加载扩展模块

 技术分享 

 技术分享

3. 编辑测试文件 vim /usr/local/apache2/htdocs/1.php

    内容:

<?php// 连接到mongodb$m = new MongoClient();echo "Connection to database successfully";// 选择一个数据库$db = $m->mydb;echo "Database mydb selected";?>

4. 测试 curl localhost/1.php

 技术分享

本文出自 “一马踏平川” 博客,请务必保留此出处http://huangzp.blog.51cto.com/12434999/1904088

MongoDB主从+php实现

标签:mongodb

小编还为您整理了以下内容,可能对您也有帮助:

MongoDB在ThinkPHP里面怎么进行数据库操作啊

    连接数据库

    $conn=new Mongo(“mongodb://sa:123@localhost”); #带用户名密码

    选择数据库和集合

    $db=$conn->selectDB(“mydb”); 

    $collection = $db->selectCollection(‘column’);

    增删改查

    1.插入

    $array=array(‘column_name’=>’col’.rand(100,999),’column_exp’=>’xiaocai’);

    $result=$collection->insert($array); #简单插入

    2. 修改更新 

        $where=array(‘column_name’=>’col123′);

        $newdata=array(‘column_exp’=>’GGGGGGG’,'column_fid’=>444);

        $result=$collection->update($where,array(‘$set’=>$newdata));

        3.删除

        $where=array(‘column_name’=>’col685′);

        $result=$collection->update($where,array(‘$unset’=>’column_exp’));

        4.查询

         $result =  $collection->find();

PHP 从 MongoDb 中查询数据怎么样实现

创建Mongodb数据库 由于Mongodb不是关系型数据库文件,实际上,它并不存在传统关系型数据库中的所谓“数据库”的概念,但不用担心,当你第一次新增数据时,mongodb就会以collection集合的形式进行保存和新建,而不需要你手工去新建立。 如果需要更加详细的视频,你可以多去后盾人看看,这样会有不错的效果

PHP连接mongodb数据库,登陆后想显示登录人的用户名,为什么现在显示1?

方法如下:

创建数据库

use tt

这样就创建了一个数据库,如果什么都不操作离开的话,这个库就会被系统删除.所以还要执行下面的命令:

db.usr.insert({'name':'tompig'});

db.usr.insert({'name':'tompig1','id':1});

随便整了2个表,这个无所谓的,反正要导入表的话就删除掉这2个就可以了,目前只是想让数据库保持住.

然后使用命令查看是否有保存tt这个数据库:

show dbs

3.配置用户

use tt

db.addUser('mongodb','123456');

mongodb是用户名,123456是密码.

好了,这样一个数据库和对这个数据库配置用户就完成了.

mongodb常用命令:

1、Help查看命令提示

help

db.help();

db.yourColl.help();

db.youColl.find().help();

rs.help();

2、切换/创建数据库

use yourDB; 当创建一个集合(table)的时候会自动创建当前数据库

3、查询所有数据库

show dbs;

4、删除当前使用数据库

db.dropDatabase();

5、从指定主机上克隆数据库

db.cloneDatabase(“127.0.0.1”); 将指定机器上的数据库的数据克隆到当前数据库

6、从指定的机器上复制指定数据库数据到某个数据库

db.copyDatabase("mydb", "temp", "127.0.0.1");将本机的mydb的数据复制到temp数据库中

7、修复当前数据库

db.repairDatabase();

8、查看当前使用的数据库

db.getName();

db; db和getName方法是一样的效果,都可以查询当前使用的数据库

9、显示当前db状态

db.stats();

10、当前db版本

db.version();

11、查看当前db的链接机器地址

db.getMongo();

Collection聚集集合

1、创建一个聚集集合(table)

db.createCollection(“collName”, {size: 20, capped: 5, max: 100});

2、得到指定名称的聚集集合(table)

db.getCollection("account");

3、得到当前db的所有聚集集合

db.getCollectionNames();

4、显示当前db所有聚集索引的状态

db.printCollectionStats();

用户相关

1、添加一个用户

db.addUser("name");

db.addUser("userName", "pwd123", true); 添加用户、设置密码、是否只读

2、数据库认证、安全模式

db.auth("userName", "123123");

3、显示当前所有用户

show users;

4、删除用户

db.removeUser("userName");

其他

1、查询之前的错误信息

db.getPrevError();

2、清除错误记录

db.resetError();

php 远程连接Mongodb问题

<?php //这里采用默认连接本机的27017端口,当然你也可以连接远程主机如192.168.0.4:27017,如果端口是27017,端口可以省略 $m = new Mongo(); // 选择comedy数据库,如果以前没该数据库会自动创建,也可以用$m->selectDB("comedy"); $db = $m->comedy; //选择comedy里面的collection集合,相当于RDBMS里面的表,也-可以使用 $collection = $db->collection; $db->selectCollection("collection"); //添加一个元素 $obj = array( "title" => "Calvin and Hobbes-".date('i:s'), "author" => "Bill Watterson" ); //将$obj 添加到$collection 集合中 $collection->insert($obj); //添加另一个元素 $obj = array( "title" => "XKCD-".date('i:s'), "online" => true ); $collection->insert($obj); //查询所有的记录 $cursor = $collection->find(); //遍历所有集合中的文档 foreach ($cursor as $obj) { echo $obj["title"] . "<br />\n"; } //删除所有数据 //$collection->remove(); //删除 name 为hm //$collection->remove(array('name'=>'hm')); //断开MongoDB连接 $m->close(); ?>
你可以去后盾人平台看看,里面的东西不错

php 远程连接Mongodb问题

<?php //这里采用默认连接本机的27017端口,当然你也可以连接远程主机如192.168.0.4:27017,如果端口是27017,端口可以省略 $m = new Mongo(); // 选择comedy数据库,如果以前没该数据库会自动创建,也可以用$m->selectDB("comedy"); $db = $m->comedy; //选择comedy里面的collection集合,相当于RDBMS里面的表,也-可以使用 $collection = $db->collection; $db->selectCollection("collection"); //添加一个元素 $obj = array( "title" => "Calvin and Hobbes-".date('i:s'), "author" => "Bill Watterson" ); //将$obj 添加到$collection 集合中 $collection->insert($obj); //添加另一个元素 $obj = array( "title" => "XKCD-".date('i:s'), "online" => true ); $collection->insert($obj); //查询所有的记录 $cursor = $collection->find(); //遍历所有集合中的文档 foreach ($cursor as $obj) { echo $obj["title"] . "<br />\n"; } //删除所有数据 //$collection->remove(); //删除 name 为hm //$collection->remove(array('name'=>'hm')); //断开MongoDB连接 $m->close(); ?>
你可以去后盾人平台看看,里面的东西不错

php mongoclient 连接 mongodb ,出现 "No candidate servers found"错误。实在没办法,求大神们解答。

表标PHP已经自带了mongo功能,你就可以操作下面的代码(但是你必须有安装mongodb服务器)一、连接数据库使用下面的代码创建一个数据库链接复制代码代码如下:listDBs());//能打印出数据库数组,看看有几个数据库。?>如图:上图说有一个数据库名字叫local,总大小1个字节,他是空的。看见ok表示运行成功。现在你可以使用$connection链接来操作数据库了选择数据库使用下面的代码来选择一个数据库复制代码代码如下:dbname;?>这里的数据库并不一定是一个已经存在的数据库,如果所选择的数据库不存在,则会新建一个数据库,所以在选择数据库的时候,注意一定要填上正确的数据库名如果拼写错误的话,很有可能会新建一个数据库复制代码代码如下:mybiglongdbname;//做一些事情$db=$connection->mybiglongdbnme;//现在会连上一个新的数据库?>获取一个集合获取一个集合跟选择数据库拥有相同的语法格式复制代码代码如下:baz;//选择数据库$collection=$db->foobar;//选择foobar集合//或者使用更简洁的方式$collection=$connection->baz->foobar;?>插入一个文档数组是可以被储存到数据库中的基本单元一个随机的文档可能是这样复制代码代码如下:“MongoDB”,“type”=>“database”,“count”=>1,“info”=>(object)array(“x”=>203,“y”=>102),“versions”=>array(“0.9.7″,“0.9.8″,“0.9.9″));?>注意:你可以嵌套数组与对象,对象与文档在mongodb中几乎是一样的,你可以使用$doc调用一个文档或对象,但是info字段总是一个对象而不是一个文档,本约束适用于所有文档使用MongoCollection::insert()插入一个文档复制代码代码如下:foo->bar;$collection->insert($doc);?>mongodb的insert()、save(),区别主要是:若存在主键,insert()不做操作,而save()则更改原来的内容为新内容。存在数据:{_id:1,"name":"n1"}insert({_id:1,"name":"n2"})会提示错误save({_id:1,"name":"n2"})会把n1改为n2。使用MongoCollection::findOne()查询文档为了证明上面那段代码的数据已经插入到数据库里了,我们进行简单的findOne()操作以得到集合中的第一个文档数据,这种方法只返回一个文档数据,这种方法适用于在你的查询语句的时候只匹配一个文档或者你只关心第一条数据复制代码代码如下:findOne();var_mp($obj);?>你会看到下列结果复制代码代码如下:array(5){["_id"]=>object(MongoId)#6(0){}["name"]string(7)“MongoDB”["type"]=>string(8)“database”["count"]=>int(1)["info"]=>array(2){["x"]=>int(203)["y"]=>int(102)}["versions"]array(3){[0]=>string(5)“0.9.7″[1]=>string(5)“0.9.8″[2]=>string(5)“0.9.9″}}注意_id字段自动加载了文档上,MongoDB储存元素中以_以及$开头的都是供内部使用的添加文档为了做一些更有趣的事情,我们添加简单的文档到集合中,这些文档如下复制代码代码如下:value);?>我们可以使用循环相当有效的插入数据复制代码代码如下:insert(array(“i”=>$i));}?>注意:我们可以插入不同的字段在同一字符集中,在这方面意味着MongoDB拥有非常自由的储存模式在一个集合中计算文档的数量现在我们插入了101个文档(我们用循环插入了100个,之前还插入了一个),我们可以使用count()来看看我们的数据是不是都被插入进去了复制代码代码如下:count();?>这段代码将打印出101MongoCollection::count()也可以查询字段数据使用游标得到集合中的所有文档为了得到集合中的所有文档,我们可以使用MongoCollection::find()方法,find()方法返回一个MongoCursor对象,可以让我们重复得到查询所匹配的的文档复制代码代码如下:find();foreach($cursoras$id=>$value){echo“$id:“;var_mp($value);}?>这样我们会打印出集合中的这101个文档,$id就是文档中的_id字段,$value就是文档本身为查询规定一个标准我们可以通过find()方法得到集合中的文档子集,例如,我们要查询出集合中i字段为71的文档,我们可以使用下列方法复制代码代码如下:71);$cursor=$collection->find($query);while($cursor->hasNext()){var_mp($cursor->getNext());}?>我们将打印如下数据复制代码代码如下:array(2){["_id"]=>object(MongoId)#6(0){}["i"]=>int(71)["_ns"]=>“testCollection”}为查询设定一个范围我们可以通过find()创建一个查询语句以得集合中的一个子集,例如如果我们得到所有”i”>50的文档,我们可以使用如下代码复制代码代码如下:array(‘$gt'=>50));//注意'$gt'两边的单引号$cursor=$coll->find($query);while($cursor->hasNext()){var_mp($cursor->getNext());}?>我们同样可以得到20array(“\$gt”=>20,“\$lte”=>30));$cursor=$coll->find($query);while($cursor->hasNext()){var_mp($cursor->getNext());}?>我们非常容易漏掉$美元符号,你也可以选择你自定义的符号来代替美元符号,选择一个不会在你的建里面出现的符号例如”:”,在php.ini中加上这么一句话复制代码代码如下:mongo.cmd=“:”那么上面的代码就可以替换成复制代码代码如下:array(“:gt”=>20,“:lte”=>30));?>当然你也可以使用ini_set(“mongo.cmd”,“:”)的方法来改变创建一个索引MongoDB支持索引,并且可以很容易的加到一个集合中,你只要指定某个字段为索引就行了,并且还可以指定正序索引(1)与倒序索引(-1)下面的代码为I创建了索引复制代码代码如下:ensureIndex(array(“i”=>1));//在”i”上创建了一个索引$coll->ensureIndex(array(“i”=>-1,“j”=>1));//在”i”上创建了倒序索引在”j”上创建了正序索引?>一个完整的简单例子这个例子展示了如何链接mongodb数据库,如何选择数据库,如何插入数据,如何查询数据,以及关闭数据库链接复制代码代码如下:comedy;$collection=$db->cartoons;//添加一个元素$obj=array("title"=>"CalvinandHobbes","author"=>"BillWatterson");$collection->insert($obj);//修改$newdata=array('$set'=>array("title"=>"CalvinandHobbes"));$collection->update(array("author"=>"caleng"),$newdata);//删除$collection->remove(array('author'=>'caleng'),array("justOne"=>true));//添加另一个元素,使用不同的格式$obj=array("title"=>"XKCD","online"=>true);$collection->insert($obj);//查询所有的集合$cursor=$collection->find();//重复显示结果foreach($cursoras$obj){echo$obj["title"]."\n";}//关闭链接$m->close();?>输出结果为复制代码代码如下:CalvinandHobbesXKCD

php链接mongodb

说一下我看到的代码,你display()里面可以写上自己要展现的模板地址。

报错报的是没有写权限。说明你没有给这个文件写权限,所以无法创建缓存目录和写入缓存文件。你上传到了服务器上,直接用服务器Ip打开。追问我就是用的服务器IP打开的,问题已经解决了,是权限的事 ,予以采纳,谢谢。

php链接mongodb

说一下我看到的代码,你display()里面可以写上自己要展现的模板地址。

报错报的是没有写权限。说明你没有给这个文件写权限,所以无法创建缓存目录和写入缓存文件。你上传到了服务器上,直接用服务器Ip打开。追问我就是用的服务器IP打开的,问题已经解决了,是权限的事 ,予以采纳,谢谢。

mongodb 的连接php会自动释放吗

mongodb 的连接php会自动释放,这就是MongoDB 的特点。如果不希望这样,可以使用持久连接。连接池之类的。或者*连接数。

mongodb 的连接php会自动释放吗

mongodb 的连接php会自动释放,这就是MongoDB 的特点。如果不希望这样,可以使用持久连接。连接池之类的。或者*连接数。

php7.1往mongodb 写NumberLong和NumberInt怎么处理

解决方案:可以先对数据进行转换,转换完后再插入到数据库
例如:
$spec = array(
'name' => '张三',
'state' => new MongoInt32(100)
);

$spec = array(
'name' => '张三',
'state' => new MongoInt64(100) //NumberLong
)追问头痛医头

php7.1往mongodb 写NumberLong和NumberInt怎么处理

解决方案:可以先对数据进行转换,转换完后再插入到数据库
例如:
$spec = array(
'name' => '张三',
'state' => new MongoInt32(100)
);

$spec = array(
'name' => '张三',
'state' => new MongoInt64(100) //NumberLong
)追问头痛医头

linux中给PHP安装mongodb的扩展

环境说明:

centos5.6 32bit

php 5.2.17

php安装路径 /usr/local/php

phpize路径 /usr/bin

php-config路径 /usr/bin

php.ini路径 /etc/

1.首先下载php的mongodb扩展

从http://pecl.php.net/package/mongo这个网址下载mongodb的扩展源码包

wget http://pecl.php.net/get/mongo-1.4.5.tgz

2.解压安装包

tar zxf mongo-1.4.5.tgz

3.进入解压目录,运行phpize进行安装准备

cd mongo-1.4.5

/usr/local/php/bin/phpize

4.安装编译

上述命令运行完后,在目录下就生成了configure文件

使用./configure命令进行安装配置,然后使用make make install进行编译安装,命令如下:

./configure --with-php-config=/usr/local/php/bin/php-config

make make install

5.编辑php.ini增加下述一行添加mongodb扩展

extension=mongo.so

重启web容器,然后查看phpinfo,看到mongodb的内容就说明安装成功。

例子

服务器环境Cent OS 5.6 32位, php版本 5.2.17编译安装,安装路径/usr/local/php

首先下载最新的php mongodb扩展源码,源码可以在http://pecl.php.net/package/mongo下载到

wget http://pecl.php.net/get/mongo-1.2.0.tgz

tar zxf http://pecl.php.net/get/mongo-1.2.0.tgz

cd mongo-1.2.0

进入文件夹后,首先运行phpize来准备编译扩展的环境,phpize这个程序的介绍在这里

/usr/local/php/bin/phpize

运行后执行结果如下:

   运行后,./configure 脚本就会生成了,这个时候我们运行./configure脚本来进行配置

./configure --with-php-config=/usr/local/php/bin/php-config

--with-php-config这个参数是告诉配置脚本php-config这个程序的路径,php-config的介绍在这里

上面命令在正确配置的环境下运行结果如下

   这时用make来编译扩展

make make install

正确编译执行结果如下(下图是编译输出的最后几行)

   完成后,请编辑你php.ini文件增加一行

extension=mongo.so

一般默认的编译php的ini文件在

/usr/local/php/etc/php.ini

重启你的web服务器或者php-fpm,打印phpinfo,如果看到下列内容那么恭喜你,mongodb的扩展安装成功了

ThinkPhp框架中使用mongodb数据库配置报错Call to a member function selectCollection() on a non-object

TP3.1的解决方法就是如楼上所说,需要实例化mong数据库的模型。

so 有两种方式:

    直接在使用的方法内实例化MongoModel类;

    写一个model专门继承MongoModel,把需要连mongo的操作或方法都丢里面去,然后在需要的页面中D()一下这个model中的某一方法即可. 

如下图代码:

显示全文