THINKPHP5命令行的异步执行工具类

发布时间:2019-10-10 09:55:43 作者:Aoe Wide 阅读量:3087

  1. namespace util;
  2. /**
  3.  * 创建异步执行CMD任务
  4.  * @package app\common\model;
  5.  * @author andy3513
  6.  */
  7. class AsyncCommand {     
  8.    
  9.     /**
  10.      * 异步执行think命令行
  11.      * @param string $command think命令行名称
  12.      * @param array  $argument 参数 如[1,2,3]
  13.      * @return string
  14.      */
  15.     public static function think($command,$argument = []){
  16.         $cmd = "php " . ROOT_PATH . 'think ' . $command;
  17.         if($argument){
  18.             $cmd  .= " " . implode(" ",$argument);
  19.         }   
  20.         return self::run($cmd);
  21.     }       
  22.     
  23.     /**
  24.      * 创建一个新的异步CLI进程,支持WINDOWS 和 LINUX系统  
  25.      * PHP 需可全局执行,并启用popen 
  26.      * @param string $cmd 要异步执行的命令行
  27.      * @return string
  28.      */   
  29.     public static function run($cmd){       
  30.         $isWin = strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
  31.         if ($isWin) {
  32.             $cmd = "start /b " . $cmd . '>' .ROOT_PATH . "runtime/popen.log"; //windos系统中start /b 是异步执行
  33.         } else {
  34.             $cmd = $cmd . " > /dev/null &"; //linux系统中&符号 是异步执行
  35.         }
  36.         $id = popen($cmd, 'r');    
  37.         pclose($id);
  38.         return $cmd;
  39.     }   
  40. }


关于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 常量即可

我要评论

网友评论


评论时间:2020-07-09 09:38:32

您好,有一个问题想请教一下,我的测试项目跟正式项目放在一个服务器上,但是测试服务可以执行这个脚本,但是正式就没用,这个是什么问题呢?谢谢

Aoe WideAoe Wide   我要留言
Aoe Wide
Catfish(鲶鱼) Blog V 2.0.30