сравнивая временные метки - PullRequest
1 голос
/ 15 августа 2010

Привет, мой php очень ржавый, и я не могу вспомнить, как это сделать.

У меня есть скрипт, который я хочу вызывать каждые 15 минут.Я создал таблицу с именем last_updated.То, что я хочу сделать, это иметь некоторый код в верхней части моего скрипта, который запрашивает эту таблицу last_updated, и если now () минус последнее обновление больше 15 минут, тогда запустите скрипт и также обновите last_updated to now... если это не так, не запускайте скрипт.Имеет ли это смысл?

Теперь я знаю, что когда я обновляю last_updated, мне нужно использовать now (), чтобы добавить новую метку времени, но я не уверен, как выполнить сравнение теперь со значением dbчтобы увидеть больше 15 минут.

Любые идеи

Ответы [ 2 ]

2 голосов
/ 15 августа 2010
<?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 () .Он изменяет время модификации файла или создает пустой файл с текущим временем в качестве времени мода, если оно не существует.Вы можете проверить время модификации файла с помощью 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 голос
/ 15 августа 2010

Вы, похоже, используете MySQL в качестве СУБД. В этом случае и если вы хотите, вы можете позволить MySQL выполнять большую часть работы:

SELECT
  pit < Now()-Interval 15 Minute as mustUpdate
FROM
  last_updated
WHERE
  siteId=?

pit - это ваше поле DateTime, а siteId - это какое-то условие, которое может возникнуть, если вы храните в таблице более одной записи (для меня это хорошая идея).
Результат (если есть такая запись с siteId=?) содержит поле mustUpdate, которое либо содержит 0 или 1, 1, что указывает на то, что значение pit больше 15 минут в прошлом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...