157 lines
7.7 KiB
PHP
157 lines
7.7 KiB
PHP
<?php
|
||
/* =================================================================================
|
||
* License: GPL-2.0 license
|
||
* Author: 众产® https://ciy.cn/code
|
||
* Version: 0.7.8
|
||
====================================================================================*/
|
||
/*
|
||
* common.php 常用公共函数库
|
||
*
|
||
* 功能函数相关
|
||
* pr/var_dump PHP调试变量界面打印
|
||
* fixmonth/todate 日期月份增减函数/数字时间转字符串
|
||
* locinzone 当前经纬度是否在围栏中
|
||
* timems 获取当前微秒数
|
||
* ismobile 判断手机号是否合法
|
||
* isweixin 判断客户端是否在微信中
|
||
* idcard 判断身份证号合法
|
||
* iduscc 判断统一社会信用代码合法
|
||
* locdistance 计算两经纬度之间的距离(毫米METRE)
|
||
*
|
||
* 加解密相关
|
||
* encrypt 字符串加解密
|
||
* enid/deid ID数字加解密
|
||
* conv33_10/conv10_33 数字转33进制
|
||
*
|
||
* 字符串/数组相关
|
||
* arrayrand 随机抽取数组元素并删除
|
||
* startwith/endwith 首字符/尾字符匹配
|
||
* strpos_first 字符数组优先匹配,一般匹配 ' "
|
||
* gb_substr/gb_strlen/gb_haschinese 中文字符串处理函数
|
||
* getstrparam/setstrparam 比json还简化的数据保存方式,一般用于数据字典保存。例: name=AAA|age=12|cc=CCTT
|
||
*
|
||
* 数据库相关
|
||
* fieldadd 手动增加列表显示字段,并返回排序字段字符串
|
||
* getrelation 获取表内关联数据,用于大数据量表的所属ID转文字
|
||
* tran_delcheck/tran_delall/me 事务删除前确认/删除相关数据
|
||
*
|
||
* 字典相关
|
||
* id2map 将 id/name代码数组对 转换为 键值对
|
||
* ccode 代码数组中,通过代码值找代码名
|
||
* mcode 代码数组中,通过代码值找代码名,多级
|
||
* scode 代码数组中,查找多个代码值,返回数组
|
||
* dcode 代码数组中,通过代码名找代码值
|
||
*
|
||
* LOG相关
|
||
* savelogfile 保存log信息写入到本地文件
|
||
* logdbstr 将数据变化格式化成字符串
|
||
*
|
||
* 输入输出相关
|
||
* \ciy\post{} payload json参数处理类 is/get/getint/getfloat/getdate/getbool/getraw/safehtml
|
||
* getstr/getint/post/request/cookie 获取用户输入数据(不能信任任何用户输入,包括cookie)
|
||
* getip IP的快捷函数,支持数字和字符串返回
|
||
*
|
||
* 文件相关
|
||
* dirmake/filedel/copy/save/load 创建多层新文件夹/文件静默删除/拷贝/保存/读取
|
||
* file_down URL文件下载保存
|
||
* fileext 获取文件扩展名,如jpg
|
||
*/
|
||
|
||
namespace ciy;
|
||
|
||
class post {
|
||
public $post;
|
||
function __construct($initp = null) {
|
||
if ($initp == null)
|
||
$this->post = json_decode(file_get_contents('php://input'), true);
|
||
else
|
||
$this->post = $initp;
|
||
|
||
if ($this->post === null)
|
||
$this->post = $_POST;
|
||
}
|
||
function is($key) {
|
||
return isset($this->post[$key]);
|
||
}
|
||
function getraw($key, $defvalue = null) {
|
||
if (!isset($this->post[$key]))
|
||
return $defvalue;
|
||
if ($this->post[$key] === '')
|
||
return $defvalue;
|
||
return $this->post[$key];
|
||
}
|
||
function get($key, $defvalue = '', $allow = 'text') { //text:仅文本,html:不能有script,all:不限
|
||
$str = $this->getraw($key, $defvalue);
|
||
if (is_array($str))
|
||
return $str;
|
||
if ($allow == 'text') {
|
||
$str = strip_tags($str . '');
|
||
} else if ($allow == 'html') {
|
||
$str = $this->safehtml($str);
|
||
}
|
||
return $str;
|
||
}
|
||
function safehtml($val) {
|
||
$val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);
|
||
$search = 'abcdefghijklmnopqrstuvwxyz';
|
||
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||
$search .= '1234567890!@#$%^&*()';
|
||
$search .= '~`";:?+/={}[]-_|\'\\';
|
||
for ($i = 0; $i < strlen($search); $i++) {
|
||
$val = preg_replace('/(&#[xX]0{0,8}' . dechex(ord($search[$i])) . ';?)/i', $search[$i], $val);
|
||
$val = preg_replace('/(�{0,8}' . ord($search[$i]) . ';?)/', $search[$i], $val);
|
||
}
|
||
$ra1 = array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
|
||
$ra2 = array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
|
||
$ra = array_merge($ra1, $ra2);
|
||
$found = true;
|
||
while ($found == true) {
|
||
$val_before = $val;
|
||
for ($i = 0; $i < sizeof($ra); $i++) {
|
||
$pattern = '/';
|
||
for ($j = 0; $j < strlen($ra[$i]); $j++) {
|
||
if ($j > 0) {
|
||
$pattern .= '(';
|
||
$pattern .= '(&#[xX]0{0,8}([9ab]);)';
|
||
$pattern .= '|';
|
||
$pattern .= '|(�{0,8}([9|10|13]);)';
|
||
$pattern .= ')*';
|
||
}
|
||
$pattern .= $ra[$i][$j];
|
||
}
|
||
$pattern .= '/i';
|
||
$replacement = substr($ra[$i], 0, 2) . '|!|' . substr($ra[$i], 2);
|
||
$val = preg_replace($pattern, $replacement, $val);
|
||
if ($val_before == $val) {
|
||
$found = false;
|
||
}
|
||
}
|
||
}
|
||
return $val;
|
||
}
|
||
function getint($key, $defvalue = 0) {
|
||
return toint($this->getraw($key, $defvalue));
|
||
}
|
||
function getfloat($key, $defvalue = 0) {
|
||
return (float)$this->getraw($key, $defvalue);
|
||
}
|
||
function getdate($key, $defvalue = 0) {
|
||
$data = $this->getraw($key, $defvalue);
|
||
if (strpos($data, '-') === false)
|
||
$data = toint($data);
|
||
else
|
||
$data = strtotime($data);
|
||
if ($data === false)
|
||
return $defvalue;
|
||
return $data;
|
||
}
|
||
function getbool($key, $defvalue = false) {
|
||
$data = $this->getraw($key, $defvalue);
|
||
if (!$data || empty($data) || $data === 'false')
|
||
return false;
|
||
if ($data === true || $data === 'true' || $data === '1' || $data === 1)
|
||
return true;
|
||
return false;
|
||
}
|
||
}
|