人生若只如初见 - 领酷博客 - 技术文档 https://blog.ilingku.com/category/default/ 数据库SQL【插入、修改、删除语句】基本语法 https://blog.ilingku.com/archives/61/ 2026-05-23T17:03:05+08:00 #——————————【插入数据】———— ## 1.INSERT INTO movie​​指定要向movie表中插入数据,加上(指定要插入数据的列) insert into movie(id,title,director,release_date,length_minutes) values (23,'活着','张艺谋','1994-05-18',125),(24,'活着','张艺谋','1994-05-18',125) #——————————【修改数据】———— ## 1.修改对应数据:【UPDATE movie​​】指定要更新 movie 表中的数据 如果没有【WHERE】条件,会更新表中所有记录 update movie set length_minutes = 50,director='姜文' where title = '无人区' ## 2.修改对应数据:只更新ID值在1到5之间(包含1和5)的记录【BETWEEN】是范围运算符 update movie set length_minutes = 50,director='姜文' where id between 1 and 5 #——————————【删除行数据】———— ## 1.删除一整行数据,对应条件 delete from movie where title = '无人区' #——————————【删除列数据】———— ## 1.删除一整列数据,对应条件director列,可以删除多个列,套用【drop column】 alter table movie drop column director,drop column length_minutes #——————————【删除所有数据】———— ## 1.删除movie表的所有内容 delete from movie ## 2.删除movie的表 drop table movie 数据库SQL【查询语句】基本语法 https://blog.ilingku.com/archives/60/ 2026-05-23T17:02:11+08:00 ## 1.##movir中提取title和director列的表 select title,director from movie ## 2.movir中提取使用*所有列的表 select * from movie ## 3.提前director列数据,通过【distinct】语句取掉重复内容,根据director去重的数据,后面的release_date根据前面去重的数据一致 select distinct director,release_date from movie ## 4.使用【order by】语法对列表排序,默认为升序,尾部加个【desc】可以改变为降序 select * from movie order by release_date ## 5.前面加个【director】以导演名一列为排序,后面release_date以时间通过【desc】来降序 select * from movie order by director,release_date desc ## 6.使用【limit】语法输出列表的前5条 select * from movie limit 5 ## 6.使用【limit】语法前面加个3,将从第4行开始输出列表5条数据 select * from movie limit 3,5 ## 7.【where director=】 语法筛选出对应内容的数据 select * from movie where director='宁浩' ## 8.筛选出来的内容使用【and】与语句 时间列 >110分钟的数据 select * from movie where director='宁浩' and length_minutes > 110 ## 9.筛选出来的内容使用【or】或语句 筛出导演和时间 >110分钟的数据 select * from movie where director='宁浩' or length_minutes > 110 ## 10.筛选出来的内容使用【in】语句 筛出director列多个人的数据 select * from movie where director in('宁浩','姜文') ## 11.使用【between】语法,取length_minutes列下110到120区间的数据 select * from movie where length_minutes between 110 and 120 ## 12.筛选列中对应时间的列 select * from movie where release_date='2013-12-03' ## 13.【like】通配符筛选,筛选内容包含2013的字符,来达到赛选2013年份所有数据的功能 select * from movie where release_date like '2013%' ## 14.【like】通配符筛选,使用下划线_一个代表一个文字,这里可以赛选出3个字的导演名字 select * from movie where director like '___' ## 15.使用【year()】语法,提取日期中的年份,进行筛选 select * from movie where year(release_date)='2013' ## 15.使用【month()】语法,提取日期中的月年份,进行筛选 select * from movie where month(release_date)='12' 【音频大小计算】php根据音频文件的时长和音质计算音频的文件大小 (有误差) https://blog.ilingku.com/archives/59/ 2026-05-13T13:01:00+08:00 根据音质和时长计算音频文件大小,这种方法可能会存在误差,但本人测试有点误差也是在能接受的范围内。首先需要获取文件的 时长 和 音质 (如:64、128、320)php代码/** * 根据音质和时长计算音频文件大小 * * @param int $duration 时长(秒) * @param int $sampleRate 采样率(Hz),如 44100(仅 WAV/FLAC 需要) * @param int $bitDepth 位深(bit),如 16(仅 WAV/FLAC 需要) * @param int $channels 声道数,如 2(仅 WAV/FLAC 需要) * @param int $bitrate 比特率(kbps),如 128(仅 MP3/Ogg/M4A/AAC 需要) * @param string $type 音频类型:'wav', 'flac', 'mp3', 'ogg', 'm4a', 'aac' * @return float 返回文件大小(MB) */ function calculateAudioSize($duration, $sampleRate, $bitDepth, $channels, $bitrate, $type = 'mp3') { $bytes = 0; $type = strtolower($type); if ($type === 'wav') { $bytes = $sampleRate * $bitDepth * $channels * $duration / 8; } elseif ($type === 'flac') { $rawBytes = $sampleRate * $bitDepth * $channels * $duration / 8; $compressionRatio = 0.6; $bytes = $rawBytes * $compressionRatio; } elseif (in_array($type, ['mp3', 'ogg', 'm4a', 'aac'])) { $bytes = $bitrate * 1000 * $duration / 8; } return round($bytes / 1024 / 1024, 2); }调用示例$duration = 180; // 3分钟 (180秒) // 1. FLAC 文件:3分钟,CD音质 (44100Hz, 16bit, 2声道) $flacSize = calculateAudioSize($duration, 44100, 16, 2, 0, 'flac'); echo "FLAC 文件大小约为:{$flacSize} MB\n"; // 2. AAC / M4A / Ogg 文件:3分钟,高音质 (256kbps) $aacSize = calculateAudioSize($duration, 0, 0, 0, 256, 'aac'); echo "AAC/M4A/Ogg 文件大小约为:{$aacSize} MB\n"; 【音频时长计算】php根据音频文件的大小加音频音质计算音频的时长代码 暂时未发现误差 https://blog.ilingku.com/archives/58/ 2026-05-13T12:52:00+08:00 通过文件的大小、音频音质计算时长,这种方法可能会存在误差,但本人试用暂时还未发现。还比较精准的!有点误差也是在能接受的范围内。首先需要获取文件的 字节长度 和 音质 (如:6400、12800、32000)第一个(需要自己知道文件大小和音质)//计算音乐时长 function ilingku_duration($lksize,$lkquality='12800'){ //音乐文件大小+音乐音质=音乐时长 $recordtime = intval((($lksize-42)*0.8) / $lkquality); return date("i:s",$recordtime); }第二个(远程音乐文件转化字节长度)//计算音乐时长 function ilingku_duration($lkurl,$lkquality='12800'){ $header_array = get_headers($lkurl, true); $lksize = $header_array['Content-Length']; //音乐文件大小+音乐音质=音乐时长 $recordtime = intval((($lksize-42)*0.8) / $lkquality); return date("i:s",$recordtime); }使用方法echo ilingku_duration(‘http://cg.sycdn.kuwo.cn/2a2eb0bafa872aee7021f133162d0835/64dfc0f5/resource/n1/64/13/3119858049.mp3′,’12800’);返回结果04:17 QQ头像加密链接API及QQ昵称 https://blog.ilingku.com/archives/52/ 2026-05-02T13:58:00+08:00 QQ头像加密链接API,保护评论者的隐私,自想的思路加密逻辑,不依赖数据库,也不存储图片。测试可以在本文章发表一条评论,邮箱用正常的qq邮箱 例如10001@qq.com 发表后审查元素自行查看头像地址接口api地址http://blog.ilingku.com/api/qq/avatar/?qq=10001输出格式{ "code": 200, "msg": "success", "qq": "10001", "name": "pony", "email": "10001@qq.com", "avatar": "http://blog.ilingku.com/api/qq/avatar/profile/?k=tA33ZFgtKdvljnkhHetNe", "data": { "qq_avatar_40": "http://blog.ilingku.com/api/qq/avatar/profile/?k=tA33ZFgtKdvljnkhHetNe&s=40", "qq_avatar_100": "http://blog.ilingku.com/api/qq/avatar/profile/?k=tA33ZFgtKdvljnkhHetNe&s=100", "qq_avatar_140": "http://blog.ilingku.com/api/qq/avatar/profile/?k=tA33ZFgtKdvljnkhHetNe&s=140", "qq_avatar_640": "http://blog.ilingku.com/api/qq/avatar/profile/?k=tA33ZFgtKdvljnkhHetNe&s=640", "qq_avatar_1000": "http://blog.ilingku.com/api/qq/avatar/profile/?k=tA33ZFgtKdvljnkhHetNe&s=1000" } } 宝塔控制面板降级到任意版本得控制面板命令及教程 https://blog.ilingku.com/archives/45/ 2026-04-25T23:59:00+08:00 该说不说202604现在宝塔最新版 11.7.0的面板UI不好用 给人感觉好卡 所以我是真的用不习惯。找了好久历史版本,想装老版本,一直没找到。所以才想到减低版本的思路。宝塔面板正式版:11.7.0 了。如果遇到宝塔的最新版本有BUG,那么如何降级到低版本呢,这篇笔记就来简单说说。如何降级安装,这里列举从11.7.0版本降级到9.6.0,如果需要其他版本,自己更改版本号即可。脚本如下:cd /root mkdir bt cd bt # 这里以 9.6.0 版本为例,可以自行更改想降级的版本 wget https://download.bt.cn/install/update/LinuxPanel-9.6.0.zip unzip LinuxPanel-9.6.0.zip cd panel/ bash update.sh php代码实现随机图片(附 随机视频墙纸、随机电脑墙纸、随机手机墙纸API接口) https://blog.ilingku.com/archives/43/ 2026-04-15T01:55:00+08:00 一直看同一个背景会腻的。从网上搜索到不少的php随机图片代码,感觉都不合我心意,chatgpt也问了半天,没什么好的参考。最终,结合 远梦老哥 的php随机图片代码,弄出来这套识别设备输出不同文件夹图片,自适应设备图片。教程下载源码,根目录解压挑选合适的图片上传至images文件夹<img src="https://blog.ilingku.com/api/rand/img/gy">接口演示外链接口图片接口(默认自适应手机和pc)https://blog.ilingku.com/api/rand/img/gy图片接口(PC)https://blog.ilingku.com/api/rand/img/gy?act=pc图片接口(手机)https://blog.ilingku.com/api/rand/img/gy?act=mobile视频接口https://blog.ilingku.com/api/rand/img/gy?act=video源码下载{cloud title="夸克网盘" type="quark" url="https://pan.quark.cn/s/4f0582e2bf4c" password="sBuf"/}电脑图片 {cloud title="200张电脑墙纸" type="quark" url="https://pan.quark.cn/s/177987e037fe" password="pYEg"/}手机图片 {cloud title="88张手机墙纸" type="quark" url="https://pan.quark.cn/s/18c9c52babb0" password="YKc5"/} 微软远程桌面连接mstsc和手机端remote desktop软件,远程电脑桌面教程 https://blog.ilingku.com/archives/40/ 2026-04-15T00:14:55+08:00 背景:工作需求,需要通过metsc/RD远程,设定有固定ip的目标电脑或服务器,处理某些问题;分享相关方案 ;方案:1.个人电脑自带微软,远程桌面连接工具mstsc,远程目标电脑;2.手机或平板,下载remote desktop远程软件,远程目标电脑;注意:若目标电脑或者服务器,在公司内网上,则需要配合相应的VPN工具,实现网络互通,才能使用如上工具进行远程桌面;以上,为方案背景简要介绍;下面分享通过个人电脑,或手机/平板,远程目标电脑/服务器的具体实施步骤:一、目标电脑/服务器端设置:1.目标电脑/服务器,需要进设置--系统--远程桌面--打开被远程功能; 2.手机或平板,通过remote desktop软件,远程目标电脑;需要目标电脑打开启用,远程(RDP)连接要求使用指定的安全层。①win+R输入:gpedit.msc 调出本地组策略编辑器 ②路径为:本地组策略编辑器→计算机配置→管理模板→Windows 组件→远程桌面服务 →远程桌面会话主机→安全→远程(RDP)连接要求使用指定的安全层 ③启用远程(RDP)连接要求使用指定的安全层,配置安全层为SSL 二、个人电脑端设置:1.个人电脑端,搜索框--输入mstsc--找到远程桌面连接工具 --右击、打开文件位置--远程桌面连接右击、发送到桌面快捷方式(后续直接在桌面点击,就可以打开工具远程啦) 2、打开远程桌面连接工具:①输入目标电脑的ip--打开左下角“显示选项” ②--填写目标电脑--账号和密码--,并保存凭证(账号会被保存下来,再次登录需要重新输密码;也可以通过修改配置、保存,后续连接不需要输密码,各位朋友如有需要,下次再出一篇文章专门讲) ③点击连接时,会弹出提提示,勾选不再询问,确认忽略 3、正常情况下,通过个人电脑mstsc工具,远程目标电脑,此时已经成功了。三、手机/平板端设置:1.手机端,下载remote desktop 远程软件客户端; 2、点击右上角+号,添加电脑,输入相应的账户和密码; ip和密码为必填项,其他选项按需求勾选即可;另,手机远程软件,配合蓝牙鼠标使用有奇效,巨推荐!!省了背着大块头的电脑跑,随身装个蓝牙鼠标,完全也能满足同样的使用需求。3、正常情况下,通过手机/平板的remote desktop远程工具,远程目标电脑,此时已经成功了。 PHP将方形头像裁剪为圆形无锯齿的头像 https://blog.ilingku.com/archives/39/ 2026-04-14T16:54:23+08:00 先不管你的图片是多大,在处理的时候都以1000x1000的大小裁剪为圆形,然后再等比例缩放到300x300的大小,这样就得到了消除锯齿的圆形图片,前者越大,图片就越圆滑PHP代码<?php // 示例:输出圆形图片 header('Content-Type: image/png'); echo getimg("https://q.qlogo.cn/headimg_dl?dst_uin=778713968&spec=640", 300); // 制作圆形图片 function getimg($imageUrl, $size) { // 创建画布 $canvasSize = 1000; // 处理时的图片尺寸 $canvas = imagecreatetruecolor($canvasSize, $canvasSize); // 设置透明背景 imagealphablending($canvas, false); imagesavealpha($canvas, true); $transparentColor = imagecolorallocatealpha($canvas, 0, 0, 0, 127); imagefilledrectangle($canvas, 0, 0, $canvasSize, $canvasSize, $transparentColor); // 加载原始图片 $sourceImage = imagecreatefromjpeg($imageUrl); $sourceWidth = imagesx($sourceImage); $sourceHeight = imagesy($sourceImage); // 放大图片 $enlargedWidth = $sourceWidth * 1.5; $enlargedHeight = $sourceHeight * 1.5; $enlargedImage = imagecreatetruecolor($enlargedWidth, $enlargedHeight); imagecopyresampled($enlargedImage, $sourceImage, 0, 0, 0, 0, $enlargedWidth, $enlargedHeight, $sourceWidth, $sourceHeight); // 计算裁剪为圆形的半径 $radius = $canvasSize / 2; // 裁剪为圆形 for ($x = 0; $x < $canvasSize; $x++) { for ($y = 0; $y < $canvasSize; $y++) { $dx = $x - $radius; $dy = $y - $radius; $distance = sqrt($dx * $dx + $dy * $dy); if ($distance < $radius) { // 在圆内部 imagesetpixel($canvas, $x, $y, imagecolorat($enlargedImage, $enlargedWidth / $canvasSize * $x, $enlargedHeight / $canvasSize * $y)); } } } // 输出的图片尺寸 $end = imagecreatetruecolor($size, $size); imagesavealpha($end, true); $transparency = imagecolorallocatealpha($end, 0, 0, 0, 127); imagefill($end, 0, 0, $transparency); imagealphablending($end, false); imagesavealpha($end, true); imagecopyresampled($end, $canvas, 0, 0, 0, 0, $size, $size, $canvasSize, $canvasSize); imagepng($end); // 释放资源 imagedestroy($canvas); imagedestroy($sourceImage); imagedestroy($enlargedImage); imagedestroy($end); } JS代码实现鼠标点击爱心特效代码 https://blog.ilingku.com/archives/34/ 2026-04-12T10:34:00+08:00 JS代码实现鼠标点击爱心特效代码,鼠标点击会出现彩色的爱心动态效果,使用非常简单,需要在哪个页面显示就把代码放到哪个页面就行,建议最好放到网站全局代码里面,这样整个网站页面都可以进行使用啦。喜欢的朋友拿去使用吧效果代码<script> !function(e, t, a) { function r() { for (var e = 0; e < s.length; e++) s[e].alpha <= 0 ? (t.body.removeChild(s[e].el), s.splice(e, 1)) : (s[e].y--, s[e].scale += .004, s[e].alpha -= .013, s[e].el.style.cssText = "left:" + s[e].x + "px;top:" + s[e].y + "px;opacity:" + s[e].alpha + ";transform:scale(" + s[e].scale + "," + s[e].scale + ") rotate(45deg);background:" + s[e].color + ";z-index:99999"); requestAnimationFrame(r) } function n() { var t = "function" == typeof e.onclick && e.onclick; e.onclick = function(e) { t && t(), o(e) } } function o(e) { var a = t.createElement("div"); a.className = "heart", s.push({ el: a, x: e.clientX - 5, y: e.clientY - 5, scale: 1, alpha: 1, color: c() }), t.body.appendChild(a) } function i(e) { var a = t.createElement("style"); a.type = "text/css"; try { a.appendChild(t.createTextNode(e)) } catch(t) { a.styleSheet.cssText = e } t.getElementsByTagName("head")[0].appendChild(a) } function c() { return "rgb(" + ~~ (255 * Math.random()) + "," + ~~ (255 * Math.random()) + "," + ~~ (255 * Math.random()) + ")" } var s = []; e.requestAnimationFrame = e.requestAnimationFrame || e.webkitRequestAnimationFrame || e.mozRequestAnimationFrame || e.oRequestAnimationFrame || e.msRequestAnimationFrame || function(e) { setTimeout(e, 1e3 / 60) }, i(".heart{width: 10px;height: 10px;position: fixed;background: #f00;transform: rotate(45deg);-webkit-transform: rotate(45deg);-moz-transform: rotate(45deg);}.heart:after,.heart:before{content: '';width: inherit;height: inherit;background: inherit;border-radius: 50%;-webkit-border-radius: 50%;-moz-border-radius: 50%;position: fixed;}.heart:after{top: -5px;}.heart:before{left: -5px;}"), n(), r() } (window, document); </script>