用Thinkphp写的简单程序在命令行执行(非 Thinkphp 下的cli模式 而是php下的命令模式)

时间:2022-11-09 00:05:37

本来是打算用Thinkphp下的cli命令模式 运行程序的,但不知道哪里出错了,没法跑起来 于是就有了下篇代码。

首先 用Thinkphp写个简单的程序,保证页面*问输出正常。

再在命令行 输入 php index.php --start=1 --end=9 (--start=1 --end=9 参数的传递  这里的--代表标识符,)

下面是部分代码:

tp/Conf/config.php 配置数据库相关信息

<?php
return array(
//'配置项'=>'配置值'
   // 添加数据库配置信息
    'DB_TYPE'   => 'mysql', // 数据库类型
    'DB_HOST'   => 'localhost', // 服务器地址
    'DB_NAME'   => 'middleData', // 数据库名
    'DB_USER'   => 'root', // 用户名
    'DB_PWD'    => 'root', // 密码
    'DB_PORT'   => 3306, // 端口
    'DB_PREFIX' => '', // 数据库表前缀
);
?>

tp/index.php 入口文件的代码。

<?php
define('APP_DEBUG',TRUE);
//define('MODE_NAME','cli');
include './ThinkPHP/ThinkPHP.php';
//App::run();
?>

tp/Lib/Action/Index.Action.class.php 代码

<?php 
    class IndexAction extends Action {
      public function index(){
          $Enterprise_raw = M('Enterprise_raw'); // 实例化Data数据模型

          $argv=$_SERVER["argv"];
          //print_r($argc);
          $argc=$this->parseArgs($argv);
          
          $start=$argc[start];
          $end=$argc[end];
          
          $rawRecs=$Enterprise_raw->limit($start,$end)->select();
          
          $Enterprise = M('Enterprise'); // 实例化Data数据模型
          //echo $Enterprise_raw->getLastSql(); 
          $count = 0;
          echo "程序开始时间:".date("Y-m-d H:m:s",time())."<br/>";
          foreach($rawRecs as $rawRec){             
              $record=$Enterprise->where("name='".$rawRec['enterprise_name']."'")->select();
              switch ($rawRec['status']) {
                case 0:
                  if($record){
                    $this->updataRec($rawRec);
                    //echo '<br/>'.'update rec successuflly with : ' . $rawRec['enterprise_name'];
                  }else{
                    $this->insertRec($rawRec);
                    //echo '<br/>'.'insert rec successuflly with : ' . $rawRec['enterprise_name'];
                  }
                  $count += 1;
                  break;
                case 1:
                 
                  break;
                case 2:
                  
                  break;                                  
                default:
                  break;
              }
          }
          echo "已运行 ".$count." 条数据。";
          echo "程序结束时间:".date("Y-m-d H:m:s",time())."<br/>";
      }
        public function parseArgs($argv){
            array_shift($argv);
            $out = array();
            foreach ($argv as $arg){
                if (substr($arg,0,2) == '--'){
                    $eqPos = strpos($arg,'=');
                    if ($eqPos === false){
                        $key = substr($arg,2);
                        $out[$key] = isset($out[$key]) ? $out[$key] : true;
                    } else {
                        $key = substr($arg,2,$eqPos-2);
                        $out[$key] = substr($arg,$eqPos+1);
                    }
                } else if (substr($arg,0,1) == '-'){
                    if (substr($arg,2,1) == '='){
                        $key = substr($arg,1,1);
                        $out[$key] = substr($arg,3);
                    } else {
                        $chars = str_split(substr($arg,1));
                        foreach ($chars as $char){
                            $key = $char;
                            $out[$key] = isset($out[$key]) ? $out[$key] : true;
                        }
                    }
                } else {
                    $out[] = $arg;
                }
            }
            return $out;
        }
             .

             .

             .

             .

             .

             .
            (省略的代码)

    }
  ?>

至此Thinkphp代码结束。

然后在命令行输出 php index.php --start=0 --end=9 程序就会自动运行index方法里的相关代码了。