业务需求
订单是我们在日常开发中经常会遇到的一个功能,最近在做业务的时候需要实现客户下单之后订单超时未支付自动取消的功能,刚开始确认了几种方法:
综合考虑上述方法,第一种最先排除,因为如果客户把APP后台禁止或者网络连接禁止,那么就无法发给服务端请求,订单就会一直是未处理状态;第二种方法使用的比较多,不过存在准确度的问题,还有需要确认定时任务的周期,暂时列为后补方法;第四种方法存在的问题就是订单如果删除就是物理删除,无法统计未处理数据(当然可以存redis时候顺便存在mysql这样的数据库做长久存储然后用方法二定时处理)。
最终准备使用方法三。
再确认使用方法3的时候,由于使用的PHP这种开发语言,所以想实现定时器功能需要借助Swoole或者workerman。由于Swoole是C开发的扩展框架,性能方面肯定比较好,就选了Swoole。
前期准备
开始测试
我们创建一个swoole_test.php文件和一个log.txt文件(用来测试),swoole_test.php代码如下:
<?php
swoole_timer_after(3000, function () {
append_log(time());
echo "after 3000ms.\n";
});
function append_log($str) {
$dir = 'log.txt';
$fh = fopen($dir, "a");
fwrite($fh, $str."\n");
fclose($fh);
}
然后在网页访问这个PHP文件,结果如下:
然后在Linux终端运行PHP:/usr/local/php7/bin/php /home/app/swoole_test.php,结果如下:

内心一阵。。。
原来定时器只能在cli模式下,那么这个想法怕是要GG了,难道就栽倒这里了吗,难道就没有别的方法了吗?就在我欲哭无泪的时候突然灵光乍现,一个词闪到我的脑海:Python!
对,我们不能单单靠着PHP啊,还有Python这种神奇的语言呢,我们知道Python的os模块里的os.system方法是可以执行命令行的,那么不就可以实现在cli模式下运行刚才的swoole_test.php文件了么。
内心一阵激动后,觉得测试是否可行
我们知道Linux都是自带Python的,但是不同的版本Python版本不同,有的自带的是Python2.6,版本过低了,所以需要装一个高版本的,这里我选择Python3,注意不要覆盖系统自带的Python2 。以下是大致的安装步骤:
接下来终端输入:Python3,如果出现

则安装成功。
安装完Python3之后,我们新建一个test.py文件,内容如下:
#!usr/bin/env python3`
#-*- coding:utf-8 -*-
import os
ret = os.system("/usr/local/php7/bin/php /home/app/swoole_test.php") #请使用自己系统的绝对路径
print(ret)
然后我们在终端执行:/usr/bin/python3 /home/app/test.py,注意:这里只是执行PHP文件,但是文件里的echo内容是不会在终端输出的,这时候就用到刚才新建的log.txt文件了。执行完Python文件后,我们去log文件检查下,发现内容已经写入,所以使用Python是可以实现PHP的cli模式的。┗|`O′|┛ 嗷~~

到这里就会有同学疑惑了,你这使用Python实现了PHP的cli模式,但是怎么通过web远程访问呢?这个时候就用到PHP的exec方法了,我们知道PHP的exec方法和Python的os.system方法一样是可以执行命令行命令的,所以我们可以新建一个test.php文件,内容如下:
<?php $program="/usr/bin/python3 /home/app/nongyephp/test.py"; #注意使用绝对路径 echo "begin<br>"; (exec ($program)); echo "end<br>"; die;
然后我们通过网页访问test.php文件。结果如下:

然后去log文件检查,发现也写入日志了,所以这个方法是可行的!
PHP有序表查找之插值查找算法示例这篇文章主要介绍了PHP有序表查找之插值查找算法,简单分析了插值查找算法的概念、原理并结合实例形式分析了php实
ThinkPHP整合datatables实现服务端分页的示例代码下面小编就为大家分享一篇ThinkPHP整合datatables实现服务端分页的示例代码,具有很好的参考价值,希望对大家有所帮
PHP实现APP微信支付的实例讲解下面小编就为大家分享一篇PHP实现APP微信支付的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小
PHP实现的多维数组排序算法分析这篇文章主要介绍了PHP实现的多维数组排序算法,结合实例形式对比分析了php针对多维数组及带有键名的多维数组进行
php+ajax实现无刷新文件上传功能(ajaxuploadfile)这篇文章主要为大家详细介绍了php结合ajaxuploadfile实现无刷新文件上传功能,具有一定的参考价值,感兴趣的小伙伴们
PHP的RSA加密解密方法以及开发接口使用本篇文章给大家详细介绍了PHP开发接口使用RSA进行加密解密方法,对此有兴趣的朋友可以学习下。