123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- <?php
- class DahuaUtil
- {
-
- public static function getb($val, $pos)
- {
-
- return (($val & 1 << $pos) > 0) ? 1 : 0;
- }
- public static function setb(&$val, $pos, $newVal)
- {
-
- if ($newVal) {
- $val |= (1 << $pos);
- } else {
- $val &= ~(1 << $pos);
- }
- }
- public static function getBit($val, $posArr)
- {
-
-
- if (strpos($posArr[0], '-')) {
- $tmp = explode('-', $posArr[0], 2);
- $posArr = range($tmp[0], $tmp[1]);
- }
- $ret = '';
- foreach ($posArr as $pos) {
- $ret = DahuaUtil::getb($val, $pos) . $ret;
- }
- return bindec($ret);
- }
- public static function setBit(&$val, $posArr, $newVal)
- {
-
-
-
- if (strpos($posArr[0], '-')) {
- $tmp = explode('-', $posArr[0], 2);
- $posArr = range($tmp[0], $tmp[1]);
- }
- $ival = strrev(decbin($newVal));
- $k = 0;
- foreach ($posArr as $pos) {
- if (!isset($ival[$k])) {
- $ival[$k] = 0;
- }
- DahuaUtil::setb($val, $pos, $ival[$k]);
- $k++;
- }
- }
-
- public static function parseLocation($str)
- {
- $location_arr = explode(',', $str);
- $location = [];
- $location['locationState'] = $location_arr[0];
- $lat_d = substr($location_arr[1], 0, 2);
- $lat_m = substr($location_arr[1], 2);
- $location['lat'] = $lat_d + $lat_m * 60;
- $location['latType'] = $location_arr[2];
- $lng_d = substr($location_arr[3], 0, 3);
- $lng_m = substr($location_arr[3], 3);
- $location['lng'] = $lng_d + $lng_m * 60;
- $location['lngType'] = $location_arr[4];
- return $location;
- }
- public static function rlog(...$args)
- {
-
-
- $args = func_get_args();
- static $LOG_CONSOLE = true;
- static $LOG_NAME = "dahua.log";
- static $LOG_SIZE = 128 * 1024 * 1024;
- static $LOG_CACHE = false;
- static $CACHE_DURATION = 10;
- static $CACHE_SIZE = 1024;
- static $cacheStartTime = 0;
- static $cacheBuf = '';
- static $LOG_TIMES = 10;
- static $logCount = 0;
- static $MAX_LEN = 5048;
- $sync = false;
- $implicit0 = ['imsync', 'imtrace'];
- $buf = '';
- if (count($args) == 1 && $args[0] == "\n") {
- $buf = "\n";
- } else {
- $sync = strtolower($args[0]) == $implicit0[0];
- $pid = '';
- if (function_exists('posix_getpid')) {
- $pid = ' ' . posix_getpid() . ' ';
- }
- $fileLine = '';
- {
- $debug = debug_backtrace();
- $backtrace = 0;
- if (strpos($args[0], $implicit0[1]) === 0) {
- $backtrace = intval(str_replace($implicit0[1], '', $args[0]));
- unset($args[0]);
- } else if ($sync) {
- unset($args[0]);
- }
- $fileLine = ($pid == '' ? ' ' : '') . basename($debug[$backtrace]['file'])
- . ':' . $debug[$backtrace]['line'] . '';
- }
- $allPara = '';
- foreach ($args as $para) {
- if (is_array($para)) {
- $allPara .= json_encode($para) . ' ';
- } else if (is_object($para)) {
- if (method_exists($para, '__toString')) {
- $allPara .= $para . ' ';
- } else {
- $allPara .= get_class($para) . json_encode($para) . ' ';
- }
- } else if (is_bool($para)) {
- $allPara .= $para ? 'true ' : 'false ';
- } else if (is_null($para)) {
- $allPara .= 'null ';
- } else {
- $allPara .= $para . ' ';
- }
- }
- $len = strlen($allPara);
- if ($len > $MAX_LEN) {
- $allPara = substr($allPara, 0, $MAX_LEN) . "({$len})......";
- }
- $buf = "[" . date("y-m-d H:i:s") . "{$pid}{$fileLine}]" . $allPara . "\n";
- }
- $logCount++;
- if (!empty($LOG_NAME)) {
- if ($LOG_CACHE) {
- if ($cacheBuf == '') {
- $cacheStartTime = time();
- }
- $cacheBuf .= $buf;
-
- if (strlen($cacheBuf) > $CACHE_SIZE || time() - $cacheStartTime > $CACHE_DURATION) {
- $cacheStartTime = time();
- goto write;
- } else {
- if ($sync) {
- goto write;
- } else {
- goto skipWrite;
- }
- }
- } else {
- $cacheBuf = $buf;
- }
- write: {
- if ($logCount > 100) {
- clearstatcache();
- }
-
- if (($logCount == 1 || $logCount > $LOG_TIMES) && filesize($LOG_NAME) > $LOG_SIZE) {
-
- $fp = fopen($LOG_NAME . '.lock', 'a');
- $k = 0;
- do {
- $isLock = flocK($fp, LOCK_EX);
- $k++;
- if (!$isLock && $k > 1000) {
- echo "lock 1000\n";
- goto PUT;
- }
- } while (!$isLock);
-
- clearstatcache();
- if (filesize($LOG_NAME) <= $LOG_SIZE) {
- goto UN;
- }
-
- $oldLogName = $LOG_NAME . '.old';
- if (file_exists($oldLogName)) {
- if (!unlink($oldLogName)) {
- echo "unlink err\n";
- }
- }
- if (!rename($LOG_NAME, $oldLogName)) {
- echo "rename err\n";
- }
-
- UN:
- flock($fp, LOCK_UN);
- fclose($fp);
- $logCount = 0;
- }
- PUT:
- if (!file_put_contents($LOG_NAME, $cacheBuf, FILE_APPEND)) {
- echo "file_put_contents err\n";
- }
- $cacheBuf = '';
- }
- skipWrite:{
- }
- }
- if ($LOG_CONSOLE) {
- echo $buf;
- }
- }
- }
|