ThinkPHP5 + 梦网实现手机验证码登陆后台逻辑

前言

之前一直挺好奇各个大平台怎么实现手机验证码登陆的,前几天手痒就尝试着通过 ThinkPHP 和梦网云通讯的短信 API 实现了一下服务器端的逻辑,功能实现很简单,不过还是有几个坑存在因此写下这篇文章记录一下。

本文记录了本人此次尝试的全部思路,比较冗长,提前劝退各位已经熟悉此类操作的大佬,当然如果有大佬愿意检查我的思路过程并指出其中不足我还是很欢迎的。

准备

1. 模拟服务器环境准备

我是用自己的笔记本来码的代码因此需要做一些前期的模拟服务器准备,不过由于我之前一直在写 PHP 所以环境早就搭建好了也不想在赘述过程了,具体环境信息如下:
PHPStudy: PHP7+MySQL+Apache
IDE: PHPStrom

2. 短信验证码服务准备

我简单的搜索了一下并尝试了几个别人说还不错的产品最后选择了梦网云通讯,原因有两个:注册简单,能免费体验。

需要准备的东西有:认证后的账号一个,上线的梦网短信发送账号一个(登录后在控制台的业务中心自己开启),PHP API 文件一份(官网开发者中心下载)

Read More

Windows 下 ThinkPHP5 配置 redis 缓存

最近再写一个小的学校论坛项目,项目是基于 Vue + ThinkPHP5 开发的,在开发过程中遇到一个小问题让我纠结了好久,就是如何实现用户给帖子点赞。

用户给帖子点赞是一个很细节的小功能,在刚开始学习 Web 编程的时候曾经尝试过实现这个功能但总是会莫名其妙的卡住,当时觉得不是问题太难应该是我还没有学习相关的知识,直到最近开发项目的时候才发现问题并没有那么简单,我已经掌握了基本的前后端和数据库的知识但是具体实践起来还是有些困难,于是就百度了一下在V2EX上找到了这样一篇帖子 小菜我准备写一个简单的论坛…,看了里面大佬的回复才发现原来还是知识体系不全面,如大佬所言要很好的实现点赞功能需要借助 redis 等缓存机制来完成快速的读写。

于是我又赶紧补习了一下关于 redis 的一下皮毛并进行了 WindowsThinkPHP5 配置 redis 缓存,过程中还是有几个小坑的,于是写下这篇文章记录一下:

1. 声明

本教程所配置的仅是 Windows 下的开发环境并非服务器环境若需要服务器环境配置请自行百度。

2. 安装 php 的 redis 和 igbinary 拓展

php_igbinary : 在序列化和反序列化的效率上高于其自带的
php_redis : 效率是相当高有链表排序功能

Read More

新部署一台 Linux 云服务器时常用的命令

每次部署新的云服务器总是会进行一些流程化的东西,现在还不会写脚本所以只能一个一个的码命令,但是有些命令很少会用到所以每次都要去查一遍,干脆就搬运到自己的博客里以供下次使用。

根据一下命令可以进行的操作:拿到新服务器 -> SSH 远程连接 root -> 新建一个用户组 -> 新建一个用户并添加到新建的用户组 -> 设置新用户密码 -> 添加新用户到 sudoer -> 开启一个随机端口号 -> 重启防火墙- > 修改 SSH 登陆端口号为随机端口号 -> 重启 SSH

firewall

Read More

解决 TP5 无法接收 客户端 Post 传递的 Json 参数

TP5 版本: 5.0.16

这段时间在学习 API 开发,从网上搞了一个课程在跟着做,就在昨天我又一次碰到了讲师一路畅通我半天调试的情况,遇到的问题是我用 Postman 测试 API 某 Post 接口的时候无论怎么发送请求总是提示我参数验证失败,在我调试的过程中某次采用通过 Body 表传递参数的方法,API 神奇地通了,于是我判断是之前 Json 传递出了问题,就各种在网上搜,然而并没有解决方法[不过 Get 了两个知识点放在文章结尾处]。

关于 TP5 的问题度娘不行就只能查源代码了,于是乎我就跟着错误一点一点的打断点终于被我发现了问题所在:

源码

原来 TP5 是通过 strpos 函数在 Header 的 content-type 值中查找 app/json 字符串,也就是说你必须设置 Header 的 content-type 值为 app/json 才行,否则 TP5 不会认为你传入的是 Json 参数并给 Request::post 设值为空。

Read More

VS Code + PHPStudy 断点调试 PHP

最近可利用时间比较少,加上团队项目重新开发[没错之前的网站白做了,所以主题开发就鸽了…

目前正在尝试做三端分离的小程序开发[借鉴慕课网某课程需要的可以找我要],讲师“嘴欠”非得讲什么断点调试,我这个敲代码至今没调试过代码的人也是突然燃起了兴趣,就跟着设置了一下,仍然是常见的软件不匹配问题:就是讲师叭叭叭三两句话弄好了我这边还没开始…

经过度娘的一番调教大概弄懂了具体操作流程了,本次教程以 VS Code + PHPStudy 为例,但适用于所有可以进行 PHP 断点调试的编程软件:

  1. 打开 PHPinfo 查看是否安装了 XDebug PHP 插件[ PHPStudy 一般是不自带或者不自动开启的]
Read More

「转载」同步和异步的区别

老张爱喝茶,废话不说,煮开水。
出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。
1 老张把水壶放到火上,立等水开。(同步阻塞)
老张觉得自己有点傻
2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)
老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶。水开之后,能大声发出嘀~~~~的噪音。
3 老张把响水壶放到火上,立等水开。(异步阻塞)
老张觉得这样傻等意义不大
4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)
老张觉得自己聪明了。

所谓同步异步,只是对于水壶而言。
普通水壶,同步;响水壶,异步。
虽然都能干活,但响水壶可以在自己完工之后,提示老张水开了。这是普通水壶所不能及的。
同步只能让调用者去轮询自己(情况2中),造成老张效率的低下。

所谓阻塞非阻塞,仅仅对于老张而言。
立等的老张,阻塞;看电视的老张,非阻塞。
情况1和情况3中老张就是阻塞的,媳妇喊他都不知道。虽然3中响水壶是异步的,可对于立等的老张没有太大的意义。所以一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

ThinkPHP5 静态资源[CSS , JS , img]加载

说起这个静态资源加载可真的是一把心酸泪呀,各种路径问题[绝对、相对],还有前段时间写 WordPress主题也是,需要通过各种内置钩子或函数模版来解决路径问题;

解决 ThinkPHP5 的 CSS , JS 静态资源加载我采用的是官方手册给出的视图模版函数 {load href="/..." /} 在视图模版中引入此函数并设置静态资源位置,函数会自动识别引入文件是 CSS 文件还是 JS 文件从而选择不同的引入方式;官方手册本章节地址

  • 注意 href="/..." 中 / 指的是 public 目录 [即入口目录]

Read More