php - 使用 cronjob 运行 php 文件中的函数

标签 php function cron

我的 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 脚本将不会自动运行该脚本中的函数。您的脚本文件将需要逻辑来响应传递给它的任何命令行参数,以便正确执行。

假设 file1.php 中定义了几个函数。只是一系列函数定义——函数之外没有代码。如果您在命令行 ($ php file1.php) 上运行该文件,将会发生的情况是 PHP 将加载该文件,解析您的函数,但是由于文件中没有任何内容调用 任何这些函数,脚本都会结束,执行会完成,实际上什么都不会发生。

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

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

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

Contains an array of all the arguments passed to the script when running from the command line.

Note: The first argument $argv[0] is always the name that was used to run the script.

如果您运行 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

关于php - 使用 cronjob 运行 php 文件中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39008763/

相关文章:

php - 如何让PDO更简单

c - 程序突然结束,C 中的 while 循环内有 switch case

Python - 查找字符串中的所有非字母数字字符

c - 函数原型(prototype)声明

php - PHP 中的多线程

cron - 如何以与根 cronjob 不同的用户身份运行命令?

php - 如何将函数/常量绑定(bind)到变量,PHP

php - 根据产品属性条款有条件地应用 WooCommerce 优惠券

php - 如何使用 Drupal `db_select()` 方法转换查询?

cron - 为什么 crontab 不工作?