[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Привязка очищения файла к началу новых суток..
brdm
Пытаюсь написать счетчик популярности страниц сайта.

Счетчик написал на текстовом файле. Но не может-же он считать постоянно.

Как привязать момент очищения файла такой статистики (например stat.dat)

ко времени смены очередных суток при заходе очередного пользователя например после 00.00 часов по Москве?

Спасибо.



Спустя 8 минут, 34 секунды (7.02.2009 - 16:54) LoneCat написал(а):
Легко! tongue.gif
PHP
// Читаем информацию о файле в массив
$aStat = stat('stat.dat');
// Получаем из массива время последней модификации файла
$iTime = $aStat['mtime'];
// Из полученного и текущего времени вычленяем дату
// Если даты не совпадают - значит с момента модификации дата изменилась
// Иже смена суток уже прошла, соот-но очищаем файл.
if(date('d', $iTime) !== date('d')) {
  // Очищение файла
}

Спустя 1 час, 6 минут, 18 секунд (7.02.2009 - 18:00) brdm написал(а):
Большое спасибо.

Сразу не заметил "!==" Нужно !=
Или я не прав?

Хотя это до конца не понял.

// Из полученного и текущего времени вычленяем дату
// Если даты не совпадают - значит с момента модификации дата изменилась
// Иже смена суток уже прошла, соот-но очищаем файл.
if(date('d', $iTime) !== date('d')) {
// Очищение файла
}

date('d') - это понятно.
А как работает
date('d', $iTime)?

Если например записать $s = date('d', $iTime), то в $s получится просто дата, какое-бы ни было $iTime.

Хотя... виноват. Понял. Работает. Если записать date('H', $iTime) то получу время последней модификации файла.

Еще раз, спасибо.

Спустя 12 минут, 14 секунд (7.02.2009 - 18:12) LoneCat написал(а):
Ну на самом деле в этом случае разницы между != и !== нет, это больше личное предпочтение ставить везде операторы строгого сравнения smile.gif а вообще:
!= - нестрогое сравнение значений двух переменных, без учета типов данных, тоесть сравнения числа 12 и строки '12' выдаст true
!== - строгое сравнение, с учетом типов данных, сравнение числа 12 и строки '12' выдаст false, как и например сравнение целого 12 и дроби 12.0

Насчет date - эта функция принимает два аргумента, но второй просто опциональный, если второй аргумент не указан - берется текущее время, на момент исполнения скрипта, если указан аргумент - берется время указанное в аргументе, тоесть date('d') выдаст текущую дату, а date('d', $iTime) - дату последнего изменения файла.
Второй аргумент указывается в формате Unix Timestamp, это количество секунд, прошедших с начала эпохи Unix smile.gif на самом деле smile.gif начало этой удивительной эпохи считается дата 1 января 1970 года.

Цитата

Если например записать $s = date('d', $iTime), то в $s получится просто дата, какое-бы ни было $iTime.

Попробуйте echo date('d', 0); - результат должен получится 1 (первое число)

Спустя 3 минуты, 3 секунды (7.02.2009 - 18:15) Семён написал(а):
Цитата
!= - нестрогое сравнение значений двух переменных, без учета типов данных, тоесть сравнения числа 12 и строки '12' выдаст true
!== - строгое сравнение, с учетом типов данных, сравнение числа 12 и строки '12' выдаст false, как и например сравнение целого 12 и дроби 12.0


хм... не знал - спс.

Спустя 2 минуты, 52 секунды (7.02.2009 - 18:18) brdm написал(а):
Да, все правильно. Работает.

Спасибо.


Спустя 5 минут, 55 секунд (7.02.2009 - 18:24) LoneCat написал(а):
Цитата

!= - нестрогое сравнение значений двух переменных, без учета типов данных, тоесть сравнения числа 12 и строки '12' выдаст true
!== - строгое сравнение, с учетом типов данных, сравнение числа 12 и строки '12' выдаст false, как и например сравнение целого 12 и дроби 12.0

Ну и тут я пропарился малость, наоборот все, так как это сравнение на НЕсоответстие, а я написал про сравнение на соот-ие smile.gif Должно быть так:

== - нестрогое сравнение значений двух переменных, без учета типов данных, тоесть сравнения числа 12 и строки '12' выдаст true
=== - строгое сравнение, с учетом типов данных, сравнение числа 12 и строки '12' выдаст false, как и например сравнение целого 12 и дроби 12.0

Ну а для != и !== соот-но тоже самое, но вместо true они возвращают false, а вместо false - true.


Спустя 12 минут, 15 секунд (7.02.2009 - 18:36) brdm написал(а):
Если можно еще вопрос.

Как можно быстро очистить файл без его удаления?

Хотя.. нет. Это уже лишнее. Лучше удалить unlink();

Потом он всеравно заново создастся.

Спустя 16 минут, 3 секунды (7.02.2009 - 18:52) LoneCat написал(а):
Цитата (brdm @ 7.02.2009 - 19:36)
Если можно еще вопрос.

Как можно быстро очистить файл без его удаления?

PHP
$rFile fopen('stat.dat''w'); // Открываем файл
if($rFile !== false) { // Если файл был открыт
  
fclose($rFile); // Закрываем файл :P
}

Цитата

'w' Open for writing only; place the file pointer at the beginning of the file and truncate the file to zero length. If the file does not exist, attempt to create it.

Перевод:
'w' - открывает файл только для записи; устанавливает указатель на начало файла и устанавливает длину файла в 0. Если файл не существует - пытается его создать.

Спустя 8 минут, 10 секунд (7.02.2009 - 19:00) brdm написал(а):
Да, именно "w".

Спасибо.


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.