如何仅在每月的第一天执行功能/任务


How to perform a function/task on the first day of the month only?

我需要执行一段代码只在每个月的第一天执行一次。为简单起见,假设我想回显一个字符串。在内置PHP函数的帮助下,确定一个月的第一天/最后一天,以及当前月/下个月是什么,这很简单。

我最初的行动计划是将当前月和下个月存储在某个变量中。当新的一个月的第一天到来时,才执行echo

我的问题在于,首先,我找不到一种方法来实际存储这些变量(类似于将它们作为常量),以便我能够比较它们。

为什么不直接做一个cron job呢?每月任务的模式为:

0 0 1 * *

不需要持久化值或执行日期逻辑(特别是如果"变量"指的是应用程序本身的某些东西,如果它不是某种服务/守护进程,那么它可能不会/不应该24/7运行,比如cron),调度系统是专门为您的需要而设计的。(如果你不是Unix/Linux/etc。其他系统有其他调度器。我假设是Linux,因为这在PHP中最常见)

如果cron不能解决问题,您可以将变量存储在文本文件中。

在文件中存储变量:

$file = '/path/to/text/file.txt';
$openfile = fopen($file, 'w');
fwrite($openfile, $myvariable);
fclose($openfile);

从文件中读取变量:

$file = '/path/to/text/file.txt';
$openfile = fopen($file, 'r');
$myvariable = fread($openfile, filesize($file));
fclose($openfile);

查看文档了解更多细节。如果您正在存储一个数组,您将希望在写入文件之前对其进行序列化,并在从文件读取后进行反序列化。