2012-02-22 31 views
0

有什麼辦法讓Linux從文件中運行特定的方法?使用cronjob訪問PHP方法

目前,我有這樣的cronjob:

10 * * * * /usr/bin/php /path/to/script.php 

但我想我的script.php持有多個功能不同的時間:

public function ten_mins() 
{ 
    $this->upkeep_function_1(); 
    $this->upkeep_function_2(); 
} 

public function daily() 
{ 
    $this->upkeen_function_3(); 
} 

我想避免使用wget或捲曲,因爲我想避免不必要的TCP設置。

有什麼我可以做的嗎?

回答

4

您可以通過在你的腳本中使用後,他們getopt()和行爲通過命令行參數:

<?php 
$options = getopt("f:hp:"); 
var_dump($options); 

與PHP運行上面的腳本的script.php -fvalue -h將輸出:

array(2) { 
    ["f"]=> 
    string(5) "value" 
    ["h"]=> 
    bool(false) 
} 
+0

打我的5秒:) – 2012-02-22 22:39:50

+0

我明白爲什麼「F」之後,它有一個冒號在'getopt()'(這是一個必需的參數,但它爲什麼是'hp:'而不是'h:'額外的'p'是什麼? – hohner 2012-02-22 22:50:03

+1

@Jamie,'php script.php -fvalue -pyetanothervalue -h'; - ? – TerryE 2012-02-22 23:41:04

1

如何獲取當前日期和時間,然後根據該函數調用相應的函數,或許使用switch命令?

1

將你的腳本分成幾個文件或者用命令行選項-r內聯執行一些代碼。這裏是link

2
10 * * * * /usr/bin/php /path/to/script.php ten_mins 

PHP文件...

public function ten_mins() 
{ 
    $this->upkeep_function_1(); 
    $this->upkeep_function_2(); 
} 

public function daily() 
{ 
    $this->upkeen_function_3(); 
} 

$method = end($_SERVER['argv']); 
call_user_func($method); 

事實上,它似乎是您最初的代碼是缺失的部分,你也可以撥打這樣的方法:

call_user_func(array($object, $method)); 
+0

請*不要*這樣做。即使你認爲沒有人會使用它,任意代碼執行仍然可能是有害的,因爲仍然有人是:你。 – 2012-02-22 22:40:26

+1

如果在這方面將它限制在一個類中的方法,它實際上會好一點。 – 2012-02-22 22:42:27

+0

是的。有效點。 – 2012-02-22 22:44:17