Arm1.ru

PHP-скрипт для сборки всех видов в CouchDB

Написал перед новым годом маленький скриптик, проходится по всем базам в CouchDB и собирает все виды по очереди. Оставлю это здесь.

<?php

set_time_limit( 0 );

// all dbs
$ch = prepareCurlResource();
curl_setopt( $ch, CURLOPT_URL, 'http://localhost:5984/_all_dbs' );
$data = curl_exec( $ch );
$dbs = json_decode( $data );

foreach ( $dbs as $db ) {
    // skip _users and _replicator
    if ( substr( $db, 0, 1 ) == '_' )
        continue;

    // getting all databases
    $chCC = prepareCurlResource();
    curl_setopt( $chCC, CURLOPT_URL, 'http://localhost:5984/' . $db . '/_all_docs?startkey="_design/"&endkey="_design0"&include_docs=true' );
    $data = json_decode( curl_exec( $chCC ) );

    if ( false === empty( $data->rows ) ) {
        foreach( $data->rows as $design ) {

            // creating views of design
            if ( false === empty( $design->doc->views ) ) {
                foreach( $design->doc->views as $viewName => $tmp ) {
                    echo 'Creating view: ' . $db . '/' . $design->id . '/_view/' . $viewName . "\n";

                    $chCC = prepareCurlResource();
                    curl_setopt( $chCC, CURLOPT_URL, 'http://localhost:5984/' . $db . '/' . $design->id . '/_view/' . $viewName . '?limit=0' );
                    curl_exec( $chCC );
                }
            }
        }
    }
}

function prepareCurlResource() {
	$ch = curl_init();
	curl_setopt( $ch, CURLOPT_PORT, 5984 );
	curl_setopt( $ch, CURLOPT_HEADER, false );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
	curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Content-type: application/json' ) );

	return $ch;
}
keyboard_return back