【问题标题】:Use cronjob to run function in php file使用 cronjob 在 php 文件中运行函数
【发布时间】:2020-01-21 17:41:05
【问题描述】:

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

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;
    }
}

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

【问题讨论】:

  • 我会使用 php.net/manual/en/reserved.variables.argv.php 并根据传入的值使用 PHP 脚本执行函数。例如if($argv[1] == 'mail1') { mail1();} 不确定您是如何获取该函数的参数值的...
  • 您假设将函数名放在文件名之后会调用该函数。 php 文档中没有任何内容描述此功能。

标签: php function cron


【解决方案1】:

恐怕将您希望调用的函数的名称传递给 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”,因此 switch 语句中的 mail1 案例被执行,它调用您的mail1 函数并向控制台写入一个有用的注释,以便您知道它完成了您的要求。

有用的链接:

希望这会有所帮助!

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-06-28
      • 2013-10-16
      • 2011-08-11
      • 2013-01-26
      • 2015-08-22
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 2017-09-25
      相关资源
      最近更新 更多