2014-11-25 98 views
0

如何獲取從PHP運行的cli命令?如何知道在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 -m upload_consumer.php 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

使用這將給你傳遞給腳本的參數和腳本名稱重的var_dump($ argv的);所以你可以看到你正在處理的數據。

更多的信息在這裏http://php.net/manual/en/reserved.variables.argv.php

您還可以使用getopt的(),如果你只是想CLI的論點,而不是腳本名稱

使用類中時或功能,那麼你將不得不做記住global $argv將其納入課堂或功能的範圍內。或者,您可以將它作爲參數傳遞,而不是使用全局。

+0

'的var_dump($ argv的);'返回NULL,檢查我的問題更新 – skafandri 2014-11-25 11:43:14

+0

是什麼$ ARGC返回?如果它的零,那麼沒有選項被傳遞給你的腳本。如果沒有使用getopt()手動解析出你所期望的。 argc和getopt()都應該在時尚之後給你以後的東西。我不確定的東西(如果它甚至是一個因素?)將是類中的argc的使用,您可能必須在構造中而不是在方法中將其生成爲變量,因爲它的系統範圍應該仍然在範圍內我相信在課堂上。創建一個測試頁面以檢查它在非分類時實際上是否正常工作。 – Dave 2014-11-25 11:46:40

+0

找到了解決方案,在使用之前必須使用'global $ argv'。請將此提及添加到您的答案中,因爲它實際上是解決方案的50%。 – skafandri 2014-11-25 11:50:01