这篇文章主要介绍“怎么安装php的zookeeper扩展”,在日常操作中,相信很多人在怎么安装php的zookeeper扩展问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么安装php的zookeeper扩展”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
php安装 zookeeper扩展的方法:首先下载zookeeper;然后指定一下安装目录;最后通过“make && make install”安装zookeeper即可。
本文操作环境:Windows7系统、PHP7.1、Dell G3电脑。
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。
要在php中使用zookeeper,先要安装php zookeeper扩展,要安装php zookeeper扩展,得先安装zookeeper
1、安装zookeeper
在这里面下载最新版的稳定版
http://mirror.bit.edu.cn/apache/zookeeper/stable/
cd /download
wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz //这个是已经安装好的工具,下面我们还需要自己编译安装一下,因为后面安装php的扩展时用得到
tar -zxvf zookeeper-3.4.12.tar.gz
cd zookeeper-3.4.12/src/c/
./configure --prefix=/usr/local/zookeeper //指定一下安装目录
make && make install
就这样安装完了
2、安装php zookeeper的扩展 在 http://pecl.php.net/package/zookeeper中找
cd /download
wget http://pecl.php.net/get/zookeeper-0.6.2.tgz
tar -zxvf zookeeper-0.6.2.tgz
cd zookeeper-0.6.2
./configure --with-libzookeeper-dir=/usr/local/zookeeper //要指定依赖
make && make install
配置php.ini
extension="/usr/local/Cellar/php/7.2.6/pecl/20170718/zookeeper.so"
重启php-fpm即可。
【】
3、启动zookeeper前要安装jdk 已经安装的可以忽略
在http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html里面下载
然后傻瓜式安装,这里不说了
4、启动zookeeper
cd /download/zookeeper-3.4.12/bin
./zkServer.sh start
./zkCli.sh -server 127.0.0.1:2181
cli方式开启
注意:
如果报错:
cd ../conf
cp zoo_sample.cfg zoo.cfg
复制一下文件
5、php代码测试
测试代码
<?php
/**
*
*/
class zookeeperDemo
{
private $zookeeper;
function __construct($address)
{
$this->zookeeper = new Zookeeper($address);
}
/*
* get
*/
public function get($path)
{
if (!$this->zookeeper->exists($path)) {
return null;
}
return $this->zookeeper->get($path);
}
public function getChildren($path) {
if (strlen($path) > 1 && preg_match('@/$@', $path)) {
// remove trailing /
$path = substr($path, 0, -1);
}
return $this->zookeeper->getChildren($path);
}
/*
* set 值
*
*
*/
public function set($path, $value)
{
if (!$this->zookeeper->exists($path)) {
//创建节点
$this->makePath($path);
} else {
$this->zookeeper->set($path,$value);
}
}
/*
* 创建路径
*/
private function makePath($path, $value='')
{
$parts = explode('/', $path);
$parts = array_filter($parts);//过滤空值
$subPath = '';
while (count($parts) > 1) {
$subPath .= '/' . array_shift($parts);//数组第一个元素弹出数组
if (!$this->zookeeper->exists($subpath)) {
$this->makeNode($subPath, $value);
}
}
}
/*
* 创建节点
*
*/
private function makeNode($path, $value, array $params = array())
{
if (empty($params)) {
$params = [
[
'perms' => Zookeeper::PERM_ALL,
'scheme' => 'world',
'id' => 'anyone'
]
];
}
return $this->zookeeper->create($path, $value, $params);
}
/*
* 删除
**/
public function deleteNode($path)
{
if (!$this->zookeeper->exists($path)) {
return null;
} else {
return $this->zookeeper->delete($path);
}
}
}
$zk = new zookeeperDemo('localhost:2181');
//var_dump($zk->get('/zookeeper'));
var_dump($zk->getChildren('/foo'));
//var_dump($zk->deleteNode("/foo"));
?>
测试代码2、
<?php
/**
* PHP Zookeeper
*
* PHP Version 5.3
*
* The PHP License, version 3.01
*
* @category Libraries
* @package PHP-Zookeeper
* @author Lorenzo Alberton <l.alberton@quipo.it>
* @copyright 2012 PHP Group
* @license http://www.php.net/license The PHP License, version 3.01
* @link https://github.com/andreiz/php-zookeeper
*/
/**
* Example interaction with the PHP Zookeeper extension
*
* @category Libraries
* @package PHP-Zookeeper
* @author Lorenzo Alberton <l.alberton@quipo.it>
* @copyright 2012 PHP Group
* @license http://www.php.net/license The PHP License, version 3.01
* @link https://github.com/andreiz/php-zookeeper
*/
class Zookeeper_Example
{
/**
* @var Zookeeper
*/
private $zookeeper;
/**
* @var Callback container
*/
private $callback = array();
/**
* Constructor
*
* @param string $address CSV list of host:port values (e.g. "host1:2181,host2:2181")
*/
public function __construct($address) {
$this->zookeeper = new Zookeeper($address);
}
/**
* Set a node to a value. If the node doesn't exist yet, it is created.
* Existing values of the node are overwritten
*
* @param string $path The path to the node
* @param mixed $value The new value for the node
*
* @return mixed previous value if set, or null
*/
public function set($path, $value) {
if (!$this->zookeeper->exists($path)) {
$this->makePath($path);
$this->makeNode($path, $value);
} else {
$this->zookeeper->set($path, $value);
}
}
/**
* Equivalent of "mkdir -p" on ZooKeeper
*
* @param string $path The path to the node
* @param string $value The value to assign to each new node along the path
*
* @return bool
*/
public function makePath($path, $value = '') {
$parts = explode('/', $path);
$parts = array_filter($parts);
$subpath = '';
while (count($parts) > 1) {
$subpath .= '/' . array_shift($parts);
if (!$this->zookeeper->exists($subpath)) {
$this->makeNode($subpath, $value);
}
}
}
/**
* Create a node on ZooKeeper at the given path
*
* @param string $path The path to the node
* @param string $value The value to assign to the new node
* @param array $params Optional parameters for the Zookeeper node.
* By default, a public node is created
*
* @return string the path to the newly created node or null on failure
*/
public function makeNode($path, $value, array $params = array()) {
if (empty($params)) {
$params = array(
array(
'perms' => Zookeeper::PERM_ALL,
'scheme' => 'world',
'id' => 'anyone',
)
);
}
return $this->zookeeper->create($path, $value, $params);
}
/**
* Get the value for the node
*
* @param string $path the path to the node
*
* @return string|null
*/
public function get($path) {
if (!$this->zookeeper->exists($path)) {
return null;
}
return $this->zookeeper->get($path);
}
/**
* List the children of the given path, i.e. the name of the directories
* within the current node, if any
*
* @param string $path the path to the node
*
* @return array the subpaths within the given node
*/
public function getChildren($path) {
if (strlen($path) > 1 && preg_match('@/$@', $path)) {
// remove trailing /
$path = substr($path, 0, -1);
}
return $this->zookeeper->getChildren($path);
}
/**
* Delete the node if it does not have any children
*
* @param string $path the path to the node
*
* @return true if node is deleted else null
*/
public function deleteNode($path)
{
if(!$this->zookeeper->exists($path))
{
return null;
}
else
{
return $this->zookeeper->delete($path);
}
}
/**
* Wath a given path
* @param string $path the path to node
* @param callable $callback callback function
* @return string|null
*/
public function watch($path, $callback)
{
if (!is_callable($callback)) {
return null;
}
if ($this->zookeeper->exists($path)) {
if (!isset($this->callback[$path])) {
$this->callback[$path] = array();
}
if (!in_array($callback, $this->callback[$path])) {
$this->callback[$path][] = $callback;
return $this->zookeeper->get($path, array($this, 'watchCallback'));
}
}
}
/**
* Wath event callback warper
* @param int $event_type
* @param int $stat
* @param string $path
* @return the return of the callback or null
*/
public function watchCallback($event_type, $stat, $path)
{
if (!isset($this->callback[$path])) {
return null;
}
foreach ($this->callback[$path] as $callback) {
$this->zookeeper->get($path, array($this, 'watchCallback'));
return call_user_func($callback);
}
}
/**
* Delete watch callback on a node, delete all callback when $callback is null
* @param string $path
* @param callable $callback
* @return boolean|NULL
*/
public function cancelWatch($path, $callback = null)
{
if (isset($this->callback[$path])) {
if (empty($callback)) {
unset($this->callback[$path]);
$this->zookeeper->get($path); //reset the callback
return true;
} else {
$key = array_search($callback, $this->callback[$path]);
if ($key !== false) {
unset($this->callback[$path][$key]);
return true;
} else {
return null;
}
}
} else {
return null;
}
}
}
$zk = new Zookeeper_Example('localhost:2181');
// var_dump($zk->get('/'));
// var_dump($zk->getChildren('/'));
// var_dump($zk->set('/test', 'abc'));
// var_dump($zk->get('/test'));
// var_dump($zk->getChildren('/'));
// var_dump($zk->set('/foo/001', 'bar1'));
// var_dump($zk->set('/foo/002', 'bar2'));
// var_dump($zk->get('/'));
// var_dump($zk->getChildren('/'));
// var_dump($zk->getChildren('/foo'));
//watch example 一旦/test节点的值被改变,就会调用一次callback
function callback() {
echo "in watch callback\n";
}
//$zk->set('/test', 1);
$ret = $zk->watch('/test', 'callback');
//$zk->set('/test', 2);//在终端执行
while (true) {
sleep(1);
}
/*
class ZookeeperDemo extends Zookeeper {
public function watcher( $i, $type, $key ) {
echo "Insider Watcher\n";
// Watcher gets consumed so we need to set a new one
//ZooKeeper提供了可以绑定在znode的监视器。如果监视器发现znode发生变化,该service会立即通知所有相关的客户端。这就是PH//P脚本如何知道变化的。Zookeeper::get方法的第二个参数是回调函数。当触发事件时,监视器会被消费掉,所以我们需要在回调函
//数中再次设置监视器。
$this->get( '/test', array($this, 'watcher' ) );
}
}
$zoo = new ZookeeperDemo('127.0.0.1:2181');
$zoo->get( '/test', array($zoo, 'watcher' ) );
while( true ) {
echo '.';
sleep(2);
}
*/
/*
// $zc = new Zookeeper();
// $zc->connect('127.0.0.1:2181');
// var_dump($zc->get('/zookeeper'));
// exit;
*/
?>
到此,关于“怎么安装php的zookeeper扩展”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。