2016-08-18 99 views
-1

我在我的php文件(file1.php)中有一個函數。我正在嘗試使用cronjob來調用這個函數。我的cron作業的命令是:使用cronjob在php文件中運行函數

php /home/name/public_html/file1.php mail1 

僅供參考,函數代碼如下,當從文件中直接調用工作(即,這個問題似乎並不與功能本身

function mail1($runTotal, $accountArray){ 
    $to = $accountArray[0]['phoneNumber'] . '@vzwpix.com'; 
    $subject = ''; 
    $msg = "You have spent $" . $runTotal . " of $1,750 since the beginning of the month.;; 
    $msg = wordwrap($msg); 
    $headers = 'From: [email protected]'; 
    if (mail($to, $subject, $msg, $headers)) { 
     echo $msg . " sent to " . $to; 
    } 
} 

我是否以錯誤的方式調用函數?

+0

我會使用http://php.net/manual/en/reserved.variables.argv.php並根據傳入的值使用PHP腳本執行該函數。例如'if($ argv [1] =='mail1'){mail1();}'不知道你是如何得到該函數的參數值,雖然... – chris85

+0

我猜它不像我解釋的那麼容易。你能不能更詳細地解釋一下那些瞭解奶奶和奶奶的人? – Jepf

+0

您正在做一個假設,即將該函數的名稱放在文件名後面將調用該函數。在描述這種能力的php文檔中沒有任何東西。 –

回答

1

害怕說你要調用的函數名稱不會自動運行在PHP腳本中,你的腳本文件將需要邏輯來響應在ord中傳遞給它的任何命令行參數呃正確執行。

比方說file1.php有幾個定義在其中的函數。只是一系列函數定義 - 函數外面沒有代碼。如果你在命令行($ php file1.php)上運行該文件,PHP將會加載該文件,解析你的函數,但由於文件中沒有任何函數調用任何這些函數,該腳本將達到結束,執行會完成,而實際上沒有發生任何事情。

所以爲了執行其中一個函數,腳本需要檢查提供的任何命令行參數,然後做出適當的反應。

在PHP中,變量是一個數組,它首先包含運行的文件的名稱,然後依次包含任何命令行參數。除非用引號括起來或正確轉義,否則,空格可作爲命令行參數的分隔符。如果命令是通過命令行運行的,則此變量在根作用域*中可用。

這裏的變量的PHP的描述:

包含在命令行中運行時,傳遞給腳本的所有參數數組。

注意:第一個參數$ argv [0]始終是用來運行腳本的名稱。

如果運行php file1.php send mail --dry-run,那麼變量會(此處顯示的JSON):["file1.php", "send", "mail", "--dry-run"]

你可以用這個做什麼,你可以在你的file1.php文件代碼的最後找到變量並採取適當的操作。在你的問題中列出的特定情況下,嘗試添加像這樣到文件的末尾:

//If we have a command line argument 
if (!empty($argv[1])) { 
    switch ($argv[1]) { 
     case "mail1": 
      mail1(); //Call our mail() function 
      echo "\n\nCalled function mail1()\n\n"; //Print what we did to the console 
      break; 
    } 
} 

現在,當你的樂趣php file1.php mail1,這是最終你的cron作業是幹什麼的,是第一個參數($argv[1])是「mail1」,因此執行switch語句中的mail1大小寫,該函數會調用mail1函數並向控制檯寫入有用的註釋,以便您知道它是按照您的要求提供的。

相關鏈接:

希望這有助於!

*根範圍我的意思是它不是全局的,所以你不能在函數或類中訪問它,除非你將它傳遞給它們,但在它們之外你有權訪問它。在我上面的代碼示例中,由於代碼位於函數或類之外,因此它可以訪問。