我有一个通过 http 读取一个文件的 php 脚本(该文件在另一个域上)。我想每天只阅读一次或两次这个文件,而不是每次刷新网站时都连接到它。 除了使用 cron 之外,还有其他方法吗? 我不想使用 cron,因为我更喜欢在脚本本身中设置这种行为。所以它很灵活,所以我可以在任何地方使用它,而无需每次都设置 cron。谢谢
9 回答
我过去在无法访问 cron 时做过这种事情:
$lastRunLog = '/path/to/lastrun.log';
if (file_exists($lastRunLog)) {
$lastRun = file_get_contents($lastRunLog);
if (time() - $lastRun >= 86400) {
//its been more than a day so run our external file
$cron = file_get_contents('http://example.com/external/file.php');
//update lastrun.log with current time
file_put_contents($lastRunLog, time());
}
}
如果您不能或不想使用 cron 并且仅在访问页面时更新它是可以的。您可以缓存 HTTP 请求的结果,并且仅在缓存超过一天或您选择的任何时间间隔时才在加载它的页面上更新它。
如果您想按时间间隔访问站点,也可以使用 基于 Web 的 Cron 。
您甚至可以使用数据库表 - 结构、id、日期、脚本 url 以及您需要的任何内容非常简单 - 并在每次运行脚本时添加一行。
然后,在运行脚本之前,只需检查您拥有的每一天的行数。
您可以使用Cronjob。然后,您可以通过命令行运行 php 脚本。
php /someplace/somefile.php
如果您每天更新,Cronjob 将如下所示。
0 0 * 0 0 php /someplace/somefile.php
由于您明确声明您不想使用 cron,因此执行此操作的唯一其他方法(没有类似于 cron 的东西)是将您的脚本设置为守护程序。但是,除非您真的需要守护程序提供的灵活性,否则 cron 会更容易和更简单。
这是一个守护进程演练。
如果您使用的是带有 systemd 的 Linux 发行版:
我需要安排基于年度的作业,独立于应用程序(以防系统重新启动或类似情况),并且有人建议我使用systemd Timers。它上面的 Arch Wiki 页面提供了一些示例。
如果您在 *nix 环境中,则可以使用cron 作业
cron 有什么问题?
cron 有几个选择 - 您的 php 可以由命令行 PHP 解释器调用,或者您可以使用 wget 或 fetch 或等效方法在服务器上调用您的 PHP。
通常,PHP 从 Web 服务器的上下文中运行对其执行时间有时间限制,因此通常您不能设置“后台”PHP 线程来“稍后”执行操作。