php
文章平均质量分 84
贪玩的木木
这个作者很懒,什么都没留下…
展开
-
TP6 + think-swoole 实践(二)
swoole 在 TP 中的用法大概可以归为三类:listen(监听)、subscribe(订阅)、task(任务)。先说一下 listen 和 subscribe,这两种也是各种教程上出现最频繁的。这三类用法,本质上都是使用 TP6 的“事件”实现的。简单的来说,就是我们先定义一些事件,然后注册listen监听或者subscribe订阅事件(在event.php中),之后就可以通过内部调用来触发事件了。// 触发UserLogin事件Event::trigger('UserLogin');// 或原创 2021-12-06 11:52:46 · 2189 阅读 · 0 评论 -
TP6 + think-swoole 实践(一)
最近有一个主动向前端发送消息的需求,自然就想到了用 WebSocket 解决,但是没想到 TP6 + think-swoole 的资料这么少,连全面的官方文档也找不到,再加上 Swoole 的官方文档对初学者十分不友好,无奈之下自己摸索了好久,花费了两个半天时间,这里稍微记录一下。参考文档:think-swoole:https://www.kancloud.cn/book_xwy/think-swoole3/1720752简单使用:https://github.com/xavieryang007/th原创 2021-12-05 20:23:10 · 4336 阅读 · 0 评论 -
探索TP6验证场景的only、remove、append规则
废话忍不住先吐槽一下,且不说TP的功能怎么样,文档写得是真的潦草,很多复杂的情况都没有举例说明。奈何网上的资料又很少,每次只能一点点去啃源码,难受的呀,常常想换个框架或者换个语言得了,但又以没时间为由懒得行动,真是自作自受呢 ≧ ﹏ ≦。最近在工作的时候用到TP6验证器的场景里的 only、remove、append 三个方法,没想到用起来好多小问题,非常不顺手,无奈只能一个个去找具体的隐藏规则了。正文先附上源码路径:\vendor\topthink\framwork\src\think\Valid原创 2021-11-21 23:14:22 · 1891 阅读 · 2 评论 -
对TP5数据库缓存cache的一些思考
最近在优化代码的时候,突然想起来TP5的数据库操作中有个cache,之前也用过,印象里就是在缓存时间内,请求的速度会大大加快,但是修改数据会导致不能及时更新。当初还比较年轻,没有深入去搞清楚,只是不再使用cache了而已,现在刚好有机会,就来稍微学一学吧。很可惜,不论是官方文档还是网上搜索出来的结果,基本上都只是告诉我们如何去使用它,完全没有说到它的工作原理之类的,无奈,只能去慢慢读源码了。首先让我感到疑惑的是,这个cache和我们平常用的缓存Cache有什么区别?如果单单从功能上.原创 2021-03-16 21:29:40 · 3628 阅读 · 0 评论 -
Clean Code PHP:PHP代码简洁之道
最近在 GitHub 上看到了一篇很不错的文章,是关于代码编写风格和规范的,看了之后感觉收获颇丰,在这里根据我自己的理解和习惯增删改一下,以后方便拿来复习。文末有原文链接。1、变量、方法等,名字要取得一眼就能够看出大概意思,代码可读性高一点。//什么神仙能看得出这是当前时间的意思$dqsj = date('Y-m-d h:i:s',time());$currentTime = date('Y-m-d h:i:s',time());2、尽量不要用无意义的变量名,增加代码可读性。.原创 2021-03-04 10:51:02 · 207 阅读 · 4 评论 -
PHP 实现请求结束之后,后台静默执行部分代码
这一篇其实是由上一篇引申出来的。之前说到,勉勉强强实现了 PDF 和 PPT 文件转图片,但是转换需要一定的时间,而我这里是用户发起请求进行转换的,这部分时间不应该让用户一直等着,应该结束请求,把数据返回给用户,然后后台再慢慢执行这些转换操作。最开始我是有两种想法的,第一种是比较传统的,做一个进度条给用户看,虽然一个文件稍微要几秒钟的等待时间,但是有了进度条之后也勉强能够接受;第二种就是我现在在实现的办法,即结束请求,把数据返回给前端,然后后台再默默地进行转换操作。这里我综合考虑了一下,选择了.原创 2020-12-23 22:15:41 · 517 阅读 · 0 评论 -
PHP利用ImageMagick实现PDF、PPT转图片
最近应业务需要,需要实现在线浏览 PPT、PDF 的功能。搜了一阵,看似好用的微软 Office Web Viewer 却有着速度极慢、限制10M大小等麻烦,前端直接使用 pdf.js 也遇到了跨域之类的问题,索性一不做二不休,把 PPT 和 PDF 都转换成图片,再分页传回给前端。去网上搜了一圈,看到了 imagick 这个扩展库,看了操作好像也是十分地简单,没想到真的动手做起来遇到了不少的麻烦。首先是网上的版本,即用 PHP 的扩展库 imagick 来实现。第一步是要安装,我用的是.原创 2020-12-20 22:26:28 · 1257 阅读 · 0 评论 -
Conway‘s Game of Life - Unlimited Edition(康威生命游戏-无限版)
最近也不知道在忙啥,反正好久没玩 codewars 了,上去看看的时候偶尔看到了一个很有意思的题目,稍微看了一下说明,感觉可以做出来,于是就开始了长达 2+2 个小时的解题过程。下面是简单的题目说明:简单的来说,就是有一个二维数组,数组的每一个元素就是一个细胞,细胞有存活和死亡两种状态,每经过一代,细胞的状态都可以发生改变,有如下四个具体规则:1、任何具有少于两个活邻居的活细胞都会死亡。2、任何具有三个以上活邻居的活细胞都会死亡。3、任何有两个或三个活邻居的活细胞都可以存活到下一代。4、.原创 2020-12-09 20:43:36 · 2892 阅读 · 0 评论 -
以字符串的形式完成加法和乘法运算
问题描述和思路:当运算的数字过大时,会溢出范围,导致最后的结果出错。PHP种整型数的字长和平台有关,32 位平台下的最大值通常最大值是大约二十亿,64 位平台下的最大值通常是大约 9E18。在PHP中,当数字超出整型范围时,会自动将其转换为浮点型,浮点数的字长和平台相关,通常最大值是 1.8e308 并具有 14 位十进制数字的精度。在本题中,虽然范围是在浮点数内的,但是精度却不足了,所以需要用别的方法来实现大数的运算,在这里我们可以使用字符串来实现。直接运算——精度不足//...原创 2020-08-20 20:07:39 · 874 阅读 · 0 评论 -
Square into Squares. 大平方数转小平方数之和
问题描述:像是把一个大的正方形分割成几个小的正方形块一样,把一个数分成由几个比他小的数字,要求其平方和相等。如把 50 分成 "1,3,5,8,49"。额外要求:1、要求数字序列严格递增:比如 "1,1,4,9,49" 就不符合要求。2、要求返回具有最大可能值的结果:比如11可以分为[1,2,4,10]和[2,6,9],则返回[1,2,4,10]。思路1:解题步骤可以分为两步,拿50举例1、从50-1开始往下循环,获取“最大的数”。如果49的组合不成立,则尝试48,以此类推。2、将剩余部...原创 2020-08-17 22:02:48 · 330 阅读 · 0 评论 -
罗马数字和阿拉伯数字之间的转换
问题描述:把我们常见的阿拉伯数字转化为罗马数字的形式。拓展:两种形式的相互转换。思路:将阿拉伯数字拆分为能够被罗马数字整除的形式(比如100、500等),再整合到一起,然后替换字符为我们需要的形式(比如IIII=>IV,VIV=>IX等等)。再使用键值对形式的数组,在实现阿拉伯数字转罗马数字之后,交换键值,就能实现反向转换了。function solution($number) { $roman = array( 'M' => 1000, 'D' =...原创 2020-08-16 18:31:17 · 655 阅读 · 0 评论 -
多组括号闭包问题
问题描述:判断字符串中的括号 () [] {} 是否为闭合结构。最开始的思路是,使用堆栈的结构,遇到左括号加入堆栈头,遇到匹配的右括号则将左括号移除堆栈,最后若堆栈有剩余或过程中匹配失败,则括号结构不为闭包。function validBraces($braces){ $array = []; foreach(str_split($braces) as $item) { if($item == '(' || $item == '[' || $item == '{').原创 2020-08-16 18:29:28 · 156 阅读 · 0 评论 -
字符串转驼峰式
这道题描述起来也是十分地简单,就是把原先用 '-','_'隔开的字符串转为驼峰法,也就是单词紧贴在一起,且单词的首字母大写(除了第一个单词之外)。我的想法是,将字符串按照 '-','_' 分割成多个数组,再将一个个数组,也就是单词拼接起来,就是我们需要的了。function toCamelCase($str){ $str = str_replace('_','-',$str); $array = explode('-',$str); $newStr = $array[0];...原创 2020-08-15 23:45:46 · 2226 阅读 · 0 评论 -
互补DNA:Complementary DNA
这道题描述起来十分地简单,就是把字符串总的AT和CG互换。说一说我刚开始的思路吧,一般和字符串有关系的都会最先想到用正则,可惜我正则不是很熟练,交换字符位置一下子想不到怎么实现,只能老老实实用正常的办法了,遍历字符串,再拼接成我们需要的字符串,就能简单地实现交换的效果。再用数组$key=>$value的形式,十分简单地实现switch的效果。function DNA_strand($dna) { $array = [ "A" => "T", "T" .原创 2020-08-14 23:19:53 · 509 阅读 · 0 评论 -
TP3.2 add方法返回值一直为1
今天在敲代码的过程中,偶然发现原本返回值为主键 id 的 add 方法,现在插入数据是成功的,但是现在莫名其妙返回值都变成1了。看了一下我的代码好像没啥问题,那就直接看看源码吧。打开\ThinkPHP\Library\Think\Model.class.php,查找public function add(,找到 add 方法。调试了几波后发现,问题出在了 324 行,当我的主键为复合主键的时候(尽管自增主键只有一个),直接就返回给我 insert 的结果了,再去看看 insert .原创 2020-07-31 22:35:45 · 753 阅读 · 0 评论 -
PHP后端(二):连接数据库
数据库是应用开发所必不可少的模块之一,使用数据库的好处和必要性不用我说了,什么数据共享啦、集中控制啦、维护性啦等等等等,可以说是好处多多。而所有与数据有关的操作,基本上都是后端的范畴,所以掌握好对数据库的操作,是后端的必修课之一。数据库的内容很庞大,真的要学起来还挺复杂的,我懂得也不多,就先挑简单的来吧,以后有机会的话再去学习、记录。我们最常见的数据库是关系型数据库,如MySQL、Oracle等等,关系型数据库的特点是根据关系模型来组织数据,一列代表一个属性字段,一行代表一条数据,通过行和列组成表,.原创 2020-07-17 21:57:27 · 2042 阅读 · 0 评论 -
PHP后端入门(一):实现前后端交互
PHP是现如今十分流行的轻量级语言,经常用来做应用的后端开发,其特点是语法简单,十分容易上手。除了单独做后端,PHP还能够将程序嵌入到HTML文件中执行,非常容易实现简单的前后端交互。而且PHP的运行很轻松,只要下载PHP环境并打开服务,就能通过访问文件的形式执行PHP文件,并且获得其返回的数据了。但是可惜由于很多原因,PHP不太适合复杂和安全性要求高的大应用,所以求职方面,可能不如Java后端等吃香。但是如果你只是需要为自己的应用写个简单的后台,或者是像我一样在学校里做做项目,参加参加比赛,那么PHP还.原创 2020-07-17 19:04:51 · 8690 阅读 · 0 评论