php Zookeeper使用踩坑
2024-10-07 21:49:12
用的是Zookeeper扩展,Php版本为7.2.17,下载地址:
https://pecl.php.net/package/zookeeper
用的是0.6.4版本
创建节点官方给的示例如下:
<?php
$zookeeper = new Zookeeper('locahost:2181');
$aclArray = array(
array(
'perms' => Zookeeper::PERM_ALL,
'scheme' => 'world',
'id' => 'anyone',
)
);
$path = '/path/to/newnode';
$realPath = $zookeeper->create($path, null, $aclArray);
if ($realPath)
echo $realPath;
else
echo 'ERR';
?>
一直报无效的acl,查看源代码:
static void php_parse_acl_list(zval *z_acl, struct ACL_vector *aclv)
{
int size = ;
int i = ;
#ifdef ZEND_ENGINE_3
ulong index = ;
zend_string *key;
zval *entry = NULL;
zval *perms = NULL;
zval *scheme = NULL;
zval *id = NULL;
#else
zval **entry;
zval **perms, **scheme, **id;
#endif if (!z_acl || (size = zend_hash_num_elements(Z_ARRVAL_P(z_acl))) == ) {
return;
} aclv->data = (struct ACL *)calloc(size, sizeof(struct ACL)); #ifdef ZEND_ENGINE_3
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(z_acl), index, key, entry) {
if( Z_TYPE_P(entry) != IS_ARRAY ) {
continue;
} perms = zend_hash_str_find(Z_ARRVAL_P(entry), ZEND_STRL("perms"));
scheme = zend_hash_str_find(Z_ARRVAL_P(entry), ZEND_STRL("scheme"));
id = zend_hash_str_find(Z_ARRVAL_P(entry), ZEND_STRL("id"));
if (perms == NULL || scheme == NULL || id == NULL) {
continue;
} convert_to_long_ex(perms);
convert_to_string_ex(scheme);
convert_to_string_ex(id); aclv->data[i].perms = (int32_t)Z_LVAL_P(perms);
aclv->data[i].id.id = strdup(Z_STRVAL_P(id));
aclv->data[i].id.scheme = strdup(Z_STRVAL_P(scheme)); i++;
} ZEND_HASH_FOREACH_END(); #else
for (zend_hash_internal_pointer_reset(Z_ARRVAL_P(z_acl));
zend_hash_get_current_data(Z_ARRVAL_P(z_acl), (void**)&entry) == SUCCESS;
zend_hash_move_forward(Z_ARRVAL_P(z_acl))) { if (Z_TYPE_PP(entry) != IS_ARRAY) {
continue;
} perms = scheme = id = NULL;
zend_hash_find(Z_ARRVAL_PP(entry), ZEND_STRS("perms"), (void**)&perms);
zend_hash_find(Z_ARRVAL_PP(entry), ZEND_STRS("scheme"), (void**)&scheme);
zend_hash_find(Z_ARRVAL_PP(entry), ZEND_STRS("id"), (void**)&id);
if (perms == NULL || scheme == NULL || id == NULL) {
continue;
} convert_to_long_ex(perms);
convert_to_string_ex(scheme);
convert_to_string_ex(id); aclv->data[i].perms = (int32_t)Z_LVAL_PP(perms);
aclv->data[i].id.id = strdup(Z_STRVAL_PP(id));
aclv->data[i].id.scheme = strdup(Z_STRVAL_PP(scheme)); i++;
}
#endif aclv->count = i;
}
源码里把acl参数当作数组的数组了,所以调整下就可以了:
<?php
$zookeeper = new Zookeeper('locahost:2181');
$aclArray = [];
$aclArray[] = array(
array(
'perms' => Zookeeper::PERM_ALL,
'scheme' => 'world',
'id' => 'anyone',
)
);
$path = '/path/to/newnode';
$realPath = $zookeeper->create($path, null, $aclArray);
if ($realPath)
echo $realPath;
else
echo 'ERR';
?>
最新文章
- MMORPG大型游戏设计与开发(服务器 AI 逻辑设定和状态结点)
- 【leetcode】Pascal&#39;s Triangle II
- 《社交网络》里的评分公式——ELO排名系统
- CodeSmith模板
- css中clip-path属性的运用
- echart------属性详细介绍
- 关于个人博客和Github地址提交
- linux之应用开发杂记(一)
- [杂题]CSUOJ1276 Counting Route Sequence
- 解决Mysql的主从数据库没有同步的两种方法
- hdu-3790-最短路径问题(dijkstra算法)
- (三)—Linux文件传输与mysql数据库安装
- rs(0)与rs(";字段名";)的区别
- [ASP.NET] 如何利用Javascript分割檔案上傳至後端合併
- MySQL数据库(增删改查语句)
- iOS逆向开发(4):注入目标函数 | fishhook | MobileSubstrate | MSHookFunction | iOSOpenDev
- Python 9*9口诀
- locust的安装与使用
- EBS增加客制应用CUX:Custom Application
- JVM调优总结 -Xms -Xmx -Xmn -Xss等
热门文章
- Alink漫谈(十九) :源码解析 之 分位点离散化Quantile
- jmeter http并发测试时报错
- SEO工程师考试题目
- Eazfuscator.net 2020 虚拟化保护(Virtulization)机制分析
- laravel kernel解析过程
- 拾色器,可以取出电脑屏幕的任何颜色,ui以及程序员前端等常用软件,文件很小,300K
- HDU - 1005 -Number Sequence(矩阵快速幂系数变式)
- hdu6704 2019CCPC网络选拔赛1003 K-th occurrence 后缀数组
- [BUUOJ记录] [BJDCTF 2nd]文件探测
- 下拉列表被flash覆盖的解决方法