c5_labsci/zciyphp/post.php
2026-01-27 00:52:00 +08:00

157 lines
7.7 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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:不能有scriptall:不限
$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{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{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;
}
}