如何从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
这可能吗?
答案 0 :(得分:1)
使用$argv
,它将为您提供传递给脚本的参数和脚本名称try var_dump($ argv);这样您就可以看到您正在使用的数据。
此处有更多信息http://php.net/manual/en/reserved.variables.argv.php
如果您只想要cli参数而不是脚本名称
,也可以使用getopt()请记住,当在类或函数中使用时,您必须执行global $argv
才能将其置于类或函数的范围内。或者,您可以将其作为参数传递,而不是使用全局。