e
This commit is contained in:
+100
-100
@@ -1,100 +1,100 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: whwyy
|
||||
* Date: 2018/4/4 0004
|
||||
* Time: 14:57
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Class ArrayAccess
|
||||
* @package Kiri\Core
|
||||
*/
|
||||
class ArrayAccess
|
||||
{
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function toArray($data): array
|
||||
{
|
||||
if (!is_object($data) && !is_array($data)) {
|
||||
return [];
|
||||
}
|
||||
if (is_object($data)) {
|
||||
$data = self::objToArray($data);
|
||||
}
|
||||
$tmp = [];
|
||||
if (!is_array($data)) {
|
||||
return $tmp;
|
||||
}
|
||||
foreach ($data as $key => $val) {
|
||||
if (is_array($val) || is_object($val)) {
|
||||
$tmp[$key] = self::toArray($val);
|
||||
} else {
|
||||
$tmp[$key] = $val;
|
||||
}
|
||||
}
|
||||
return $tmp;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function objToArray($data): array
|
||||
{
|
||||
if (!is_object($data)) {
|
||||
return $data;
|
||||
}
|
||||
if (method_exists($data, 'get')) {
|
||||
$data = $data->get();
|
||||
if (is_array($data)) {
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
if (method_exists($data, 'toArray')) {
|
||||
$data = $data->toArray();
|
||||
} else {
|
||||
$data = get_object_vars((object)$data);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $oldArray
|
||||
* @param array $newArray
|
||||
* @return array
|
||||
*/
|
||||
public static function merge(array $oldArray, array $newArray): array
|
||||
{
|
||||
if (empty($oldArray)) {
|
||||
return $newArray;
|
||||
} else if (empty($newArray)) {
|
||||
return $oldArray;
|
||||
}
|
||||
foreach ($newArray as $item => $value) {
|
||||
if (!isset($oldArray[$item])) {
|
||||
$oldArray[$item] = $value;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
$oldArray[$item] = self::merge($oldArray[$item], $value);
|
||||
} else {
|
||||
$oldArray[$item] = $value;
|
||||
}
|
||||
}
|
||||
return $oldArray;
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: whwyy
|
||||
* Date: 2018/4/4 0004
|
||||
* Time: 14:57
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Class ArrayAccess
|
||||
* @package Kiri\Core
|
||||
*/
|
||||
class ArrayAccess
|
||||
{
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function toArray($data): array
|
||||
{
|
||||
if (!is_object($data) && !is_array($data)) {
|
||||
return [];
|
||||
}
|
||||
if (is_object($data)) {
|
||||
$data = self::objToArray($data);
|
||||
}
|
||||
$tmp = [];
|
||||
if (!is_array($data)) {
|
||||
return $tmp;
|
||||
}
|
||||
foreach ($data as $key => $val) {
|
||||
if (is_array($val) || is_object($val)) {
|
||||
$tmp[$key] = self::toArray($val);
|
||||
} else {
|
||||
$tmp[$key] = $val;
|
||||
}
|
||||
}
|
||||
return $tmp;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function objToArray($data): array
|
||||
{
|
||||
if (!is_object($data)) {
|
||||
return $data;
|
||||
}
|
||||
if (method_exists($data, 'get')) {
|
||||
$data = $data->get();
|
||||
if (is_array($data)) {
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
if (method_exists($data, 'toArray')) {
|
||||
$data = $data->toArray();
|
||||
} else {
|
||||
$data = get_object_vars((object)$data);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $oldArray
|
||||
* @param array $newArray
|
||||
* @return array
|
||||
*/
|
||||
public static function merge(array $oldArray, array $newArray): array
|
||||
{
|
||||
if (empty($oldArray)) {
|
||||
return $newArray;
|
||||
} else if (empty($newArray)) {
|
||||
return $oldArray;
|
||||
}
|
||||
foreach ($newArray as $item => $value) {
|
||||
if (!isset($oldArray[$item])) {
|
||||
$oldArray[$item] = $value;
|
||||
}
|
||||
if (is_array($value)) {
|
||||
$oldArray[$item] = self::merge($oldArray[$item], $value);
|
||||
} else {
|
||||
$oldArray[$item] = $value;
|
||||
}
|
||||
}
|
||||
return $oldArray;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+104
-104
@@ -1,104 +1,104 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: dell
|
||||
* Date: 2019/1/14 0014
|
||||
* Time: 13:50
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Class DateFormat
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class DateFormat
|
||||
{
|
||||
|
||||
/**
|
||||
* @param $time
|
||||
* @return bool|false|int|string
|
||||
*/
|
||||
private static function check($time): bool|int|string
|
||||
{
|
||||
if ($time === null) {
|
||||
$time = time();
|
||||
} else if (is_numeric($time)) {
|
||||
$length = strlen((string)$time);
|
||||
if ($length != 10 && $length != 13) {
|
||||
return false;
|
||||
}
|
||||
} else if (is_string($time)) {
|
||||
$time = strtotime($time);
|
||||
}
|
||||
|
||||
if (date('Y-m-d', $time)) {
|
||||
return $time;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param null $time
|
||||
* @return bool|false|int
|
||||
*
|
||||
* 获取指定日期当周第一天的时间
|
||||
*/
|
||||
public static function getWeekCurrentDay($time = null): bool|int
|
||||
{
|
||||
if (!($time = static::check($time))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$time = strtotime('-' . (date('N') - 1) . 'days', $time);
|
||||
|
||||
return strtotime(date('Y-m-d'), $time);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param null $time
|
||||
* @return bool|false|int
|
||||
*
|
||||
* 获取指定日期当月第一天的时间
|
||||
*/
|
||||
public static function getMonthCurrentDay($time = null): bool|int
|
||||
{
|
||||
if (!($time = static::check($time))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return strtotime(date('Y-m', $time) . '-01');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $time
|
||||
* @return bool|int|string 指定的月份有几天
|
||||
* 指定的月份有几天
|
||||
*/
|
||||
public static function getMonthTotalDay($time): bool|int|string
|
||||
{
|
||||
if (!($time = static::check($time))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return date('t', $time);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $startTime
|
||||
* @param null $endTime
|
||||
* @return string
|
||||
*/
|
||||
public static function mtime($startTime, $endTime = null)
|
||||
{
|
||||
if ($endTime === null) {
|
||||
$endTime = microtime(true);
|
||||
}
|
||||
return sprintf('%.7f', $endTime - $startTime);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: dell
|
||||
* Date: 2019/1/14 0014
|
||||
* Time: 13:50
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Class DateFormat
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class DateFormat
|
||||
{
|
||||
|
||||
/**
|
||||
* @param $time
|
||||
* @return bool|false|int|string
|
||||
*/
|
||||
private static function check($time): bool|int|string
|
||||
{
|
||||
if ($time === null) {
|
||||
$time = time();
|
||||
} else if (is_numeric($time)) {
|
||||
$length = strlen((string)$time);
|
||||
if ($length != 10 && $length != 13) {
|
||||
return false;
|
||||
}
|
||||
} else if (is_string($time)) {
|
||||
$time = strtotime($time);
|
||||
}
|
||||
|
||||
if (date('Y-m-d', $time)) {
|
||||
return $time;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param null $time
|
||||
* @return bool|false|int
|
||||
*
|
||||
* 获取指定日期当周第一天的时间
|
||||
*/
|
||||
public static function getWeekCurrentDay($time = null): bool|int
|
||||
{
|
||||
if (!($time = static::check($time))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$time = strtotime('-' . (date('N') - 1) . 'days', $time);
|
||||
|
||||
return strtotime(date('Y-m-d'), $time);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param null $time
|
||||
* @return bool|false|int
|
||||
*
|
||||
* 获取指定日期当月第一天的时间
|
||||
*/
|
||||
public static function getMonthCurrentDay($time = null): bool|int
|
||||
{
|
||||
if (!($time = static::check($time))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return strtotime(date('Y-m', $time) . '-01');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $time
|
||||
* @return bool|int|string 指定的月份有几天
|
||||
* 指定的月份有几天
|
||||
*/
|
||||
public static function getMonthTotalDay($time): bool|int|string
|
||||
{
|
||||
if (!($time = static::check($time))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return date('t', $time);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $startTime
|
||||
* @param null $endTime
|
||||
* @return string
|
||||
*/
|
||||
public static function mtime($startTime, $endTime = null)
|
||||
{
|
||||
if ($endTime === null) {
|
||||
$endTime = microtime(true);
|
||||
}
|
||||
return sprintf('%.7f', $endTime - $startTime);
|
||||
}
|
||||
}
|
||||
|
||||
+58
-58
@@ -1,58 +1,58 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
use Exception;
|
||||
use Kiri\Abstracts\Component;
|
||||
|
||||
/**
|
||||
* Class Dtl
|
||||
* @package Kiri\Core
|
||||
*/
|
||||
class Dtl extends Component
|
||||
{
|
||||
|
||||
protected array $params;
|
||||
|
||||
|
||||
/**
|
||||
* Dtl constructor.
|
||||
* @param $params
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct($params)
|
||||
{
|
||||
parent::__construct([]);
|
||||
$this->params = $params;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
return $this->params;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $name
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
public function get($name): mixed
|
||||
{
|
||||
$array = $this->toArray();
|
||||
if (!isset($array[$name])) {
|
||||
return null;
|
||||
}
|
||||
return $array[$name];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
use Exception;
|
||||
use Kiri\Abstracts\Component;
|
||||
|
||||
/**
|
||||
* Class Dtl
|
||||
* @package Kiri\Core
|
||||
*/
|
||||
class Dtl extends Component
|
||||
{
|
||||
|
||||
protected array $params;
|
||||
|
||||
|
||||
/**
|
||||
* Dtl constructor.
|
||||
* @param $params
|
||||
* @throws Exception
|
||||
*/
|
||||
public function __construct($params)
|
||||
{
|
||||
parent::__construct([]);
|
||||
$this->params = $params;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* @throws Exception
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
return $this->params;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $name
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
public function get($name): mixed
|
||||
{
|
||||
$array = $this->toArray();
|
||||
if (!isset($array[$name])) {
|
||||
return null;
|
||||
}
|
||||
return $array[$name];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+101
-101
@@ -1,101 +1,101 @@
|
||||
<?php
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
use JetBrains\PhpStorm\Pure;
|
||||
use ReturnTypeWillChange;
|
||||
|
||||
class HashMap implements \ArrayAccess
|
||||
{
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private array $lists = [];
|
||||
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @param $value
|
||||
*/
|
||||
public function put(string $key, $value)
|
||||
{
|
||||
$this->lists[$key] = $value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return mixed
|
||||
*/
|
||||
#[Pure] public function get(string $key): mixed
|
||||
{
|
||||
if (!$this->has($key)) {
|
||||
return null;
|
||||
}
|
||||
return $this->lists[$key];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
*/
|
||||
public function del(string $key)
|
||||
{
|
||||
if (!$this->has($key)) {
|
||||
return;
|
||||
}
|
||||
unset($this->lists[$key]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return bool
|
||||
*/
|
||||
public function has(string $key): bool
|
||||
{
|
||||
return array_key_exists($key, $this->lists);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
* @return bool
|
||||
*/
|
||||
public function offsetExists(mixed $offset): bool
|
||||
{
|
||||
return isset($this->lists[$offset]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
* @return mixed
|
||||
*/
|
||||
#[Pure] public function offsetGet(mixed $offset): mixed
|
||||
{
|
||||
return $this->get($offset);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
* @param mixed $value
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function offsetSet(mixed $offset, mixed $value)
|
||||
{
|
||||
$this->put($offset, $value);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function offsetUnset(mixed $offset)
|
||||
{
|
||||
unset($this->lists[$offset]);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
use JetBrains\PhpStorm\Pure;
|
||||
use ReturnTypeWillChange;
|
||||
|
||||
class HashMap implements \ArrayAccess
|
||||
{
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
private array $lists = [];
|
||||
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @param $value
|
||||
*/
|
||||
public function put(string $key, $value)
|
||||
{
|
||||
$this->lists[$key] = $value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return mixed
|
||||
*/
|
||||
#[Pure] public function get(string $key): mixed
|
||||
{
|
||||
if (!$this->has($key)) {
|
||||
return null;
|
||||
}
|
||||
return $this->lists[$key];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
*/
|
||||
public function del(string $key)
|
||||
{
|
||||
if (!$this->has($key)) {
|
||||
return;
|
||||
}
|
||||
unset($this->lists[$key]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $key
|
||||
* @return bool
|
||||
*/
|
||||
public function has(string $key): bool
|
||||
{
|
||||
return array_key_exists($key, $this->lists);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
* @return bool
|
||||
*/
|
||||
public function offsetExists(mixed $offset): bool
|
||||
{
|
||||
return isset($this->lists[$offset]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
* @return mixed
|
||||
*/
|
||||
#[Pure] public function offsetGet(mixed $offset): mixed
|
||||
{
|
||||
return $this->get($offset);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
* @param mixed $value
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function offsetSet(mixed $offset, mixed $value)
|
||||
{
|
||||
$this->put($offset, $value);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param mixed $offset
|
||||
*/
|
||||
#[ReturnTypeWillChange]
|
||||
public function offsetUnset(mixed $offset)
|
||||
{
|
||||
unset($this->lists[$offset]);
|
||||
}
|
||||
}
|
||||
|
||||
+219
-219
@@ -1,219 +1,219 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
use Exception;
|
||||
|
||||
|
||||
/**
|
||||
* Class Help
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class Help
|
||||
{
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return string
|
||||
*/
|
||||
public static function toXml(array $data): string
|
||||
{
|
||||
$xml = "<xml>";
|
||||
foreach ($data as $key => $val) {
|
||||
if (is_array($val)) {
|
||||
$xml .= "<" . $key . ">" . static::xmlChild($val) . "</" . $key . ">";
|
||||
} else if (is_numeric($val)) {
|
||||
$xml .= "<" . $key . ">" . $val . "</" . $key . ">";
|
||||
} else {
|
||||
$xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
|
||||
}
|
||||
}
|
||||
$xml .= "</xml>";
|
||||
return $xml;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $array
|
||||
* @return string
|
||||
*/
|
||||
private static function xmlChild(array $array): string
|
||||
{
|
||||
$string = '';
|
||||
foreach ($array as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
$string .= static::xmlChild($value);
|
||||
} else if (is_numeric($value)) {
|
||||
$string .= "<" . $key . ">" . $value . "</" . $key . ">";
|
||||
} else {
|
||||
$string .= "<" . $key . "><![CDATA[" . $value . "]]></" . $key . ">";
|
||||
}
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $xml
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function toArray($xml): mixed
|
||||
{
|
||||
if (empty($xml)) {
|
||||
return [];
|
||||
} else if (is_array($xml)) {
|
||||
return $xml;
|
||||
}
|
||||
if (!($_xml = Xml::isXml($xml))) {
|
||||
return static::jsonToArray($xml);
|
||||
}
|
||||
return $_xml;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $xml
|
||||
* @return mixed
|
||||
*/
|
||||
public static function jsonToArray($xml): mixed
|
||||
{
|
||||
$_xml = json_decode($xml, true);
|
||||
if (is_null($_xml)) {
|
||||
return [];
|
||||
}
|
||||
return $_xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $xml
|
||||
* @return mixed
|
||||
*/
|
||||
public static function xmlToArray($xml): mixed
|
||||
{
|
||||
if (is_array($xml)) {
|
||||
return $xml;
|
||||
}
|
||||
if (($data = @simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)) !== false) {
|
||||
return json_decode(json_encode($data), TRUE);
|
||||
}
|
||||
if (!is_null($json = json_decode($xml, TRUE))) {
|
||||
return $json;
|
||||
}
|
||||
return $xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $parameter
|
||||
* @return array|false|string
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function toString($parameter): bool|array|string
|
||||
{
|
||||
if (!is_string($parameter)) {
|
||||
$parameter = ArrayAccess::toArray($parameter);
|
||||
if (is_array($parameter)) {
|
||||
$parameter = Json::encode($parameter);
|
||||
}
|
||||
}
|
||||
return $parameter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $json
|
||||
* @return bool|string
|
||||
*/
|
||||
public static function toJson(mixed $json): bool|string
|
||||
{
|
||||
if (is_object($json)) {
|
||||
$json = get_object_vars($json);
|
||||
}
|
||||
if (is_array($json)) {
|
||||
return json_encode($json, JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
$matchQuote = '/(<\?xml.*?\?>)?<([a-zA-Z_]+)>(<([a-zA-Z_]+)><!.*?><\/\4>)+<\/\2>/';
|
||||
if (preg_match($matchQuote, $json)) {
|
||||
$json = self::xmlToArray($json);
|
||||
} else {
|
||||
$json = json_decode($json, true);
|
||||
}
|
||||
if (!is_array($json)) {
|
||||
$json = [];
|
||||
}
|
||||
return json_encode($json, JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $length
|
||||
* @return string
|
||||
*
|
||||
* 随机字符串
|
||||
*/
|
||||
public static function random($length = 20): string
|
||||
{
|
||||
$res = [];
|
||||
$str = 'abcdefghijklmnopqrstuvwxyz';
|
||||
$str .= strtoupper($str) . '1234567890';
|
||||
for ($i = 0; $i < $length; $i++) {
|
||||
$rand = substr($str, rand(0, strlen($str) - 2), 1);
|
||||
if (empty($rand)) {
|
||||
$rand = substr($str, strlen($str) - 3, 1);
|
||||
}
|
||||
array_push($res, $rand);
|
||||
}
|
||||
|
||||
return implode($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $array
|
||||
* @param $key
|
||||
* @param string $type
|
||||
* @return string
|
||||
*/
|
||||
public static function sign(array $array, $key, string $type = 'MD5'): string
|
||||
{
|
||||
ksort($array, SORT_ASC);
|
||||
$string = [];
|
||||
foreach ($array as $hashKey => $val) {
|
||||
if (empty($val)) {
|
||||
continue;
|
||||
}
|
||||
$string[] = $hashKey . '=' . $val;
|
||||
}
|
||||
$string[] = 'key=' . $key;
|
||||
$string = implode('&', $string);
|
||||
if ($type == 'MD5') {
|
||||
return strtoupper(md5($string));
|
||||
} else {
|
||||
return hash('sha256', $string);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $email
|
||||
* @param string $Subject
|
||||
* @param $messageContent
|
||||
*/
|
||||
public static function sendEmail($email, string $Subject, $messageContent)
|
||||
{
|
||||
if (!class_exists('\Swift_Mailer')) {
|
||||
return;
|
||||
}
|
||||
$mailer = new \Swift_Mailer((new \Swift_SmtpTransport($email['host'], $email['port']))
|
||||
->setUsername($email['username'])->setPassword($email['password']));
|
||||
$message = (new \Swift_Message($Subject))
|
||||
->setFrom([$email['send']['address'] => $email['send']['nickname']])
|
||||
->setBody('Here is the message itself');
|
||||
|
||||
foreach ($email['receive'] as $item) {
|
||||
$message->setTo([$item['address'], $item['address'] => $item['nickname']]);
|
||||
}
|
||||
$mailer->send($messageContent);
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
use Exception;
|
||||
|
||||
|
||||
/**
|
||||
* Class Help
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class Help
|
||||
{
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
* @return string
|
||||
*/
|
||||
public static function toXml(array $data): string
|
||||
{
|
||||
$xml = "<xml>";
|
||||
foreach ($data as $key => $val) {
|
||||
if (is_array($val)) {
|
||||
$xml .= "<" . $key . ">" . static::xmlChild($val) . "</" . $key . ">";
|
||||
} else if (is_numeric($val)) {
|
||||
$xml .= "<" . $key . ">" . $val . "</" . $key . ">";
|
||||
} else {
|
||||
$xml .= "<" . $key . "><![CDATA[" . $val . "]]></" . $key . ">";
|
||||
}
|
||||
}
|
||||
$xml .= "</xml>";
|
||||
return $xml;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $array
|
||||
* @return string
|
||||
*/
|
||||
private static function xmlChild(array $array): string
|
||||
{
|
||||
$string = '';
|
||||
foreach ($array as $key => $value) {
|
||||
if (is_array($value)) {
|
||||
$string .= static::xmlChild($value);
|
||||
} else if (is_numeric($value)) {
|
||||
$string .= "<" . $key . ">" . $value . "</" . $key . ">";
|
||||
} else {
|
||||
$string .= "<" . $key . "><![CDATA[" . $value . "]]></" . $key . ">";
|
||||
}
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $xml
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function toArray($xml): mixed
|
||||
{
|
||||
if (empty($xml)) {
|
||||
return [];
|
||||
} else if (is_array($xml)) {
|
||||
return $xml;
|
||||
}
|
||||
if (!($_xml = Xml::isXml($xml))) {
|
||||
return static::jsonToArray($xml);
|
||||
}
|
||||
return $_xml;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $xml
|
||||
* @return mixed
|
||||
*/
|
||||
public static function jsonToArray($xml): mixed
|
||||
{
|
||||
$_xml = json_decode($xml, true);
|
||||
if (is_null($_xml)) {
|
||||
return [];
|
||||
}
|
||||
return $_xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $xml
|
||||
* @return mixed
|
||||
*/
|
||||
public static function xmlToArray($xml): mixed
|
||||
{
|
||||
if (is_array($xml)) {
|
||||
return $xml;
|
||||
}
|
||||
if (($data = @simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)) !== false) {
|
||||
return json_decode(json_encode($data), TRUE);
|
||||
}
|
||||
if (!is_null($json = json_decode($xml, TRUE))) {
|
||||
return $json;
|
||||
}
|
||||
return $xml;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $parameter
|
||||
* @return array|false|string
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function toString($parameter): bool|array|string
|
||||
{
|
||||
if (!is_string($parameter)) {
|
||||
$parameter = ArrayAccess::toArray($parameter);
|
||||
if (is_array($parameter)) {
|
||||
$parameter = Json::encode($parameter);
|
||||
}
|
||||
}
|
||||
return $parameter;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mixed $json
|
||||
* @return bool|string
|
||||
*/
|
||||
public static function toJson(mixed $json): bool|string
|
||||
{
|
||||
if (is_object($json)) {
|
||||
$json = get_object_vars($json);
|
||||
}
|
||||
if (is_array($json)) {
|
||||
return json_encode($json, JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
$matchQuote = '/(<\?xml.*?\?>)?<([a-zA-Z_]+)>(<([a-zA-Z_]+)><!.*?><\/\4>)+<\/\2>/';
|
||||
if (preg_match($matchQuote, $json)) {
|
||||
$json = self::xmlToArray($json);
|
||||
} else {
|
||||
$json = json_decode($json, true);
|
||||
}
|
||||
if (!is_array($json)) {
|
||||
$json = [];
|
||||
}
|
||||
return json_encode($json, JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $length
|
||||
* @return string
|
||||
*
|
||||
* 随机字符串
|
||||
*/
|
||||
public static function random($length = 20): string
|
||||
{
|
||||
$res = [];
|
||||
$str = 'abcdefghijklmnopqrstuvwxyz';
|
||||
$str .= strtoupper($str) . '1234567890';
|
||||
for ($i = 0; $i < $length; $i++) {
|
||||
$rand = substr($str, rand(0, strlen($str) - 2), 1);
|
||||
if (empty($rand)) {
|
||||
$rand = substr($str, strlen($str) - 3, 1);
|
||||
}
|
||||
array_push($res, $rand);
|
||||
}
|
||||
|
||||
return implode($res);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $array
|
||||
* @param $key
|
||||
* @param string $type
|
||||
* @return string
|
||||
*/
|
||||
public static function sign(array $array, $key, string $type = 'MD5'): string
|
||||
{
|
||||
ksort($array, SORT_ASC);
|
||||
$string = [];
|
||||
foreach ($array as $hashKey => $val) {
|
||||
if (empty($val)) {
|
||||
continue;
|
||||
}
|
||||
$string[] = $hashKey . '=' . $val;
|
||||
}
|
||||
$string[] = 'key=' . $key;
|
||||
$string = implode('&', $string);
|
||||
if ($type == 'MD5') {
|
||||
return strtoupper(md5($string));
|
||||
} else {
|
||||
return hash('sha256', $string);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $email
|
||||
* @param string $Subject
|
||||
* @param $messageContent
|
||||
*/
|
||||
public static function sendEmail($email, string $Subject, $messageContent)
|
||||
{
|
||||
if (!class_exists('\Swift_Mailer')) {
|
||||
return;
|
||||
}
|
||||
$mailer = new \Swift_Mailer((new \Swift_SmtpTransport($email['host'], $email['port']))
|
||||
->setUsername($email['username'])->setPassword($email['password']));
|
||||
$message = (new \Swift_Message($Subject))
|
||||
->setFrom([$email['send']['address'] => $email['send']['nickname']])
|
||||
->setBody('Here is the message itself');
|
||||
|
||||
foreach ($email['receive'] as $item) {
|
||||
$message->setTo([$item['address'], $item['address'] => $item['nickname']]);
|
||||
}
|
||||
$mailer->send($messageContent);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+121
-121
@@ -1,121 +1,121 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: admin
|
||||
* Date: 2019-03-20
|
||||
* Time: 01:04
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
use Error;
|
||||
use Exception;
|
||||
use Throwable;
|
||||
|
||||
/**
|
||||
* Class JSON
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class Json
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @return false|string
|
||||
*/
|
||||
public static function encode($data): bool|string
|
||||
{
|
||||
if (empty($data)) {
|
||||
return false;
|
||||
}
|
||||
if (is_array($data)) {
|
||||
return json_encode($data, JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @param bool $asArray
|
||||
* @return mixed
|
||||
*/
|
||||
public static function decode($data, bool $asArray = true): mixed
|
||||
{
|
||||
if (is_array($data) || is_numeric($data)) {
|
||||
return $data;
|
||||
}
|
||||
if (!is_string($data)) return null;
|
||||
return json_decode($data, $asArray);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $code
|
||||
* @param string|array $message
|
||||
* @param array|int $data
|
||||
* @param int $count
|
||||
* @param array $exPageInfo
|
||||
* @return string|bool
|
||||
*/
|
||||
public static function to($code, string|array $message = '', array|int $data = [], int $count = 0, array $exPageInfo = []): string|bool
|
||||
{
|
||||
$params['code'] = $code;
|
||||
if (!is_string($message)) {
|
||||
$params['message'] = 'System success.';
|
||||
$params['param'] = $message;
|
||||
if (!empty($data)) {
|
||||
$params['exPageInfo'] = $data;
|
||||
}
|
||||
} else {
|
||||
$params['message'] = $message;
|
||||
$params['param'] = $data;
|
||||
}
|
||||
if (!empty($exPageInfo)) {
|
||||
$params['exPageInfo'] = $exPageInfo;
|
||||
}
|
||||
$params['count'] = $count;
|
||||
if (is_numeric($data) || !is_numeric($count)) {
|
||||
$params['count'] = $data;
|
||||
$params['exPageInfo'] = $count;
|
||||
}
|
||||
if ((int)$params['count'] == -100) {
|
||||
$params['count'] = 1;
|
||||
}
|
||||
return static::encode($params);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param Throwable|Error $throwable
|
||||
* @return bool|string
|
||||
*/
|
||||
public static function error(Throwable|Error $throwable): bool|string
|
||||
{
|
||||
$array['code'] = $throwable->getCode() == 0 ? 500 : $throwable->getCode();
|
||||
$array['message'] = $throwable->getMessage();
|
||||
$array['param'] = [
|
||||
'file' => $throwable->getFile(),
|
||||
'line' => $throwable->getLine()
|
||||
];
|
||||
return Json::encode($array);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $state
|
||||
* @param $body
|
||||
* @return false|int|string
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function output($state, $body): bool|int|string
|
||||
{
|
||||
$params['state'] = $state;
|
||||
$params['body'] = ArrayAccess::toArray($body);
|
||||
|
||||
return static::encode($params);
|
||||
}
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: admin
|
||||
* Date: 2019-03-20
|
||||
* Time: 01:04
|
||||
*/
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
use Error;
|
||||
use Exception;
|
||||
use Throwable;
|
||||
|
||||
/**
|
||||
* Class JSON
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class Json
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @return false|string
|
||||
*/
|
||||
public static function encode($data): bool|string
|
||||
{
|
||||
if (empty($data)) {
|
||||
return false;
|
||||
}
|
||||
if (is_array($data)) {
|
||||
return json_encode($data, JSON_UNESCAPED_UNICODE);
|
||||
}
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @param bool $asArray
|
||||
* @return mixed
|
||||
*/
|
||||
public static function decode($data, bool $asArray = true): mixed
|
||||
{
|
||||
if (is_array($data) || is_numeric($data)) {
|
||||
return $data;
|
||||
}
|
||||
if (!is_string($data)) return null;
|
||||
return json_decode($data, $asArray);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $code
|
||||
* @param string|array $message
|
||||
* @param array|int $data
|
||||
* @param int $count
|
||||
* @param array $exPageInfo
|
||||
* @return string|bool
|
||||
*/
|
||||
public static function to($code, string|array $message = '', array|int $data = [], int $count = 0, array $exPageInfo = []): string|bool
|
||||
{
|
||||
$params['code'] = $code;
|
||||
if (!is_string($message)) {
|
||||
$params['message'] = 'System success.';
|
||||
$params['param'] = $message;
|
||||
if (!empty($data)) {
|
||||
$params['exPageInfo'] = $data;
|
||||
}
|
||||
} else {
|
||||
$params['message'] = $message;
|
||||
$params['param'] = $data;
|
||||
}
|
||||
if (!empty($exPageInfo)) {
|
||||
$params['exPageInfo'] = $exPageInfo;
|
||||
}
|
||||
$params['count'] = $count;
|
||||
if (is_numeric($data) || !is_numeric($count)) {
|
||||
$params['count'] = $data;
|
||||
$params['exPageInfo'] = $count;
|
||||
}
|
||||
if ((int)$params['count'] == -100) {
|
||||
$params['count'] = 1;
|
||||
}
|
||||
return static::encode($params);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param Throwable|Error $throwable
|
||||
* @return bool|string
|
||||
*/
|
||||
public static function error(Throwable|Error $throwable): bool|string
|
||||
{
|
||||
$array['code'] = $throwable->getCode() == 0 ? 500 : $throwable->getCode();
|
||||
$array['message'] = $throwable->getMessage();
|
||||
$array['param'] = [
|
||||
'file' => $throwable->getFile(),
|
||||
'line' => $throwable->getLine()
|
||||
];
|
||||
return Json::encode($array);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $state
|
||||
* @param $body
|
||||
* @return false|int|string
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function output($state, $body): bool|int|string
|
||||
{
|
||||
$params['state'] = $state;
|
||||
$params['body'] = ArrayAccess::toArray($body);
|
||||
|
||||
return static::encode($params);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
class Network
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public static function local(): string
|
||||
{
|
||||
return current(swoole_get_local_ip());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
<?php
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
class Network
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public static function local(): string
|
||||
{
|
||||
return current(swoole_get_local_ip());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+31
-31
@@ -1,31 +1,31 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
class Number
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @param int $userId
|
||||
* @return string
|
||||
*/
|
||||
public static function order(int $userId): string
|
||||
{
|
||||
$explode = current(explode(' ', str_replace('0.', '', microtime())));
|
||||
|
||||
return 'No.' . sprintf('%010d', $userId) . '.' . date('Ymd.His') . '.' . $explode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $userId
|
||||
* @return string
|
||||
*/
|
||||
public static function create(int $userId): string
|
||||
{
|
||||
return static::order($userId);
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
class Number
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @param int $userId
|
||||
* @return string
|
||||
*/
|
||||
public static function order(int $userId): string
|
||||
{
|
||||
$explode = current(explode(' ', str_replace('0.', '', microtime())));
|
||||
|
||||
return 'No.' . sprintf('%010d', $userId) . '.' . date('Ymd.His') . '.' . $explode;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $userId
|
||||
* @return string
|
||||
*/
|
||||
public static function create(int $userId): string
|
||||
{
|
||||
return static::order($userId);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+172
-172
@@ -1,172 +1,172 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
/**
|
||||
* Class Reader
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class Reader
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @param $filepath
|
||||
* @param int $page
|
||||
* @param int $size
|
||||
* @return array and int
|
||||
*/
|
||||
public static function readerServerLogPagination($filepath, int $page = 1, int $size = 20): array
|
||||
{
|
||||
$count = 0;
|
||||
$strings = [];
|
||||
$offset = ($page - 1) * $size;
|
||||
|
||||
if (!file_exists($filepath)) {
|
||||
return [0, []];
|
||||
}
|
||||
|
||||
//只读方式打开文件
|
||||
$fp = fopen($filepath, "r");
|
||||
|
||||
//开始循环读取$buffer_size
|
||||
while (!feof($fp)) {
|
||||
//读文件到缓冲区
|
||||
$buffer = fgets($fp);
|
||||
$count++;
|
||||
if ($count > $offset && count($strings) < $size) {
|
||||
$strings[] = [
|
||||
'id' => $count,
|
||||
'content' => $buffer
|
||||
];
|
||||
}
|
||||
}
|
||||
//关闭文件
|
||||
fclose($fp);
|
||||
unset($fp);
|
||||
|
||||
return ['total' => $count, 'list' => $strings];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $filename
|
||||
* @param $start
|
||||
* @param $lines
|
||||
* @return array
|
||||
*/
|
||||
public static function read_backward_line($filename, $start, $lines): array
|
||||
{
|
||||
$lines++;
|
||||
$offset = -1;
|
||||
$read = '';
|
||||
$fp = @fopen($filename, "r");
|
||||
|
||||
$tmpStart = 0;
|
||||
while ($lines && fseek($fp, $offset, SEEK_END) >= 0) {
|
||||
|
||||
$c = fgetc($fp);
|
||||
if ($c == "\n" || $c == "\r") {
|
||||
if (++$tmpStart >= $start)
|
||||
$lines--;
|
||||
}
|
||||
|
||||
|
||||
if ($tmpStart >= $start)
|
||||
$read .= $c;
|
||||
$offset--;
|
||||
}
|
||||
|
||||
$read = trim($read);
|
||||
|
||||
$contents = [];
|
||||
$read = array_reverse(explode("\n", strrev($read)));
|
||||
foreach ($read as $key => $value) {
|
||||
if (empty($value)) {
|
||||
unset($read[$key]);
|
||||
} else {
|
||||
$contents[] = ['content' => $value, 'id' => $key + $start];
|
||||
}
|
||||
}
|
||||
|
||||
$response['total'] = self::read_count_by_file($filename);
|
||||
$response['list'] = $contents;
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $filepath
|
||||
* @return int
|
||||
*/
|
||||
private static function read_count_by_file($filepath): int
|
||||
{
|
||||
$count = 0;
|
||||
//只读方式打开文件
|
||||
$fp = fopen($filepath, "r");
|
||||
|
||||
//开始循环读取$buffer_size
|
||||
while (fgets($fp)) {
|
||||
$count++;
|
||||
}
|
||||
//关闭文件
|
||||
fclose($fp);
|
||||
unset($fp);
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $filepath
|
||||
* @param int $page
|
||||
* @param int $size
|
||||
* @return array
|
||||
*/
|
||||
public static function folderPagination($filepath, int $page = 1, int $size = 20): array
|
||||
{
|
||||
$count = 0;
|
||||
$strings = [];
|
||||
$offset = ($page - 1) * $size;
|
||||
|
||||
if (!is_dir($filepath)) {
|
||||
return [0, []];
|
||||
}
|
||||
|
||||
foreach (glob($filepath . '/*') as $key => $value) {
|
||||
$count++;
|
||||
if ($key < $offset || count($strings) >= $size) {
|
||||
continue;
|
||||
}
|
||||
$explode = explode(DIRECTORY_SEPARATOR, $value);
|
||||
|
||||
$addTime = fileatime($value);
|
||||
$changeTime = filectime($value);
|
||||
$modifyTime = filemtime($value);
|
||||
$strings[] = [
|
||||
'id' => $count,
|
||||
'path' => $value,
|
||||
'isDir' => (int)is_dir($value),
|
||||
'name' => end($explode),
|
||||
'atime' => [
|
||||
'format' => date('Y-m-d H:i:s', $addTime),
|
||||
'microtime' => $addTime
|
||||
],
|
||||
'ctime' => [
|
||||
'format' => date('Y-m-d H:i:s', $changeTime),
|
||||
'microtime' => $changeTime
|
||||
],
|
||||
'mtime' => [
|
||||
'format' => date('Y-m-d H:i:s', $modifyTime),
|
||||
'microtime' => $modifyTime
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
array_multisort($strings, array_column($strings, 'isDir'), SORT_DESC);
|
||||
|
||||
return ['total' => $count, 'list' => $strings];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
/**
|
||||
* Class Reader
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class Reader
|
||||
{
|
||||
|
||||
|
||||
/**
|
||||
* @param $filepath
|
||||
* @param int $page
|
||||
* @param int $size
|
||||
* @return array and int
|
||||
*/
|
||||
public static function readerServerLogPagination($filepath, int $page = 1, int $size = 20): array
|
||||
{
|
||||
$count = 0;
|
||||
$strings = [];
|
||||
$offset = ($page - 1) * $size;
|
||||
|
||||
if (!file_exists($filepath)) {
|
||||
return [0, []];
|
||||
}
|
||||
|
||||
//只读方式打开文件
|
||||
$fp = fopen($filepath, "r");
|
||||
|
||||
//开始循环读取$buffer_size
|
||||
while (!feof($fp)) {
|
||||
//读文件到缓冲区
|
||||
$buffer = fgets($fp);
|
||||
$count++;
|
||||
if ($count > $offset && count($strings) < $size) {
|
||||
$strings[] = [
|
||||
'id' => $count,
|
||||
'content' => $buffer
|
||||
];
|
||||
}
|
||||
}
|
||||
//关闭文件
|
||||
fclose($fp);
|
||||
unset($fp);
|
||||
|
||||
return ['total' => $count, 'list' => $strings];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $filename
|
||||
* @param $start
|
||||
* @param $lines
|
||||
* @return array
|
||||
*/
|
||||
public static function read_backward_line($filename, $start, $lines): array
|
||||
{
|
||||
$lines++;
|
||||
$offset = -1;
|
||||
$read = '';
|
||||
$fp = @fopen($filename, "r");
|
||||
|
||||
$tmpStart = 0;
|
||||
while ($lines && fseek($fp, $offset, SEEK_END) >= 0) {
|
||||
|
||||
$c = fgetc($fp);
|
||||
if ($c == "\n" || $c == "\r") {
|
||||
if (++$tmpStart >= $start)
|
||||
$lines--;
|
||||
}
|
||||
|
||||
|
||||
if ($tmpStart >= $start)
|
||||
$read .= $c;
|
||||
$offset--;
|
||||
}
|
||||
|
||||
$read = trim($read);
|
||||
|
||||
$contents = [];
|
||||
$read = array_reverse(explode("\n", strrev($read)));
|
||||
foreach ($read as $key => $value) {
|
||||
if (empty($value)) {
|
||||
unset($read[$key]);
|
||||
} else {
|
||||
$contents[] = ['content' => $value, 'id' => $key + $start];
|
||||
}
|
||||
}
|
||||
|
||||
$response['total'] = self::read_count_by_file($filename);
|
||||
$response['list'] = $contents;
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $filepath
|
||||
* @return int
|
||||
*/
|
||||
private static function read_count_by_file($filepath): int
|
||||
{
|
||||
$count = 0;
|
||||
//只读方式打开文件
|
||||
$fp = fopen($filepath, "r");
|
||||
|
||||
//开始循环读取$buffer_size
|
||||
while (fgets($fp)) {
|
||||
$count++;
|
||||
}
|
||||
//关闭文件
|
||||
fclose($fp);
|
||||
unset($fp);
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $filepath
|
||||
* @param int $page
|
||||
* @param int $size
|
||||
* @return array
|
||||
*/
|
||||
public static function folderPagination($filepath, int $page = 1, int $size = 20): array
|
||||
{
|
||||
$count = 0;
|
||||
$strings = [];
|
||||
$offset = ($page - 1) * $size;
|
||||
|
||||
if (!is_dir($filepath)) {
|
||||
return [0, []];
|
||||
}
|
||||
|
||||
foreach (glob($filepath . '/*') as $key => $value) {
|
||||
$count++;
|
||||
if ($key < $offset || count($strings) >= $size) {
|
||||
continue;
|
||||
}
|
||||
$explode = explode(DIRECTORY_SEPARATOR, $value);
|
||||
|
||||
$addTime = fileatime($value);
|
||||
$changeTime = filectime($value);
|
||||
$modifyTime = filemtime($value);
|
||||
$strings[] = [
|
||||
'id' => $count,
|
||||
'path' => $value,
|
||||
'isDir' => (int)is_dir($value),
|
||||
'name' => end($explode),
|
||||
'atime' => [
|
||||
'format' => date('Y-m-d H:i:s', $addTime),
|
||||
'microtime' => $addTime
|
||||
],
|
||||
'ctime' => [
|
||||
'format' => date('Y-m-d H:i:s', $changeTime),
|
||||
'microtime' => $changeTime
|
||||
],
|
||||
'mtime' => [
|
||||
'format' => date('Y-m-d H:i:s', $modifyTime),
|
||||
'microtime' => $modifyTime
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
array_multisort($strings, array_column($strings, 'isDir'), SORT_DESC);
|
||||
|
||||
return ['total' => $count, 'list' => $strings];
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
+283
-283
@@ -1,283 +1,283 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
use Exception;
|
||||
|
||||
|
||||
/**
|
||||
* Class Str
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class Str
|
||||
{
|
||||
|
||||
const STRING = 'abcdefghijklmnopqrstuvwxyz';
|
||||
|
||||
const NUMBER = '01234567890';
|
||||
|
||||
/**
|
||||
* @param int $length
|
||||
*
|
||||
* @return string
|
||||
* 获取随机字符串
|
||||
*/
|
||||
public static function rand(int $length = 20): string
|
||||
{
|
||||
$string = '';
|
||||
if ($length < 1) $length = 20;
|
||||
$default = self::STRING . strtoupper(self::STRING) . self::NUMBER;
|
||||
$default = str_split($default);
|
||||
for ($i = 0; $i < $length; $i++) {
|
||||
shuffle($default);
|
||||
$string .= $default[array_rand($default)];
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $length
|
||||
*
|
||||
* @return int|string 获取随机数字
|
||||
* 获取随机数字
|
||||
*/
|
||||
public static function random(int $length = 20): int|string
|
||||
{
|
||||
$number = '';
|
||||
$default = str_split(self::NUMBER);
|
||||
if ($length < 1) $length = 1;
|
||||
for ($i = 0; $i < $length; $i++) {
|
||||
shuffle($default);
|
||||
$number .= $default[array_rand($default)];
|
||||
}
|
||||
return $number;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $string
|
||||
* @param $sullen
|
||||
* @param bool $strip_tags
|
||||
* @param string $append
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function cut_str_utf8($string, $sullen, bool $strip_tags = TRUE, string $append = '...'): string
|
||||
{
|
||||
if ($strip_tags) {
|
||||
$string = strip_tags($string);
|
||||
}//去掉签标
|
||||
$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
|
||||
preg_match_all($pa, $string, $t_string);
|
||||
$str = "";
|
||||
for ($i = 0; $i < count($t_string[0]); $i++) {
|
||||
$str .= $t_string[0][$i];
|
||||
//转为gbk,一个汉字长度为2
|
||||
if (strlen(@iconv('utf-8', 'gbk', $str)) >= $sullen) {
|
||||
if ($i != count($t_string[0]) - 1) $str .= $append;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $str;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
*
|
||||
* @param null $callback
|
||||
* @return bool
|
||||
* 判断是否为json字符串
|
||||
*/
|
||||
public static function isJson($data, $callback = NULL): bool
|
||||
{
|
||||
$json = !is_null(json_decode($data)) && !is_numeric($data);
|
||||
if ($json && is_callable($callback, TRUE)) {
|
||||
return call_user_func($callback, $data);
|
||||
}
|
||||
return $json;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
*
|
||||
* @param null $callBack
|
||||
* @return bool
|
||||
* 判断是否序列化字符串
|
||||
*/
|
||||
public static function isSerialize($data, $callBack = NULL): bool
|
||||
{
|
||||
$false = !empty($data) && swoole_unserialize($data) !== FALSE;
|
||||
if ($false && is_callable($callBack, TRUE)) {
|
||||
return call_user_func($callBack, $data);
|
||||
}
|
||||
return $false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $string
|
||||
* @param int $length
|
||||
*
|
||||
* @param string $append
|
||||
* @return string
|
||||
*/
|
||||
public static function cut($string, int $length = 20, string $append = '...'): string
|
||||
{
|
||||
if (empty($string)) {
|
||||
return '';
|
||||
}
|
||||
if ($length < 1) {
|
||||
$length = 1;
|
||||
}
|
||||
$array = str_split($string);
|
||||
if (count($array) <= $length) {
|
||||
return implode('', $array);
|
||||
}
|
||||
$string = implode('', array_slice($array, 0, $length));
|
||||
if (!empty($append)) {
|
||||
$string .= $append;
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $str
|
||||
* @param int $number
|
||||
* @param string $key
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function encrypt($str, int $number = 10, string $key = 'xshucai.com'): string
|
||||
{
|
||||
$res = [];
|
||||
$add = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
||||
$len = strlen($key) < 0 ? 1 : (strlen($key) + 5 > strlen($add) ? strlen($add) - 5 : strlen($key));
|
||||
if ($number < 1) $number = 10;
|
||||
$array = str_split($str);
|
||||
asort($array);
|
||||
$str = implode('', $array);
|
||||
for ($i = 0; $i < $number; $i++) {
|
||||
$_tmp = md5($key) . md5($str) . mb_substr($add, $len, $len + 5, 'utf-8');
|
||||
$res[] = md5($_tmp);
|
||||
}
|
||||
sort($res, SORT_STRING);
|
||||
return hash('sha384', implode('', $res));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $file
|
||||
* @param $type
|
||||
* @return string
|
||||
*/
|
||||
public static function filename($file, $type): string
|
||||
{
|
||||
switch ($type) {
|
||||
case 'image/png':
|
||||
return md5_file($file) . '.png';
|
||||
case 'image/jpeg':
|
||||
case 'image/jpg':
|
||||
return md5_file($file) . '.jpg';
|
||||
case 'image/gif':
|
||||
return md5_file($file) . '.gif';
|
||||
break;
|
||||
}
|
||||
return md5_file($file);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $endTime
|
||||
* @param int|null $startTime
|
||||
* @return array
|
||||
* 剩余天,带分秒
|
||||
*/
|
||||
public static function timeout($endTime, int $startTime = NULL): array
|
||||
{
|
||||
$endTime = $endTime - (!empty($startTime) ? $startTime : time());
|
||||
|
||||
$day = intval($endTime / (3600 * 24));
|
||||
|
||||
$hours = intval(($endTime - ($day * (3600 * 24))) / 3600);
|
||||
|
||||
$minute = intval(($endTime - ($day * (3600 * 24) + $hours * 3600)) / 60);
|
||||
|
||||
$scrod = intval(($endTime - ($day * (3600 * 24) + $hours * 3600 + $minute * 60)));
|
||||
|
||||
return [$day, $hours, $minute, $scrod];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return false|int
|
||||
*/
|
||||
public static function get_sy_time(): bool|int
|
||||
{
|
||||
$time = strtotime('+1days', strtotime(date('Y-m-d')));
|
||||
|
||||
return $time - time();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $string
|
||||
* @return string
|
||||
*/
|
||||
public static function encode(string $string): string
|
||||
{
|
||||
return addslashes($string);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $string
|
||||
* @return string|string[]|null
|
||||
* 清除标点符号
|
||||
*/
|
||||
public static function clear(string $string): array|string|null
|
||||
{
|
||||
$char = '。、!?:;﹑•"…‘’“”〝〞∕¦‖— 〈〉﹞﹝「」‹›〖〗】【»«』『〕〔》《﹐¸﹕︰﹔!¡?¿﹖﹌﹏﹋'´ˊˋ―﹫︳︴¯_ ̄﹢﹦﹤‐˜﹟﹩﹠﹪﹡﹨﹍﹉﹎﹊ˇ︵︶︷︸︹︿﹀︺︽︾ˉ﹁﹂﹃﹄︻︼()';
|
||||
return preg_replace(["/[[:punct:]]/i", '/[' . $char . ']/u', '/[ ]{2,}/'], '', $string);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param int $user
|
||||
* @param array $param
|
||||
* @param null $requestTime
|
||||
*
|
||||
* @return string
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function token(int $user, array $param = [], $requestTime = NULL): string
|
||||
{
|
||||
$str = '';
|
||||
if (!$requestTime) {
|
||||
$requestTime = microtime(TRUE);
|
||||
}
|
||||
$_user = str_split(md5($user . md5((string)$user)));
|
||||
ksort($_user);
|
||||
foreach ($_user as $key => $val) {
|
||||
$str .= md5(sha1($key . $val . 'www.xshucai.com'));
|
||||
}
|
||||
if (is_array($param)) {
|
||||
foreach ($param as $key => $val) {
|
||||
$str .= md5($str . sha1($key . md5($val)));
|
||||
}
|
||||
}
|
||||
$str .= sha1(base64_encode((string)$requestTime));
|
||||
|
||||
$md5 = md5($str . $user);
|
||||
|
||||
return preg_replace('/(\w{10})(\w{3})(\w{4})(\w{9})(\w{6})/', '$1-$2-$3-$4-$5', $md5);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $str
|
||||
* @param bool $unfairest
|
||||
* @return string
|
||||
*/
|
||||
public static function convertUnderline(string $str, bool $unfairest = TRUE): string
|
||||
{
|
||||
$str = ucwords(str_replace('_', ' ', $str));
|
||||
$str = str_replace(' ', '', lcfirst($str));
|
||||
return $unfairest ? ucfirst($str) : $str;
|
||||
}
|
||||
}
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
|
||||
use Exception;
|
||||
|
||||
|
||||
/**
|
||||
* Class Str
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class Str
|
||||
{
|
||||
|
||||
const STRING = 'abcdefghijklmnopqrstuvwxyz';
|
||||
|
||||
const NUMBER = '01234567890';
|
||||
|
||||
/**
|
||||
* @param int $length
|
||||
*
|
||||
* @return string
|
||||
* 获取随机字符串
|
||||
*/
|
||||
public static function rand(int $length = 20): string
|
||||
{
|
||||
$string = '';
|
||||
if ($length < 1) $length = 20;
|
||||
$default = self::STRING . strtoupper(self::STRING) . self::NUMBER;
|
||||
$default = str_split($default);
|
||||
for ($i = 0; $i < $length; $i++) {
|
||||
shuffle($default);
|
||||
$string .= $default[array_rand($default)];
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $length
|
||||
*
|
||||
* @return int|string 获取随机数字
|
||||
* 获取随机数字
|
||||
*/
|
||||
public static function random(int $length = 20): int|string
|
||||
{
|
||||
$number = '';
|
||||
$default = str_split(self::NUMBER);
|
||||
if ($length < 1) $length = 1;
|
||||
for ($i = 0; $i < $length; $i++) {
|
||||
shuffle($default);
|
||||
$number .= $default[array_rand($default)];
|
||||
}
|
||||
return $number;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $string
|
||||
* @param $sullen
|
||||
* @param bool $strip_tags
|
||||
* @param string $append
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function cut_str_utf8($string, $sullen, bool $strip_tags = TRUE, string $append = '...'): string
|
||||
{
|
||||
if ($strip_tags) {
|
||||
$string = strip_tags($string);
|
||||
}//去掉签标
|
||||
$pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
|
||||
preg_match_all($pa, $string, $t_string);
|
||||
$str = "";
|
||||
for ($i = 0; $i < count($t_string[0]); $i++) {
|
||||
$str .= $t_string[0][$i];
|
||||
//转为gbk,一个汉字长度为2
|
||||
if (strlen(@iconv('utf-8', 'gbk', $str)) >= $sullen) {
|
||||
if ($i != count($t_string[0]) - 1) $str .= $append;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return $str;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
*
|
||||
* @param null $callback
|
||||
* @return bool
|
||||
* 判断是否为json字符串
|
||||
*/
|
||||
public static function isJson($data, $callback = NULL): bool
|
||||
{
|
||||
$json = !is_null(json_decode($data)) && !is_numeric($data);
|
||||
if ($json && is_callable($callback, TRUE)) {
|
||||
return call_user_func($callback, $data);
|
||||
}
|
||||
return $json;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
*
|
||||
* @param null $callBack
|
||||
* @return bool
|
||||
* 判断是否序列化字符串
|
||||
*/
|
||||
public static function isSerialize($data, $callBack = NULL): bool
|
||||
{
|
||||
$false = !empty($data) && swoole_unserialize($data) !== FALSE;
|
||||
if ($false && is_callable($callBack, TRUE)) {
|
||||
return call_user_func($callBack, $data);
|
||||
}
|
||||
return $false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $string
|
||||
* @param int $length
|
||||
*
|
||||
* @param string $append
|
||||
* @return string
|
||||
*/
|
||||
public static function cut($string, int $length = 20, string $append = '...'): string
|
||||
{
|
||||
if (empty($string)) {
|
||||
return '';
|
||||
}
|
||||
if ($length < 1) {
|
||||
$length = 1;
|
||||
}
|
||||
$array = str_split($string);
|
||||
if (count($array) <= $length) {
|
||||
return implode('', $array);
|
||||
}
|
||||
$string = implode('', array_slice($array, 0, $length));
|
||||
if (!empty($append)) {
|
||||
$string .= $append;
|
||||
}
|
||||
return $string;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $str
|
||||
* @param int $number
|
||||
* @param string $key
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public static function encrypt($str, int $number = 10, string $key = 'xshucai.com'): string
|
||||
{
|
||||
$res = [];
|
||||
$add = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
|
||||
$len = strlen($key) < 0 ? 1 : (strlen($key) + 5 > strlen($add) ? strlen($add) - 5 : strlen($key));
|
||||
if ($number < 1) $number = 10;
|
||||
$array = str_split($str);
|
||||
asort($array);
|
||||
$str = implode('', $array);
|
||||
for ($i = 0; $i < $number; $i++) {
|
||||
$_tmp = md5($key) . md5($str) . mb_substr($add, $len, $len + 5, 'utf-8');
|
||||
$res[] = md5($_tmp);
|
||||
}
|
||||
sort($res, SORT_STRING);
|
||||
return hash('sha384', implode('', $res));
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $file
|
||||
* @param $type
|
||||
* @return string
|
||||
*/
|
||||
public static function filename($file, $type): string
|
||||
{
|
||||
switch ($type) {
|
||||
case 'image/png':
|
||||
return md5_file($file) . '.png';
|
||||
case 'image/jpeg':
|
||||
case 'image/jpg':
|
||||
return md5_file($file) . '.jpg';
|
||||
case 'image/gif':
|
||||
return md5_file($file) . '.gif';
|
||||
break;
|
||||
}
|
||||
return md5_file($file);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $endTime
|
||||
* @param int|null $startTime
|
||||
* @return array
|
||||
* 剩余天,带分秒
|
||||
*/
|
||||
public static function timeout($endTime, int $startTime = NULL): array
|
||||
{
|
||||
$endTime = $endTime - (!empty($startTime) ? $startTime : time());
|
||||
|
||||
$day = intval($endTime / (3600 * 24));
|
||||
|
||||
$hours = intval(($endTime - ($day * (3600 * 24))) / 3600);
|
||||
|
||||
$minute = intval(($endTime - ($day * (3600 * 24) + $hours * 3600)) / 60);
|
||||
|
||||
$scrod = intval(($endTime - ($day * (3600 * 24) + $hours * 3600 + $minute * 60)));
|
||||
|
||||
return [$day, $hours, $minute, $scrod];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return false|int
|
||||
*/
|
||||
public static function get_sy_time(): bool|int
|
||||
{
|
||||
$time = strtotime('+1days', strtotime(date('Y-m-d')));
|
||||
|
||||
return $time - time();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $string
|
||||
* @return string
|
||||
*/
|
||||
public static function encode(string $string): string
|
||||
{
|
||||
return addslashes($string);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $string
|
||||
* @return string|string[]|null
|
||||
* 清除标点符号
|
||||
*/
|
||||
public static function clear(string $string): array|string|null
|
||||
{
|
||||
$char = '。、!?:;﹑•"…‘’“”〝〞∕¦‖— 〈〉﹞﹝「」‹›〖〗】【»«』『〕〔》《﹐¸﹕︰﹔!¡?¿﹖﹌﹏﹋'´ˊˋ―﹫︳︴¯_ ̄﹢﹦﹤‐˜﹟﹩﹠﹪﹡﹨﹍﹉﹎﹊ˇ︵︶︷︸︹︿﹀︺︽︾ˉ﹁﹂﹃﹄︻︼()';
|
||||
return preg_replace(["/[[:punct:]]/i", '/[' . $char . ']/u', '/[ ]{2,}/'], '', $string);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param int $user
|
||||
* @param array $param
|
||||
* @param null $requestTime
|
||||
*
|
||||
* @return string
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function token(int $user, array $param = [], $requestTime = NULL): string
|
||||
{
|
||||
$str = '';
|
||||
if (!$requestTime) {
|
||||
$requestTime = microtime(TRUE);
|
||||
}
|
||||
$_user = str_split(md5($user . md5((string)$user)));
|
||||
ksort($_user);
|
||||
foreach ($_user as $key => $val) {
|
||||
$str .= md5(sha1($key . $val . 'www.xshucai.com'));
|
||||
}
|
||||
if (is_array($param)) {
|
||||
foreach ($param as $key => $val) {
|
||||
$str .= md5($str . sha1($key . md5($val)));
|
||||
}
|
||||
}
|
||||
$str .= sha1(base64_encode((string)$requestTime));
|
||||
|
||||
$md5 = md5($str . $user);
|
||||
|
||||
return preg_replace('/(\w{10})(\w{3})(\w{4})(\w{9})(\w{6})/', '$1-$2-$3-$4-$5', $md5);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param string $str
|
||||
* @param bool $unfairest
|
||||
* @return string
|
||||
*/
|
||||
public static function convertUnderline(string $str, bool $unfairest = TRUE): string
|
||||
{
|
||||
$str = ucwords(str_replace('_', ' ', $str));
|
||||
$str = str_replace(' ', '', lcfirst($str));
|
||||
return $unfairest ? ucfirst($str) : $str;
|
||||
}
|
||||
}
|
||||
|
||||
+57
-57
@@ -1,57 +1,57 @@
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: admin
|
||||
* Date: 2019-03-20
|
||||
* Time: 01:03
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Class Xml
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class Xml
|
||||
{
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @param bool $asArray
|
||||
* @return array|object
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function toArray($data, bool $asArray = true): object|array
|
||||
{
|
||||
$data = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
|
||||
if ($data === false) {
|
||||
throw new Exception('Parameter format error.');
|
||||
}
|
||||
$array = get_object_vars($data);
|
||||
if (isset($array[0])) {
|
||||
$array[$data->getName()] = $array[0];
|
||||
unset($array[0]);
|
||||
}
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $str
|
||||
* @return array|bool|object
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function isXml($str): object|bool|array
|
||||
{
|
||||
$xml_parser = xml_parser_create();
|
||||
if (!xml_parse($xml_parser, $str, true)) {
|
||||
xml_parser_free($xml_parser);
|
||||
return false;
|
||||
} else {
|
||||
return self::toArray($str);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
<?php
|
||||
/**
|
||||
* Created by PhpStorm.
|
||||
* User: admin
|
||||
* Date: 2019-03-20
|
||||
* Time: 01:03
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Kiri\Core;
|
||||
|
||||
use Exception;
|
||||
|
||||
/**
|
||||
* Class Xml
|
||||
* @package Kiri\Kiri\Core
|
||||
*/
|
||||
class Xml
|
||||
{
|
||||
|
||||
/**
|
||||
* @param $data
|
||||
* @param bool $asArray
|
||||
* @return array|object
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function toArray($data, bool $asArray = true): object|array
|
||||
{
|
||||
$data = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);
|
||||
if ($data === false) {
|
||||
throw new Exception('Parameter format error.');
|
||||
}
|
||||
$array = get_object_vars($data);
|
||||
if (isset($array[0])) {
|
||||
$array[$data->getName()] = $array[0];
|
||||
unset($array[0]);
|
||||
}
|
||||
return $array;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $str
|
||||
* @return array|bool|object
|
||||
* @throws Exception
|
||||
*/
|
||||
public static function isXml($str): object|bool|array
|
||||
{
|
||||
$xml_parser = xml_parser_create();
|
||||
if (!xml_parse($xml_parser, $str, true)) {
|
||||
xml_parser_free($xml_parser);
|
||||
return false;
|
||||
} else {
|
||||
return self::toArray($str);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user