2014-11-25 5 views
0

Как получить команду cli, которая была запущена, с PHP?Как узнать команду, которая была запущена на PHP?

У меня есть журналирования класс

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 корпоративный --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

, который даст вам аргументы, переданные скрипту, и имя сценария try var_dump ($ argv); поэтому вы можете видеть, с какими данными вы работаете.

Подробнее здесь http://php.net/manual/en/reserved.variables.argv.php

Вы также можете использовать Getopt(), если вы просто хотите Cli аргументы, а не имя сценария

Помните при использовании внутри класса или функции, то вам придется сделать global $argv, чтобы довести его до уровня класса или функции. В качестве альтернативы вы можете передать его как параметр, а не использовать глобальный.

+0

'var_dump ($ argv);' возвращает NULL, проверьте мое обновление вопроса – skafandri

+0

, что возвращает $ argc? если его ноль, то в ваш скрипт не передается никаких параметров. В противном случае используйте getopt(), чтобы проанализировать их вручную из ожидаемого. И argc, и getopt() должны после моды дать вам то, что вам нужно. Что я не уверен (если это даже фактор?) Будет использование argc внутри класса, вам, возможно, придется генерировать его как переменную в конструкции, а не в методе, потому что ее системная система все равно должна быть в области в классе, который я считаю. Создайте тестовую страницу, чтобы проверить, действительно ли она работает, если она неклассифицирована. – Dave

+0

Нашел решение, перед тем как использовать его для 'global $ argv'. Пожалуйста, добавьте это упоминание в свой ответ, потому что это фактически 50% решения. – skafandri

Смежные вопросы