如何知道在PHP中运行的命令?

时间:2014-11-25 11:35:42

标签: php command-line

如何从PHP获取运行的cli命令?

我有这个日志记录类

class Logger {

  public function log($logMessage)
  {
      $this->writeLog($this->getCommand() . ' : ' . $logMessage);
  }

  private function getCommand()
  {
      //How to get the command?
      //here  var_dump($argv); returns NULL
  }
}

许多从多个命令运行的类正在使用此记录器。 两个例子: 的 process_users.php

$logger = new Logger();
$users = new Users();
foreach ($users->getUnprocessed() as $user) {
    $logger->log('processing '.$user->getId());
    if ($user->process()){
        $logger->log('processed ' . $user->getId());
    } else {
        $logger->log('failed ' . $user->getId());
    }
}

upload_consumer.php

$logger = new Logger();
$consumer = new UploadConsumer();

while ($message = $consumer->getNextMessage()){
    $logger->log('Uploading ' . $message['name']);
    $this->upload($message);
    $logger->log('Finished uploading '. $message['name']);
}

所以当我运行 php process_users.php corporate --limit 10 时 我希望有这样的日志:

php process_users.php corporate --limit 10 : processing 2554
php process_users.php corporate --limit 10 : processed 2554 
php process_users.php corporate --limit 10 : processing 2555 
php process_users.php corporate --limit 10 : failed 2555

当我运行 php upload_consumer.php -m 100 -w 时 我希望有这样的日志:

php upload_consumer.php -m 100 -w : Uploading 564sdf564sdf56sd4f.png
php upload_consumer.php -m 100 -w : Finished uploading  564sdf564sdf56sd4f.png 
php upload_consumer.php -m 100 -w : Uploading sd56f4sd54f6sd6f54.png
php upload_consumer.php -m 100 -w : Finished uploading  sd56f4sd54f6sd6f54.png

这可能吗?

1 个答案:

答案 0 :(得分:1)

使用$argv,它将为您提供传递给脚本的参数和脚本名称try var_dump($ argv);这样您就可以看到您正在使用的数据。

此处有更多信息http://php.net/manual/en/reserved.variables.argv.php

如果您只想要cli参数而不是脚本名称

,也可以使用getopt()

请记住,当在类或函数中使用时,您必须执行global $argv才能将其置于类或函数的范围内。或者,您可以将其作为参数传递,而不是使用全局。