代码出处:https://git.oschina.net/afrxprojs/xgame-code_server ZooKeeper ?php//// 首先, 执行 zkCli.sh 进入 ZooKeeper 命令行工具界面,// 在命令行中可以执行以下操作 ://// 新建 Kev/Value// $ create /xgame 0// $ create /xgame/S00 0// $ create /xg
代码出处:https://git.oschina.net/afrxprojs/xgame-code_server ZooKeeper
<?php // // 首先, 执行 zkCli.sh 进入 ZooKeeper 命令行工具界面, // 在命令行中可以执行以下操作 : // // 新建 Kev/Value // $ create /xgame 0 // $ create /xgame/S00 0 // $ create /xgame/S00/conf/maintenanceTimeStr 0 // $ create /xgame/S00/conf/whiteList 0 // $ create /xgame/S00/conf/blackList 0 // // 之后执行 PHP 命令启动监听服务 : // // $ php ZkServ.php // // 注意 : 请事先确认是否已经安装 php-zookeeper 扩展? // 回到 ZooKeeper 界面, 尝试修改维护时间字符串 : // // $ set /xgame/S00/conf/maintenanceTimeStr [20150101000000,20151231235959] // // @import require_once("MyLog.php"); require_once("etc/AppName.php"); require_once("etc/ServerName.php"); require_once("etc/ZooKeeper.php"); /** * ZooKeeper 服务 * * @auth jinhaijiang * @since 2015/6/28 * @see https://git.oschina.net/afrxprojs/xgame-code_server * */ class ZkServ extends Zookeeper { /** * 应用名称 * * @var String * */ public $_appName; /** * 服务器名称 * * @var String * */ public $_serverName; /** * ZooKeeper 路径字典 * * @var Array * */ private $_zkPathMap; /** * 启动服务 * */ public function startUp() { // 获取应用名称和服务器名称 $appName = $this->_appName; $serverName = $this->_serverName; // 初始化路径字典 $this->_zkPathMap = array( "/${appName}/${serverName}/conf/maintenanceTimeStr" => "updateMaintenanceTime", "/${appName}/${serverName}/conf/whiteList" => "updateWhiteList", "/${appName}/${serverName}/conf/blackList" => "updateBlackList", ); foreach ($this->_zkPathMap as $key => $val) { // 输出调试日志 MyLog::LOG()->debug("准备监听 : $key"); // 设置监听 $this->get($key, array($this, "watch")); } } /** * 监听数据变化 * * @param $eventType * @param $eventState * @param $eventKey * */ public function watch($eventType, $eventState, $eventKey) { // 记录日志信息 MyLog::LOG()->info("接到数据"); // 输出调试信息 MyLog::LOG()->debug("eventType = ${eventType}, eventState = ${eventState}, eventKey = ${eventKey}"); // 获取数据 $data = $this->get($eventKey); // 获取函数引用并调用 $funcRef = $this->_zkPathMap[$eventKey]; $this->$funcRef($data); // 循环监听 $this->get($eventKey, array($this, "watch")); } /** * 更新停服维护时间, * 注意这是一个回调函数! 会在 watch 函数中被间接调用 * * @param String $value * @return void * */ private function updateMaintenanceTime($value) { // 记录日志信息 MyLog::LOG()->info("维护时间 = $value"); // 获取 JSON 数组 $jsonArr = json_decode($value); $startTimeStr = $jsonArr[0]; $endTimeStr = $jsonArr[1]; $text = <<< __EOF <?php \$GLOBALS["MAINTENANCE_START_TIME"] = $startTimeStr; \$GLOBALS["MAINTENANCE_END_TIME"] = $endTimeStr; __EOF; // 目标文件 $targetFile = dirname(__FILE__) . "/etc/MaintenanceTime.php"; // 写出目标文件 self::writeToFile($targetFile, $text); } /** * 更新白名单 * 注意这是一个回调函数! 会在 watch 函数中被间接调用 * * @param String $value * @return void * */ private function updateWhiteList($value) { // 记录日志信息 MyLog::LOG()->info("白名单 = ${value}"); // 获取 JSON 数组 $jsonArr = json_decode($value); $text = <<< __EOF <?php \$GLOBALS["WHITE_LIST"] = array( __EOF; foreach ($jsonArr as $json) { // 获取平台 UUId $platformUUId = $json; // 添加到文本 $text .= "\n\t\"${platformUUId}\" => 1, "; } $text .= "\n);"; // 目标文件 $targetFile = dirname(__FILE__) . "/etc/WhiteList.php"; // 写出目标文件 self::writeToFile($targetFile, $text); } /** * 更新黑名单 * 注意这是一个回调函数! 会在 watch 函数中被间接调用 * * @param String $value * @return void * */ private function updateBlackList($value) { // 记录日志信息 MyLog::LOG()->info("白名单 = ${value}"); // 获取 JSON 数组 $jsonArr = json_decode($value); $text = <<< __EOF <?php \$GLOBALS["BLACK_LIST"] = array( __EOF; foreach ($jsonArr as $json) { // 获取平台 UUId $platformUUId = $json; // 添加到文本 $text .= "\n\t\"${platformUUId}\" => 1, "; } $text .= "\n);"; // 目标文件 $targetFile = dirname(__FILE__) . "/etc/BlackList.php"; // 写出目标文件 self::writeToFile($targetFile, $text); } /** * 写出目标文件 * * @param $targetFile 目标文件的完整路径 * @param $text 文本内容 * @return void * */ private static function writeToFile($targetFile, $text) { // 打开文件 $fp = fopen($targetFile, "w"); if (!$fp) { // 如果打开文件失败, // 则直接退出! MyLog::LOG()->error("打开文件 ${targetFile} 失败!!"); return; } // 写出文件内容 $result = fwrite($fp, $text); if (!$result) { // 如果写出文件失败, // 则记录错误日志 MyLog::LOG()->error( "写出文件 ${targetFile} 失败!!" ); } fflush($fp); fclose($fp); } } // 获取服务器名称 $appName = $GLOBALS["APP_NAME"]; $serverName = $GLOBALS["SERVER_NAME"]; // ZooKeeper 配置 $zkHost = $GLOBALS["ZK_SERVER_HOST"]; $zkPort = $GLOBALS["ZK_SERVER_PORT"]; // 创建服务对象 $servObj = new ZkServ("${zkHost}:${zkPort}"); $servObj->_appName = $appName; $servObj->_serverName = $serverName; // 启动服务 $servObj->startUp(); while (true) { MyLog::LOG()->info("live"); sleep(60); }

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

方法:1、用“str_replace(" ","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\ \;||\xc2\xa0)/","其他字符",$str)”语句。

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

SublimeText3 Linux新版
SublimeText3 Linux最新版

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

Atom编辑器mac版下载
最流行的的开源编辑器

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),