PHP CouchDB Extension

The 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. This software is still alpha please use with care, you have been warned.

This is a staging page at the moment, efforts are underway to move development to PECL

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

 
 
php_couchdb_extension.txt · Last modified: 2009/11/20 02:41 by topdog
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki