/** * 翻译一个字串到指定的语言 * 大小写敏感 * @param string $strKey * @return string */ public static function trans($strKey) { $theLoader = self::_getLoader(); $rev = $theLoader->trans($strKey); if ($rev === false) { if (self::LOG_UNREG_LANG_KEY) { if (class_exists('Watt_Log')) { $logger = new Watt_Log_File('LOG_UNREG_LANG'); $logger->log($strKey . "\t\t\t|\t" . self::$lang . "\t"); $fp = fopen(Watt_Config::getRootPath() . '/log/LOG_UNREG_LANG_' . self::$lang . "-" . date("Ymd") . '.txt', 'a+'); fwrite($fp, "\$s['{$strKey}']\t=\t'{$strKey}';\n"); fclose($fp); } } return $strKey; } else { return $rev; } }
/** * socket输出接口 * 将内部数据同步到外部服务器 */ public static function soutput() { echo microtime() . "<br>"; $loger = new Watt_Log_File('syncsocket'); //访问权限判断 if (!Watt_Sync_MessageListManage::interfaceAuth('InitiativeOutput')) { $loger->log('没有访问socket输出接口的权限'); exit; } //判断是否锁定 if (Watt_Sync_MessageListManage::isLock('soutput')) { //如果锁定 $loger->log('socket输出接口已锁定'); exit; } //锁定接口 Watt_Sync_MessageListManage::AddLock('soutput'); //------------外部unknown中的数据处理 start---------------// //------------外部unknown中的数据处理 end---------------// //------------外部消息序列的处理 start---------------// //获取所有的消息序列 $msgListArray = Watt_Sync_MessageListManage::getAllMessageList(); $msgList_execute = array(); $num_del = Watt_Sync_MessageListManage::getNumOnceDel(); //一次删除消息序列的个数 if (is_array($msgListArray) && count($msgListArray)) { foreach ($msgListArray as $key => $val) { //--------------------- 数据过滤器 start---------------------// //根据创建消息序列的服务器类型获取过滤器 $filterNameList = Watt_Sync_MessageListManage::getMsgListFilter($val['syncServerType']); //调用过滤器过滤数据 if (is_array($filterNameList) && count($filterNameList)) { foreach ($filterNameList as $filterName) { $aFilter = Watt_Sync_Filter::filterFactory($filterName); if ($aFilter) { $val = $aFilter->filter($val); } } } //如果字段为空,删除消息序列 if (($val['operate'] == 'UPDATE' || $val['operate'] == 'INSERT') && !count($val['cols']) || !count($val)) { //删除序列 Watt_Sync_MessageListManage::delMessageList($key); continue; } //--------------------- 数据过滤器 end---------------------// if (count($msgList_execute) < $num_del - 1) { $msgList_execute[$key] = $val; } else { //满足个数 $msgList_execute[$key] = $val; $msgSignArr = array_keys($msgList_execute); $data_str = ''; $data = array(); $data = array('msgList' => $msgList_execute, 'msgListDir' => 'unknown', 'validatePassword' => Watt_Sync_MessageListManage::getValidatePassword()); $data_str = urlencode(serialize($data)); //汇总文件内容 $msglistfilesize = strlen($data_str); //汇总文件大小 //生成本地消息序列汇总文件 $re = Watt_Sync_MessageListManage::createdMsgListFileSync($data_str); if ($re != '1') { $loger->log('socket输出接口创建内部消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } $dd_chunk = str_split($data_str, 1000); $count_arr = count($dd_chunk); //总块数 foreach ($dd_chunk as $key => $val) { //循环传输数据 $order_str = "send_" . ($key + 1) . "_" . $count_arr; $count = strlen($order_str); $order_str = str_split($order_str, 1); $temp_arr = array_fill($count, 20 - $count, ' '); $order_str_arr = array_merge($order_str, $temp_arr); $order_str = ''; foreach ($order_str_arr as $k => $v) { $order_str .= $v; } $data = $order_str . $val; $result = Watt_Sync_SyncSocket::syncInterface('send', $data); if ($result != '1') { $loger->log('socket输出接口传送消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } } //获取外部消息序列汇总文件的大小,比较内外汇总文件 //删除内部消息序列汇总文件 $result = Watt_Sync_MessageListManage::delFile('', 'msgListfile.msg'); if ($result != '1') { $loger->log('socket输入接口删除本地sync目录消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } //解析外部消息序列汇总文件成消息序列 $msgsignstr = Watt_Sync_SyncSocket::syncInterface('execmsgfile', ''); if ($result == '0') { $loger->log('socket输出接口解析外部消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } //删除内部消息序列 $msgsign = unserialize(urldecode($msgsignstr)); if (is_array($msgsign) && count($msgsign)) { $re = Watt_Sync_MessageListManage::delMessageList($msgsign); if ($re != '1') { $loger->log('socket输出接口删除内部消息序列失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } } else { $loger->log('socket输出接口内部消息序列数据错误'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } //移动外部消息序列到outsite目录 $result = Watt_Sync_SyncSocket::syncInterface('movemsglistoutsite', $msgsign); if ($result != '1') { $loger->log('socket输出接口移动外部消息序列到outsite目录失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } //执行外部outsite目录下的消息序列 /* $result = Watt_Sync_SyncSocket::syncInterface('execmsglist',''); if ($result!='1'){ $loger->log( 'socket执行外部outsite目录下的消息序列' ); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; }*/ // exit; $msgList_execute = array(); } } //--- 未满个数end //$msgList_execute[$key] = $val; $msgSignArr = array_keys($msgList_execute); $data_str = ''; $data = array(); $data = array('msgList' => $msgList_execute, 'msgListDir' => 'unknown', 'validatePassword' => Watt_Sync_MessageListManage::getValidatePassword()); $data_str = urlencode(serialize($data)); //汇总文件内容 $msglistfilesize = strlen($data_str); //汇总文件大小 //生成本地消息序列汇总文件 $re = Watt_Sync_MessageListManage::createdMsgListFileSync($data_str); if ($re != '1') { $loger->log('socket输出接口创建内部消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } $dd_chunk = str_split($data_str, 1000); $count_arr = count($dd_chunk); //总块数 foreach ($dd_chunk as $key => $val) { //循环传输数据 $order_str = "send_" . ($key + 1) . "_" . $count_arr; $count = strlen($order_str); $order_str = str_split($order_str, 1); $temp_arr = array_fill($count, 20 - $count, ' '); $order_str_arr = array_merge($order_str, $temp_arr); $order_str = ''; foreach ($order_str_arr as $k => $v) { $order_str .= $v; } $data = $order_str . $val; $result = Watt_Sync_SyncSocket::syncInterface('send', $data); if ($result != '1') { $loger->log('socket输出接口传送消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } } //获取外部消息序列汇总文件的大小,比较内外汇总文件 //删除内部消息序列汇总文件 $result = Watt_Sync_MessageListManage::delFile('', 'msgListfile.msg'); if ($result != '1') { $loger->log('socket输入接口删除本地sync目录消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } //解析外部消息序列汇总文件成消息序列 $msgsignstr = Watt_Sync_SyncSocket::syncInterface('execmsgfile', ''); if ($result == '0') { $loger->log('socket输出接口解析外部消息序列汇总文件失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } //删除内部消息序列 $msgsign = unserialize(urldecode($msgsignstr)); if (is_array($msgsign) && count($msgsign)) { $re = Watt_Sync_MessageListManage::delMessageList($msgsign); if ($re != '1') { $loger->log('socket输出接口删除内部消息序列失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } } else { $loger->log('socket输出接口内部消息序列数据错误'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } //移动外部消息序列到outsite目录 $result = Watt_Sync_SyncSocket::syncInterface('movemsglistoutsite', $msgsign); if ($result != '1') { $loger->log('socket输出接口移动外部消息序列到outsite目录失败'); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; } //执行外部outsite目录下的消息序列 /* $result = Watt_Sync_SyncSocket::syncInterface('execmsglist',''); if ($result!='1'){ $loger->log( 'socket执行外部outsite目录下的消息序列' ); //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); exit; }*/ // exit; //---未满个数 end } //------------外部消息序列的处理 end---------------// //解除锁定 Watt_Sync_MessageListManage::DelLock('soutput'); //$end_time = time(); echo '<br>' . microtime(); }
/** * 执行消息序列 * * @param array $msgList 消息序列 * @return true or false */ public static function executeMessageList($msgList) { if (!$msgList || !is_array($msgList) || !count($msgList)) { return false; } //组合SQL $sql = ""; if ($msgList['operate'] == 'UPDATE') { $cols = array(); foreach ($msgList['cols'] as $key => $val) { $cols[] = $key . '=' . $val; } $cols = implode(',', $cols); $sql = $msgList['operate'] . " " . $msgList['tableName'] . " SET " . $cols . " WHERE " . $msgList['cond']; } else { if ($msgList['operate'] == 'INSERT') { $cols = array(); $values = array(); foreach ($msgList['cols'] as $key => $val) { $cols[] = $key; $values[] = $val; } $cols = implode(',', $cols); $values = implode(',', $values); $sql = $msgList['operate'] . " INTO " . $msgList['tableName'] . " (" . $cols . ") VALUES (" . $values . ")"; } else { if ($msgList['operate'] == 'DELETE') { $sql = $msgList['operate'] . " FROM " . $msgList['tableName'] . " WHERE " . $msgList['cond']; } } } //return $sql; //执行SQL if ($sql != '') { //写日志 $loger = new Watt_Log_File('sync_dbsql'); $loger->log($sql); try { Watt_Db::getDb()->execute($sql, false); //return Watt_Sync_MessageListManage::getmsg1(); return true; } catch (Exception $e) { //出错处理 $loger->log('Failed because [' . $e->getMessage() . ']'); /** * @todo 增加出错锁,或使用 exec 锁作为 出错锁 * by terry */ return false; } } return false; }