使用cronjob在php文件中运行函数

时间:2016-08-18 01:49:42

标签: php function cron

我的php文件中有一个函数(file1.php)。我正在尝试使用cronjob来调用此函数。我的cron job命令是:

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@email.com';
    if (mail($to, $subject, $msg, $headers)) {
        echo $msg . " sent to " . $to;
    }
}

我是以错误的方式调用函数吗?

2 个答案:

答案 0 :(得分:3)

不敢说将要调用的函数的名称传递给PHP脚本将不会自动运行该脚本中的函数。您的脚本文件需要逻辑来响应传递给它的任何命令行参数才能正确执行。

让我们说file1.php在其中定义了几个函数。只是一系列函数定义 - 函数之外没有代码。如果你在命令行($ php file1.php)上运行该文件,将会发生什么是PHP将加载该文件,解析你的函数,但是因为文件中的任何内容调用任何这些函数,脚本将到达终点,执行将完成,实际上什么都不会发生。

因此,为了执行其中一个函数,脚本需要检查所提供的任何命令行参数,然后做出适当的反应。

在PHP中,$argv变量是一个数组,首先包含运行的文件的名称,然后按顺序包含任何命令行参数。除非用引号括起或正确转义,否则空格用作命令行参数的分隔符。如果命令是通过命令行运行的,则在根范围*中可以使用此变量。

这是PHP对$argv变量的描述:

  

包含从命令行运行时传递给脚本的所有参数的数组。

     

注意:第一个参数$ argv [0]始终是用于运行脚本的名称。

如果您运行php file1.php send mail --dry-run,则$argv变量将显示在此处(以JSON显示):["file1.php", "send", "mail", "--dry-run"]

您可以使用file1.php文件代码的末尾放置$argv变量并采取相应措施。在您的问题中列出的特定情况下,请尝试在文件末尾添加类似的内容:

//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",所以mail1执行switch语句中的case,调用你的mail1函数并向控制台写一个有用的注释,以便你知道它完成了你的要求。

有用的链接:

希望这有帮助!

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

答案 1 :(得分:0)

最好编写一个脚本文件来调用您的函数并返回结果。

通过cron执行该脚本文件时,该函数将被执行并返回结果。