本文主要是介绍THINKPHP5命令行的异步执行工具类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在实际应用中。通常需要异步处理一些操作,例如消息推送。邮件发送等,对于这些操作,可以用think的命令去异步执行,而PHP可以继续去做其他的事情
异步执行需要的类:
namespace util;
/*** 创建异步执行CMD任务* @package app\common\model;* @author 晓风<215628355@qq.com>*/
class AsyncCommand { /*** 异步执行think命令行* @param string $command think命令行名称* @param array $argument 参数 如[1,2,3]* @return string*/public static function think($command,$argument = []){$cmd = "php " . ROOT_PATH . 'think ' . $command;if($argument){$cmd .= " " . implode(" ",$argument);} return self::run($cmd);} /*** 创建一个新的异步CLI进程,支持WINDOWS 和 LINUX系统 * PHP 需可全局执行,并启用popen * @param string $cmd 要异步执行的命令行* @return string*/ public static function run($cmd){ $isWin = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';if ($isWin) {$cmd = "start /b " . $cmd . ' >' .ROOT_PATH . "runtime/popen.log"; //windos系统中start /b 是异步执行} else {$cmd = $cmd . " > /dev/null &"; //linux系统中&符号 是异步执行}$id = popen($cmd, 'r'); pclose($id);return $cmd;}
}
关于think命令行的创建 可参考thinkphp文档
使用时,比如你的think命令行是这样
php think sedemail 1 2 3
那么这样调用
\util\AsyncCommand::think("sedemail",[1,2,3]);
也可以不传参数
如 php think test
那么
\util\AsyncCommand::think("test");
如果想用到tp6,修改 ROOT_PATH 常量即可
这篇关于THINKPHP5命令行的异步执行工具类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!