PHP CouchDB Extension
August 11, 2010 at 09:00 AM | categories: PHP, CouchDB | View CommentsThe CouchDB extension allows PHP developers to easily manipulate CouchDB documents stored on CouchDB servers using an object-oriented API. The extension implements most of the CouchDB API with the ultimate goal being full support. The server JSON responses are automatically decoded into native PHP objects or arrays.
Development is on Github you can pull the source from there.
Features
- Supports the largest part of the CouchDB API (Database API, Document API, View API, Bulk Document API).
- Supports both Cookie and Basic authentication.
- Supports built in encoding and decoding of JSON.
- Supports replication.
- Supports server functions (configuration, status, stats).
- Supports user management.
Download
Installation
Using pecl command
Download the source
Run the command
pecl install couchdb-0.0.2a.tgz
Add "extension=couchdb.so" to your php.ini file
Using sources
Download the source Unpack the tarball
tar xzvf couchdb-0.0.2a.tgz
Enter the source directory and run
phpize && ./configure && make && make install
Add "extension=couchdb.so" to your php.ini file.
Build into PHP
Download the source Unpack the tarball to the PHP extensions dir
tar xzvf couchdb-0.0.2a.tgz -C $PHP_SOURCE/ext/"
Reconfigure the PHP source
rm configure && ./buildconf –force
Configure php with
./configure –enable-couchdb
Use
The documentation is still a work in progress can be found here, help in expanding the documentation is welcome.
Example
The following example is included in the source tarball, provides some guideline on using the extension.
<?php /* $ Id: */ /* Examples on how to use the PHP CouchDB extension */ /* Create the CouchdbClient object The url can support authentication as well - http://user:password@localhost:5984 - Authentication is both by basic and cookie To use cookie authentication you need to set use_cookie_auth to true CouchdbClient("http://user:pass@localhost:5984",true); The url could be https - https://localhost:5984 You may have to set the CA info using CouchdbClient::setCAPath() */ try { $conn = new CouchdbClient("http://localhost:5984"); print "Creating Database test_database :"; if($conn->createDatabase("test_database")){ print "PASS\n"; }else{ print "FAIL\n"; } echo "Getting Database list\n"; $result = $conn->listDatabases(); print_r($result); print "===========================\n"; print "Selecting Database test_database\n"; $conn->selectDB("test_database"); print "===========================\n"; print "Getting Database info\n"; $result = $conn->getDatabaseInfo(); print_r($result); print "===========================\n"; print "Store document to DB\n"; /* The document can be created in multiple ways - PHP stdclass object - PHP array - JSON encoded string # Using PHP stdclass $new_doc = new stdClass(); $new_doc->title = "New content"; $new_doc->_id = "BlogPost65"; # Using PHP array #$new_doc = array(_id=>Blogpost65,title=>"New content"); # Using JSON string $new_doc = '{"_id":"Blogpost65","title":"New content"}'; */ $new_doc = '{"_id":"Blogpost65","title":"New content"}'; $last_result = $conn->storeDoc($new_doc); print_r($last_result); print "===========================\n"; print "Store multiple documents to the DB\n"; $new_docs = array( array('type'=>'blogpost','title'=>'post'), array('type'=>'blogcomment','blogpost'=>'post','depth'=>1), array('type'=>'blogcomment','blogpost'=>'post','depth'=>2) ); $result = $conn->storeDocs($new_docs); print_r($result); print "===========================\n"; /* run in the examples directory or change the filename */ print "Store attachment to DB\n"; try { $result = $conn->storeAttachment("PHP_LOGO","./php.gif","php.gif","image/gif"); print_r($result); } catch (CouchdbClientException $f) { echo $f->getMessage()."\n"; } print "===========================\n"; print "Copy document to another document\n"; $result = $conn->copyDoc("Blogpost65","Blogpost66"); print_r($result); print "===========================\n"; print "Get all documents in DB\n"; $result = $conn->getAllDocs(); print_r($result); print "===========================\n"; print "Run a temp view query\n"; $view = '{"map" : "function(doc) { if (doc.title==\'New content\') { emit(null, doc); } }"}'; $result = $conn->getTempView($view); print_r($result); print "===========================\n"; print "Delete a document\n"; $conn->deleteDoc("Blogpost65",$last_result->rev); $result = $conn->getLastResponse(true); print_r($result); print "===========================\n"; print "Compacting Database :"; if($conn->compactDatabase()) print "PASS\n"; else print "FAIL\n"; print "===========================\n"; print "Getting updated Database info\n"; $result = $conn->getDatabaseInfo(); print_r($result); print "===========================\n"; print "Create the replica database - test_replica_database :"; if($conn->createDatabase("test_replica_database")) print "PASS\n"; else print "FAIL\n"; print "Start Database replication\n"; $result = $conn->startReplication("test_database","test_replica_database"); print_r($conn->getLastResponse(true)); print "===========================\n"; #print "Sleeping 5 seconds to allow replication to start\n"; #sleep(5); #print "===========================\n"; print "Drop the database :"; if($conn->deleteDatabase("test_database")) print "PASS\n"; else print "FAIL\n"; print "===========================\n"; print "Drop the replica database :"; if($conn->deleteDatabase("test_replica_database")) print "PASS\n"; else print "FAIL\n"; print_r($conn->getLastResponse(true)); print "===========================\n"; } catch(CouchdbClientException $e) { echo $e->getMessage(); } unset($conn); ?>
Feedback
Please send all requests, bug reports etc to topdog@fedoraproject.org
blog comments powered by Disqus