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

ThinkPHP 版本: 5.0.16

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

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

问题源码

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

查看更多

VS Code + PHPStudy 断点调试 PHP

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

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

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

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

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

请注意:本文编写于 94 天前,最后修改于 68 天前,其中某些信息可能已经过时。

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

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

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

ThinkPHP5 的 Nginx 配置

1. 为什么要配置 Nginx?

因为 ThinkPHP5 采用了路由系统,而默认配置的 Nginx 无法识别 ThinkPHP5 产生的 URL 导致 404,另外有时候我们需要隐藏 ThinkPHP 的入口文件;

2. 主要修改 Nginx 配置文件的哪几个点?

我们主要修改配置文件中 server {} 中的三处地方:

  1. 首先在 server_name 下设置 $root 变量:set $root /app/www/mydomain.vm/public;;
  2. 然后再 location / {} 中修改 root 并添加正则匹配规则;
查看更多

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

请注意:本文编写于 94 天前,最后修改于 68 天前,其中某些信息可能已经过时。

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

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

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

解决 ThinkPHP5 的其他静态资源[图片等]加载我采用的是设置视图输出字符串内容替换,即修改 app/config.php 下的 view_replace_strview_replace_str 具体修改方法请参考:官方手册本章节地址

固定一个 div 在另一个 div 的底部

请注意:本文编写于 94 天前,最后修改于 68 天前,其中某些信息可能已经过时。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<html>
<head>
<style>

.big{
width:20%;
height:100%;
float:left;
position:relative;
}

.small{
width:100%;
position:absolute;
bottom:0;
}
</style>
</head>
<body>
<div class="big">
<div class="small">我在底部</div>
</div>
</body>
</html>

如果要始终固定在页面底部,那么就需要使用:position:fixed

利用 position + rgba 将 HTML 背景灰化

最近正在摸索着写自己的第一个主题,在 Copy 大佬页面设计的时候发现虽然用了同一张图做背景我 Copy 出来的页面却显得很不协调:

大佬博客

临摹作品

很明显我临摹的作品背景偏亮,使得副标题显示的很模糊,因此我断定是我临摹过程中漏掉了一个步骤[然而具体是什么步骤就不得而知了],经过我一顿百度摸索发现可以在背景上面再加一层纯色蒙版然后调整蒙版不透明度即可:

代码示例:

查看更多

Nginx rtmp 模块配合 OBS 推流实现直播(监控)功能

写的有点仓促,有问题的话可以随时留言。

客户端环境:
系统:WIN 10
推流软件:OBS Studio
PC测试浏览器:Chrome
Android 测试浏览器:QQ 内置

服务器环境:
系统:Centos 7
代理:Nginx( http+rtmp )
浏览器播放器:ckplayer

1. 安装 Nginx

具体过程参考 Centos 7 下配置 Nginx…

2. 安装编译 rtmp 模块

1
2
3
4
5
6
7
8
9
10
# 下载 rtmp 模块压缩包(最好和 Nginx 的安装包在同一目录下)
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
# 解压
unzip nginx-rtmp-module-master.zip
# 得到 nginx-rtmp-module-master
# 进入 Nginx 安装包文件夹
cd nginx-1.12.2
# 编译安装 rtmp
./configure --add-module=/root/nginx-rtmp-module && make && make install
# 注意将 /root/nginx-rtmp-module 替换成你 rtmp 包所在的位置

查看更多