嗨,我的php非常生疏,我不记得怎么做了。
我有一个脚本,我只想每15分钟拨打一次。我创建了一个名为last_updated的表。我想要做的是在我的脚本顶部有一些代码来查询这个last_updated表,如果 now()减去上次更新的时间大于15分钟,那么运行脚本并将last_updated更新为现在......如果不是不运行脚本。这有意义吗?
现在我知道当我更新last_updated时我需要使用now()要添加一个新的时间戳,但我不知道如何比较现在的db值,看它是否超过15分钟
任何想法
答案 0 :(得分:2)
<?php
$pdo = new PDO('mysql:host=your_host;dbname=your_database', $user, $password, array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));
// query the database. change
$stmt = $pdo->query('SELECT UNIX_TIMESTAMP(last_updated_date) FROM last_updated ORDER BY last_updated_date DESC LIMIT 1');
$lastUpdatedTimestamp = $stmt->fetch(PDO::FETCH_COLUMN);
if ((time() - $lastUpdatedTimestamp) > (60 * 15)) {
touch($file);
// do stuff
}
time()以秒为单位显示当前时间。您应该将60 * 15展开到900,我只是提供了两个数字来说明发生了什么。
此外,文件可能比数据库表更好。看看touch() 功能。它会更改文件的修改时间,或者创建一个空文件,当前时间为mod时间(如果不存在)。您可以使用filemtime()
检查文件模式时间<?php
$lastUpdated = null;
$file = '/path/to/writable/file/with/nothing/in/it';
if (file_exists($file)) {
$lastUpdated = filemtime($lastUpdated);
}
if (!$lastUpdated || (time() - $lastUpdated) > 900) {
touch($file);
// do stuff
}
答案 1 :(得分:1)
您似乎使用MySQL作为DBMS。在这种情况下,如果你想,你可以让MySQL完成大部分工作:
SELECT
pit < Now()-Interval 15 Minute as mustUpdate
FROM
last_updated
WHERE
siteId=?
pit
是您的DateTime字段,siteId
是您在表格中存储多条记录时可能遇到的情况(这对我来说听起来不错)。
结果(如果有siteId=?
的此类记录)包含字段mustUpdate
,其中包含0
或1
,1表示坑的值大于15过去几分钟。