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

Jep*_*epf 0 php cron function

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

php /home/name/public_html/file1.php mail1
Run Code Online (Sandbox Code Playgroud)

作为参考,函数代码在下面,当直接从文件调用时可以工作(即,问题似乎与函数本身无关。

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

str*_*dge 6

怕说将您希望调用的函数的名称传递给 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当您 fun 时php file1.php mail1,也就是您的 CRON 工作最终要做的事情时,第一个参数 ( $argv[1]) 是“mail1”,因此将mail1执行 switch 语句中的case,它调用您的mail1函数并向控制台写入一个有用的注释,以便您知道它做到了你的要求。

有用的链接:

希望这可以帮助!

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