此包已被废弃且不再维护。未建议替代包。

具有最小依赖的etcd客户端

1.0.4 2016-01-09 13:45 UTC

This package is auto-updated.

Last update: 2022-02-01 12:53:44 UTC


README

Build Status

etcd是一个分布式配置系统,是coreos项目的一部分。

此仓库为PHP应用程序提供etcd客户端库。它基于linkorb/etcd-php。要了解我们为何分叉它,请点击这里

安装etcd

要安装etcd,请按照项目发布页面上的etcd团队发布的说明进行操作

https://github.com/coreos/etcd/releases/

安装ActiveCollab/etcd

最简单的方法是使用composer安装它

{
    "require" : {
        "activecollab/etcd": "^1.0"
    }
}

使用客户端

use use ActiveCollab\Etcd\Client as EtcdClient;

$client = new EtcdClient('http://127.0.0.1:4001');

// Get, set, update, remove key
if (!$client->exists('/key/name')) {
    $client->set('/key/name', 'value');
}
$client->set('/key/name', 'value', 10); // Set TTL
print $client->get('/key/name');

$client->update('/key/name', 'new value');

$client->remove('/key/name');

// Working with dirs
if (!$client->dirExists('/dir/path')) {
    $client->createDir('/dir/path');
}
$client->updateDir('/dir/path', 10); // Set TTL
$client->removeDir('/dir/path');

// Get dir info
$client->dirInfo('/dir/path');

// List subdirectories
$client->listDirs('/dir/path');

// Return key value map for a given dir
$client->getKeyValueMap('/dir/path')

沙盒路径

如果您在客户端实例中配置沙盒路径,所有密钥都将以该路径为前缀

$client = new EtcdClient('http://127.0.0.1:4001');
$client->setSandboxPath('/my/namespace');

$client->set('/key/name', 'value'); // will set /my/namespace/key/name
print $client->get('/key/name'); // will print /my/namespace/key/name

客户端提供的一种更便捷的方法是,可以在特定的沙盒中调用多个命令,并在完成后将客户端恢复到之前的沙盒路径

$client = new EtcdClient('http://127.0.0.1:4001');
$client->setSandboxPath('/my/namespace');

// Path relative to the current sandbox path
$client->sandboxed('./different/namespace', function(EtcdClient &$c) {
    $c->set('new_key', 123); // Sets /my/namespace/different/namespace/new_key
});

// Absolute path
$client->sandboxed('/different/namespace', function(EtcdClient &$c) {
    $c->set('new_key', 123); // Sets /different/namespace/new_key
});

print $client->getSandboxPath(); // Prints '/my/namespace'

SSL

可以配置客户端不验证SSL对等方

$client = (new Client('https://127.0.0.1:4001'))->verifySslPeer(false);

以及使用自定义CA文件

$client = (new Client('https://127.0.0.1:4001'))->verifySslPeer(true, '/path/to/ca/file');

为什么分叉?

虽然原始库运行良好,但它依赖于两个大型包:Symfony Console和Guzzle。对于像配置访问这样的底层功能,我们希望有一个更敏捷的解决方案,因此我们删除了CLI命令,并将原始库重构为使用PHP的curl扩展。