/**
* 格式化时间为 Y-m-d H:i:s
* @param string $timestamp
* @return false|string
*/
function datetime($timestamp='')
{
if ($timestamp == '') {
$timestamp = time();
}
return date('Y-m-d H:i:s', $timestamp);
}
/**是否为手机号码
@param $mobile 手机号码
@return boolean
***************************************************/
function is_mobile($mobile) {
// todo 根据最新前三位号段,更精准区分是否手机号
return preg_match("/^1[3-9][0-9]{9}$/", trim($mobile));
}
/***************************************************/
/**
* 写日志到表
*/
function doLog($msg, $type='默认'){
if (is_array($msg)) {
$msg = arraytostr($msg);
}
// todo 改成写入文件。数组也可以写;多个结果如何打印?
\think\Log::record('type:'.$type.'=>'.$msg, 'zgw_normal_log');
// zgw_debug.log 手动建立,需要可写权限
// file_put_contents('zgw_debug.log', $data, FILE_APPEND);
}
// 数组转合适的字符串输入
function arraytostr($data)
{
$str = '';
if (is_array($data)) {
$str .= '[';
foreach ($data as $key => $value) {
if (is_array($value)) {
$str .= $key .' => '.arraytostr($value).',';
} else {
$str .= $key .' => '.$value.',';
}
}
$str = rtrim($str, ',');
$str .= ']';
} else {
$str = (string) $data;
}
return $str;
}
/***************************************************/
/**
* 替换手机号码中间四位数字
* @param [type] $str [description]
* @return [type] [description]
*/
function hide_phone($str){
$resstr = substr_replace($str,'****',3,4);
return $resstr;
}
/**
* [is_weixin 是否微信访问]
* @return boolean
*/
function is_weixin() {
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false) {
return true;
} else {
return false;
}
}
/**
* 获取周期的开始跟结束
* todo 待完善条件,比如本周:从周一开始到今天,还是到下周一0点?
* 比如,倒数七天?倒数30天?
* 再比如,本日、本周、本月?
*
* @Author 李盛滔
* @DateTime 2019-11-29T17:38:33+0800
* @param [type] $date [description]
* @return [type] [description]
*/
function get_week($date)
{
//当前日期
$sdefaultDate = $date;
//$first =1 表示每周星期一为开始日期 0表示每周日为开始日期
$first = 1;
//获取当前周的第几天 周日是 0 周一到周六是 1 - 6
$w = date('w',strtotime($sdefaultDate));
//获取本周开始日期,如果$w是0,则表示周日,减去 6 天
$week_start = date('Y-m-d',strtotime("$sdefaultDate -".($w ? $w - $first : 6).' days'));
//本周结束日期
$week_end = date('Y-m-d',strtotime("$week_start +6 days"));
return [$week_start,$week_end];
}
/**
* [format_time 个性化显示时间]
* @param [type] $date 日期:2022-10-12 12:12:12
* @return [type] [description]
*/
function format_time($date)
{
$nowTime = time();
$showTime = strtotime($date);
$dur = $nowTime - $showTime;
if($dur < 60 ){
return '刚刚';
}elseif($dur < 3600){
return floor($dur/60).'分钟前';
}elseif($dur < 86400){
return floor($dur/3600).'小时前';
}elseif($dur < 259200){
return floor($dur / 86400) . '天前';
}elseif(date('Y') == date('Y',$showTime)){
return date('m-d H:i',$showTime);
}else{
return $date;
}
}
/**
* filter_sensitive_word 过滤敏感词
* @param string $content 内容
* @return string 过滤后结果
*/
function filter_sensitive_word($content)
{
$replace = \think\Cache::store('redis')->get('sensitiveWords');
if(!$replace){
$list = M('SensitiveWords')->select();
$replace = array();
foreach ($list as $value) {
$replace[$value['word']] = $value['replace'];
}
\think\Cache::store('redis')->set('sensitiveWords',$replace);
}
$content = strtr($content, $replace);
return $content;
}
/**
* 获取域名, 不包含https or http
* @return string
*/
function get_domain()
{
// 得到协议在内的完整域名,如https://news.www.baidu.com
$domain = request()->domain();
if (strpos($domain, 'https://') > -1 || strpos($domain, 'http://') > -1) {
$arr1 = explode('//', $domain);
$domain = $arr1[1];
}
return $domain;
}
/**
* 获取二级域名
* @return string
*/
function get_sub_domain()
{
$domain = get_domain();
$arr2 = explode('.', $domain);
unset($arr2[count($arr2) - 1]);
unset($arr2[count($arr2) - 1]);
$sub_domain = implode('.', $arr2);
return $sub_domain;
}
/***************************************/
//去掉数组里面的null
function null_filter($arr)
{
foreach($arr as $key=>&$val) {
if(is_array($val)) {
$val = null_filter($val);
} else {
if($val === null){
$arr[$key]='';
}
}
}
return $arr;
}
// 返回json
function backJson($info){
echo json_encode(null_filter($info));
exit;
}
// 快捷返回 ,增加msg兼容以前的E方法抛出异常(E不合理,要全面调整)
function fastBackJson($code, $message, $data = false)
{
$res = array('code' => $code, 'message' => $message, 'msg' => $message);
if ($data !== false) {
$res['data'] = $data;
}
backJson($res);
}
// 非法访问
function illegal(){
echo json_encode(array('code' => 0, 'message' => '非法访问', 'msg' => '非法访问'));die;
}
// 其他错误
function show_false($msg='错误', $code = 0){
echo json_encode(array('code' => $code, 'message' => $msg, 'msg' => $msg));die;
}
/***************************************/
/**
* 是否本地环境,用于判断不执行微信相关需要走非本地的情况
*/
function is_local()
{
$host_name = explode(':', $_SERVER['HTTP_HOST'])[0];
// happymatch.cn 使用不同的域名前缀,作为不同的公众号区分。这里非这个域名的就算是本地的
if (preg_match('/(.*).happymatch.cn/', $host_name)) {
return false;
} else {
return true;
}
}
/**
* 加密函数,用于id、电话双向传输时,不被修改
* @param $txt 要加密的内容
* @param string $key 秘钥
* @return string
*/
function lock_url($txt,$key='r4r4')
{
$txt = $txt.$key;
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
$nh = rand(0,64);
$ch = $chars[$nh];
$mdKey = md5($key.$ch);
$mdKey = substr($mdKey,$nh%8, $nh%8+7);
$txt = base64_encode($txt);
$tmp = '';
$i=0;$j=0;$k = 0;
for ($i=0; $i<strlen($txt); $i++) {
$k = $k == strlen($mdKey) ? 0 : $k;
$j = ($nh+strpos($chars,$txt[$i])+ord($mdKey[$k++]))%64;
$tmp .= $chars[$j];
}
return urlencode(base64_encode($ch.$tmp));
}
/**
* 解密函数,用于id、电话双向传输时,不被修改
* @param $txt 要解密的内容
* @param string $key 秘钥
* @return string
*/
function unlock_url($txt,$key='r4r4')
{
$txt = base64_decode(urldecode($txt));
$chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-=+";
$ch = $txt[0];
$nh = strpos($chars,$ch);
$mdKey = md5($key.$ch);
$mdKey = substr($mdKey,$nh%8, $nh%8+7);
$txt = substr($txt,1);
$tmp = '';
$i=0;$j=0; $k = 0;
for ($i=0; $i<strlen($txt); $i++) {
$k = $k == strlen($mdKey) ? 0 : $k;
$j = strpos($chars,$txt[$i])-$nh - ord($mdKey[$k++]);
while ($j<0) $j+=64;
$tmp .= $chars[$j];
}
return trim(base64_decode($tmp),$key);
}
/**
* 过滤微信emoji字符
* @param $nickname
* @return string
*/
function filterNickname($nickname){
$nickname = preg_replace('/[\x{1F600}-\x{1F64F}]/u', '', $nickname);
$nickname = preg_replace('/[\x{1F300}-\x{1F5FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{1F680}-\x{1F6FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{2600}-\x{26FF}]/u', '', $nickname);
$nickname = preg_replace('/[\x{2700}-\x{27BF}]/u', '', $nickname);
$nickname = preg_replace('/[\xf0-\xf7].{3}/', '', $nickname);
$nickname = str_replace(array('"','\''), '', $nickname);
return trim($nickname);
}
个人常用php函数
于 2022-11-01 23:49:18 首次发布