最近写猪比的GOCQ托管服务,遇到了几个小坑,这里记录一下

一、PHP的exec函数执行需要挂在后台的操作

需要用exec运行gocq,一开始我是这么写的:

exec("cd ./gocq/0/3582675884/ && nohup ./go-cqhttp 3582675884 az &");

说白了就是使用nohup &来后台运行。

但是这么做有个缺点,就是无法获取到终端的返回值。
不过这倒不是问题,毕竟用nohup执行的一般也不需要返回值,那么直接

header("Connection:close");

不要让前端等太久以至于524

不过问题很快来了,跑了一段时间相安无事,但是突然ps aux | grep go-cqhttp发现进程无了
然后又试了很多种情况比如去掉nohup等,都没用
不卖关子了,直接给出正解:

exec("cd ./gocq/0/3582675884/ && ./go-cqhttp 3582675884 az > /dev/null &")

这样的话就是把所有输出全部扔掉(应该是),不知道具体为啥,反正这样写之后再也没掉过

也可以尝试这种方法

二、cookie作用域问题

写了一个很常见的页面,点按钮就会设cookie然后跳转到另一个详情页面
然后两个按钮分别点了一下,按理说详情页面根据cookie不同内容也会不同,但是点进去后发现两次内容全部相同。
然后看了一下Cookie,发现有两个相同的cookie。
原来是这两个cookie作用域不同,结果导致PHP获取到的一直是另一个cookie
那好吧,我们就统一一下作用域呗

setcookie(键, 值, 过期时间, 作用域);

然后js的话我用的是jq的cookie插件,详见菜鸟教程

三、关于MDUI一些建议(一)

MDUI有个自适应的网格布局,比如说.mdui-row-sm-6就是小屏幕设备及以上分两栏显示。
但是如果仅仅是分两栏显示的话,不建议用网格布局(会很难看),可以用

<div class="mdui-clearfix">
<div class="mdui-float-left" style="width:48%;">
Something
</div>
<div class="mdui-float-right" style="width:48%;">
Something
</div>
</div>

这样,如果是移动设备的话可以写个判断,结合jq的$(selector).width();等进行适配

四、关于MDUI一些建议(二)

网格布局文档里说.mdui-row必须要在.mdui-container中,但是mdui-container的边距某些情况下就相对较大
可以将.mdui-container改为.mdui-m-x-1这样,设置x轴的margin为8px,这个边距就好很多了

注:以上MDUI版本为1.0.1