我已经为您概述了一个非常基本的示例,说明如何使用会话来确保您的脚本每次访问(每个用户)只运行一次。这里的关键点是,如果有超过 1 个用户使用系统,脚本仍然会运行不止一次。
为了解决这个问题,我只需使用您的本地数据库来跟踪脚本上次运行的时间。所以你可以在你的数据库中有一个日期时间列来跟踪上次“运行”的执行时间。
- 因此,在您的 PHP 代码中(代替检查 $_SESSION)您将查询数据库以检索日期时间值
- 获得最后一次运行日期/时间后,您将检查当前日期/时间是否超过允许的“更新时间”(例如 24 小时)
- 如果时间超过了您分配的“更新时间”,例如 25 小时,代码将运行,您会将日期时间更新为 now()
- 如果时间在您分配的时间之内,则不会发生任何事情,不会更新数据库并且您的脚本将不会运行。
- 重复 3 - 4。
上述方法将使用户数量无关紧要,因为所有检查都将针对中央数据集(即您的数据库)执行。它也可能会更健壮一些,因为它将独立于浏览器和用户。
无论如何,这是一个会话(每个用户)方法:
<?php
/*
* Set PHP sessions to suit:
*
* session.gc_maxlifetime is the number of seconds after which the data
* will be seen as garbage and cleaned up (session life) -
*
* Set to 86400 to in theory make the session last 24 hours - adjust this
* number to suit.
*
* If this doesn't work you may have to try and adjust the php session lifetime
* in either the php.ini file directly or htaccess file.
*
*/
ini_set('session.gc_maxlifetime',86400);
/*
* not strictly neccessary as this is default setting (but just to make sure)
* This will keep the cookie alive (the link to your session) until the user
* closes their browser.
*
* You could set it to > 86400 if you want that extra bit of certainity that
* the session will get renewed @ 24 hrs / the time you wanted to.
*/
ini_set('session.cookie_lifetime',0);
// Start PHP session
session_start();
// Check if the session is empty / exists (which it will be on first page entry)
if ( empty($_SESSION['hasVisited']) ) {
/*
* Add your ETL script logic here:
*
* This will only run on the first visit to the site
*/
}
// Now set the session as the scripts have run once
$_SESSION['hasVisited'] = true;
// Continue on with your app...................................................
?>
让我知道我是否错过了您尝试做的事情,或者您想对任何事情进行进一步解释?