#php异步处理方案
class Test{
public function checkAsy(){
pclose(popen( "php ".ROOT_PATH."/public/index.php Test/sleep &", 'r'));
echo 2222;
}
public function sleep(){
sleep(5);
$myfile = fopen(ROOT_PATH."public/test_request.txt", "a+") or die("Unable to open file!");
fwrite($myfile, "\n");
fwrite($myfile, "----------------------------");
fwrite($myfile, "\n");
fclose($myfile);``
}
}
项目用的是thinkphp框架,命令行访问为项目路径 php index.php 路由( 例 php index.php Test/sleep)就可以命令行后台执行。无需等待完成,后台执行。
还有其他的方案,消息队列(mysql定时任务,redis,消息队列中间件),curl 超时1秒,fsockopen,这里尝试的是最简单的方案popen()
index.php Test/sleep param
可以通过$_SESSION[“argv”]获取参数
print($_SESSION["argv"])
有可能还会碰到这个问题
是因为函数被禁用了
在php.ini文件删除这个函数就可以了,重启php-fpm就没有问题了