2016-08-18 40 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函数并向控制台写入有用的注释,以便您知道它是按照您的要求提供的。

相关链接:

希望这有助于!

*根范围我的意思是它不是全局的,所以你不能在函数或类中访问它,除非你将它传递给它们,但在它们之外你有权访问它。在我上面的代码示例中,由于代码位于函数或类之外,因此它可以访问。