Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка по времени 
:(
    Опции темы
sugee
Дата 17.2.2006, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



В одно из полей таблицы записываются даты в формате UTC, то есть в таком виде [02/Feb/2006:11:29:49 +0300].
Точнее говоря само поле у меня сейчас имеет тип text, я с этим ещё не определился.
При выводе нужно будет сортировать записи по времени.
Может лучше записывать время в базу данных в формате datetime, тогда не будет проблем с сортировкой, но как перевести его в этот формат?


PM MAIL   Вверх
Нурик Сакура
Дата 17.2.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: 2
Всего: 2



Как я у себя делал:

в таблице есть поле Created формата DATETIME

заносится время вот так:
Код

$Query = "insert into YourTableName (Created) values (" . NOW() . "); ";


выводится:
Код

$dateToUse = Date("U");
$Query = "select Created from YourTableName order by Created asc /* (или desc) */ ";

while(условие)
{
    print("Сообщение №какой-то добавлено ({$row['Created']}) кем-то там\n");
}


Это сообщение отредактировал(а) Nurik - 17.2.2006, 20:58
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
sugee
Дата 17.2.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Nurik, я перечитал свой пост, там действительно не совсем ясно о чём речь идёт. Мне не текущее время нужно, я читаю записи из файла(лог Apache) и заношу их базу данных. Потом надо будет выводить записи отсортированные по времени.
В чем собственно и вопрос: как сортировать записи по времени записанному в таком формате [02/Feb/2006:11:29:49 +0300].
PM MAIL   Вверх
Нурик Сакура
Дата 17.2.2006, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: 2
Всего: 2



Попробуй так:

Код

$Query = "select YourFieldName from YourTableName order by Created asc /* (или desc) */ ";


Это сообщение отредактировал(а) Nurik - 17.2.2006, 20:57
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
sugee
Дата 17.2.2006, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Nurik, если бы всё было так просто я бы не спрашивал.
Посмотри на формат записи, что такое с точки зрения SQL(или PHP)
Feb или Jan? Просто набор символов...
Нужно привести дату в человеческий формат, который можно сортировать, например datetime.
PM MAIL   Вверх
Нурик Сакура
Дата 17.2.2006, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: 2
Всего: 2



Хех, даже не знаю. Только что пересмотрел учебник по ПХП (прошу не смеятся, я токо учусь), там есть такой вариант, как strtotime, но такой формат, как у тебя он не поддерживает, увы...
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
sugee
Дата 17.2.2006, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Нет в принципе функцию перевода в datetime можно написать самому,
но неужели других способов нет?
Ведь эту функцию придется применять к каждой строке файла, а их у меня 25 тысяч, я ещё в скрипте регулярку ипользую, это сколько ж придется ждать пока этот скрипт что-то выдаст?



Это сообщение отредактировал(а) sugee - 18.2.2006, 12:39
PM MAIL   Вверх
Нурик Сакура
Дата 17.2.2006, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: 2
Всего: 2



Скрипт будет явно пахать долго. А насчет уже готовых скриптов обработки логов Апача - то я сомневаюсь, что кто-то это делал. Ты в Инете не пытался найти?
Добавлено @ 22:28
Я, конечно, понимаю, что готовое решение куда хуже, чем собственное. Но если ты нормально разбираешься - то ты сможешь найти то, что тебе нужно. Надеюсь, что оно подойдет.

Apache logfile monitor
Сайт автора: http://www.maryan.com.ua/?language=rus
Описание: http://www.maryan.com.ua/?action=log
Демо: http://www.maryan.com.ua/logs/log.php
Качать: http://www.maryan.com.ua/maryanlog.zip
Бесплатный
PHP+MySQL

Цитата

PHP-скрипт дает возможность получения практически любого отчета о посещаемости Вашего сайта, анализируя стандартный log файл сервера Apache. Возможности отчетов: по хостам посетителей, по рефферам (откуда зашли) и их серверам отдельно, по UserAgent, по вашим страницам и тд. Возможность конструировать собственный отчет.

Добавлено @ 22:36
Или вот, но я не уверен, на ПХП ли оно: Webaliser

Это сообщение отредактировал(а) Nurik - 17.2.2006, 22:28
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
sugee
Дата 18.2.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Только что провёл эксперимент:
Код

date("Y-m-d H:i:s","25/Dec/2005:04:12:17"); 


Результат такой: 1970-01-01 03:00:25
PM MAIL   Вверх
Нурик Сакура
Дата 18.2.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Почти японец...
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 17.12.2004
Где: Украина, Киев

Репутация: 2
Всего: 2



Короче, как я понял, тебе нужно преобразовать дату, получаемую из логов, и уже потом с ней работать.
--------------------
- Приказы не обсуждаются!- Не объясняются и не выполняются. (с) фанфик на Hellsing
PM MAIL   Вверх
sugee
Дата 18.2.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Цитата(sugee @ 17.2.2006, 21:20 Найти цитируемый пост)
что такое с точки зрения SQL(или PHP)
Feb или Jan? Просто набор символов...
Кстати, это я погорячился. smile

Это сообщение отредактировал(а) sugee - 18.2.2006, 12:37
PM MAIL   Вверх
sugee
Дата 18.2.2006, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Цитата(Nurik @ 17.2.2006, 20:57 Найти цитируемый пост)
Попробуй так:


код PHP
1:

$Query = "select YourFieldName from YourTableName order by Created asc /* (или desc) */ ";


Вообще-то именно так, так что мой топ в принципе лишён всякого смысла.

Nurik, держи плюс!
PM MAIL   Вверх
-=Ustas=-
Дата 18.2.2006, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



sugee, ну зачем же сразу так отчаиваться?!
Во-первых, хранить дату надо в Unix timestamp, т.к. с ней можно вытворять, что только душе угодно.
Во-вторых, у тебя в этой строке (02/Feb/2006:11:29:49 +0300) есть абсолютно всё, что нужно. Бери, разбирай эту строчку, приводи её к timestamp, и записывай в БД.

В чем собсна проблема?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
IZ@TOP
Дата 18.2.2006, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Цитата(-=Ustas=- @ 18.2.2006, 14:15 Найти цитируемый пост)
sugee, ну зачем же сразу так отчаиваться?!
Во-первых, хранить дату надо в Unix timestamp, т.к. с ней можно вытворять, что только душе угодно.

Верно. А перевести дату в timestamp, думаю получится при помощи этой функции http://ru2.php.net/strtotime

sugee, и не забудь на дату поставить индекс.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
sugee
Дата 18.2.2006, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Код

$f=file("log_file");
 
$exp='/^(\S+)\s+(\S+)\s+(\S+)\s+\[(.*)\]\s+"(.*)"\s+(\S+)\s+(\S+)$/';

for($i=0; $i<$all=sizeof($f); $i++) {

preg_match($exp, $f[$i], $pocket);
list($full, $host, $usid, $us, $time, $req, $res, $qbyte)=$pocket;

if($res == 200) {

$timestamp=strtotime($time);

mysql_query("INSERT INTO `logs` VALUES('','{$host}','{$usid}','{$us}','{$timestamp}','{$req}','{$res}','{$qbyte}')");


В базу записывается вот что: 0000-00-00 00:00:00
Цитата(-=Ustas=- @ 18.2.2006, 13:15 Найти цитируемый пост)
sugee, ну зачем же сразу так отчаиваться?!
Да я как раз подумал было что моя проблема решена, точнее говоря что её и не было. Думал я так до тех пор пока не встал вопрос о сортировке по дням.

PM MAIL   Вверх
sugee
Дата 18.2.2006, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Вместо strtotime попробовал mktime.
Вроде получился самый что ни на есть timestamp,
а в базе всё равно нули smile
Что я не так делаю?

Код

$time=str_replace("[", "", $time);
$time=str_replace("]", "", $time);
$time=str_replace(" +0300", "", $time);
$d=substr($time, 0, 2)."<br>";
$M=substr($time, 3, 3)."<br>";
$Y=substr($time, 7, 4)."<br>";

echo $timestamp=mktime($d,$M,$Y)."<br>"; //выводит что-то вроде 1140222806

mysql_query("INSERT INTO `logs` VALUES
('','{$host}','{$usid}','{$us}','{$timestamp}','{$req}','{$res}','{$qbyte}')");
//записывает всё равно 0000-00-00 00:00:00

PM MAIL   Вверх
sugee
Дата 18.2.2006, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



А, ну <br>-ы я убрал, всё равно в таблице нули. smile
А сам timestamp выводится.
Код

$time=str_replace("[", "", $time);
$time=str_replace("]", "", $time);
$time=str_replace(" +0300", "", $time);
$d=substr($time, 0, 2);
$M=substr($time, 3, 3);
$Y=substr($time, 7, 4);

echo $timestamp=mktime($d,$M,$Y); //выводит что-то вроде 1140222806

mysql_query("INSERT INTO `logs` VALUES
('','{$host}','{$usid}','{$us}','{$timestamp}','{$req}','{$res}','{$qbyte}')");
//записывает всё равно 0000-00-00 00:00:00

PM MAIL   Вверх
sugee
Дата 18.2.2006, 21:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



smile
Код

$timestamp=mktime($M,$d,$Y);
$time=date("Y-m-d", $timestamp);

mysql_query("INSERT INTO `logs` VALUES('','{$host}','{$usid}','{$us}','{$time}','{$req}','{$res}','{$qbyte}')");

А поле datetime, теперь все правильно. Почему только Y-m-d - просто из-за парсинга строки скрипт дико тормозит!
PM MAIL   Вверх
sugee
Дата 18.2.2006, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Рано радовался, у меня во всех строках теперь одинаковая дата стоит.
И если поле timestamp - то же самое.
Научите как правильно писать в поле типа timestamp smile
PM MAIL   Вверх
sugee
Дата 19.2.2006, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Код

$timestamp=mktime(0,0,0,$M,$d,$Y);

$time=date("M-d-Y", $timestamp)."<br>";


Вот так правильно отображается только число, год почему-то всегда меньше на единицу,
вместо 2005-го 2004-й и т.д. Месяц везде декабрь, хотя есть ещё январь и февраль.
PM MAIL   Вверх
-=Ustas=-
Дата 19.2.2006, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



Тип поля в бд под timestamp лучше делать целочисленный.
Слушай, если ты беспокоишься о том, что скрипт слишком долго выполняется, то есть еще одно решение, более простое. Насколько я знаю, Апач пишет всегда в конец файла, вот это тебе и будет уже самая что нинаесть сортировка по дате. Выхватываешь всё по-строчно из этого файла и пишешь в БД, для сортировки делаешь ORDER BY id DESC, и все твои проблемы...


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
sugee
Дата 19.2.2006, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Да, это уже предлагали
http://forum.vingrad.ru/index.php?showtopi...st&p=648474
Если нужна просто сортировка по времени, то этого достаточно,
но мне ещё нужно будет выводить статистику за последние десять дней. Сколько за день было хостов, хитов и тому подобное.

PM MAIL   Вверх
sugee
Дата 19.2.2006, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Я поменял тип поля на INT(32) и пишу туда дату непосредственно в формате timestamp
Код

$timestamp=mktime(0,0,0,$M,$d,$Y);

mysql_query("INSERT INTO `logs` VALUES(
'','{$host}','{$usid}','{$us}',
'{$timestamp}','{$req}','{$res}','{$qbyte}')");


Вывожу так
Код

$q = mysql_query
("SELECT DISTINCT `time`,`host` FROM `logs` ORDER BY `time` DESС LIMIT 150");
  echo "<table border='1'>
 <tr bgcolor='silver'>
 <td>&nbsp</td><td>Дата</td><td>Кол-во хостов</td><td>Кол-во хитов</td></tr>";
 $i=1;

while($r=mysql_fetch_assoc($q)) {
$q1 = mysql_query("
SELECT COUNT(*) FROM `logs` WHERE `time`='{$r['time']}'");
$q2 = mysql_query
("SELECT DISTINCT COUNT(`host`) FROM `logs` WHERE `time`='{$r['time']}'");

echo "<tr><td>".$i."</td><td>".date("M-d-Y", $r['time'])."</td>
<td>".mysql_result($q2, 0)."</td>
<td>".mysql_result($q1, 0)."</td></tr>";

 $i++;
}

echo "</table>";
Формат в котором выводятся даты верный, но сами даты неправильные. Откуда то 2004 год появился, хотя в логе его небыло.

Это сообщение отредактировал(а) sugee - 19.2.2006, 10:35
PM MAIL   Вверх
-=Ustas=-
Дата 19.2.2006, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



Вот тебе набросал как примерчик, для получения timestamp в твоем случае:
Код

<?php

function MakeTime($string)
{
    $month = array("Jan" => 1,
                   "Feb" => 2,
                   "Mar" => 3,
                   "Apr" => 4,
                   "May" => 5,
                   "Jun" => 6,
                   "Jul" => 7,
                   "Aug" => 8,
                   "Sep" => 9,
                   "Oct" => 10,
                   "Nov" => 11,
                   "Dec" => 12);
    preg_match("#(.*)\/(.*)\/(.*):(.*):(.*):(.*)\s#U", $string, $matches);
    $time = mktime($matches[4], $matches[5], $matches[6], $month[$matches[2]], $matches[1], $matches[3]);

    return $time;
}

$string = "127.0.0.1 - - [08/Dec/2005:00:00:30 +0300] \"GET /install/install.php HTTP/1.1\" 200 61";
preg_match("#\[(.*)\]#U", $string, $matches);
echo $string."<br>";
echo MakeTime($matches[1])."<br>";

echo "<br><br><br>";

echo date("d.m.Y // H:i:s", MakeTime($matches[1]));

?>


Хотя...может можно как-то и оптимизировать, просто всё на скорую руку... smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
IZ@TOP
Дата 19.2.2006, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



Код

$stmp = strtotime(
    str_replace(array('/', ':'), '', '25/Dec/2005:04:12:17')
);

echo date("d/m/y H:i:s", $stmp);

Думаю это будет побыстрее прегов.

Пишем $stmp в базу в поле типа int(10). Ставим на него индексы (в связке с другими полями, если те учавствуют в отборе).


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
sugee
Дата 19.2.2006, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



-=Ustas=-, я применил в своей фунции твой вариант в сочетании с вариантом IZ@TOP.
Вроде не перепутал ничего... Время получается 01.01.1970 // 03:00:01
Начало эпохи Unix если не ошибаюсь smile


Код

function MakeTime($string)
{
  $time = strtotime(str_replace(array('/', ':'), '', $string));

    return $time;
}

function LoadLogFile() {
$f=file("log_file/log_file");
 

for($i=0; $i<$all=sizeof($f); $i++) {
$exp='/^(\S+)\s+(\S+)\s+(\S+)\s+\[(.*)\]\s+"(.*)"\s+(\S+)\s+(\S+)$/';
preg_match($exp, $f[$i], $pocket);
list($full, $host, $usid, $us, $time, $req, $res, $qbyte)=$pocket;

preg_match("#\[(.*)\]#U", $f[$i], $matches);
MakeTime($matches[1]);

mysql_query(
"INSERT INTO `logs` VALUES('','{$host}','{$usid}','{$us}','{$time}','{$req}','{$res}','{$qbyte}')");

  }

return $all;
}

Добавлено @ 19:27
Поле int(10)
PM MAIL   Вверх
-=Ustas=-
Дата 20.2.2006, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



sugee, в варианте Изотопа маленькое упущение, которое ты должен был заметить, прочитав про формат входных данных функции strtotime() ;) Попробуй так:
Код

$stmp = strtotime(str_replace(array('/', ':'), ' ', '25/Dec/2005:04:12:17'));



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
sugee
Дата 20.2.2006, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



Нет, то же самое получается.
PM MAIL   Вверх
-=Ustas=-
Дата 20.2.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



хм... действительно. Ну попробуй тогда полностью мою функцию применить, хоть и немного дольше обрабатывает, на зато наверняка smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
sugee
Дата 20.2.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



А вот теперь происходит очень интересная вещь.
date() перед записью в базу даёт правильный результат, а вот из базы выводится все то же 01/01/70 03:00:00.

Код

function MakeTime($string)
{
    $month = array("Jan" => 1,
                   "Feb" => 2,
                   "Mar" => 3,
                   "Apr" => 4,
                   "May" => 5,
                   "Jun" => 6,
                   "Jul" => 7,
                   "Aug" => 8,
                   "Sep" => 9,
                   "Oct" => 10,
                   "Nov" => 11,
                   "Dec" => 12);
    preg_match("#(.*)\/(.*)\/(.*):(.*):(.*):(.*)\s#U", $string, $matches);
    $time = mktime($matches[4], $matches[5], $matches[6], $month[$matches[2]], $matches[1], $matches[3]);

    return $time;
}

function LoadLogFile() {
$f=file("log_file/log_file");
 
for($i=0; $i<$all=sizeof($f)/100; $i++) {
$exp='/^(\S+)\s+(\S+)\s+(\S+)\s+\[(.*)\]\s+"(.*)"\s+(\S+)\s+(\S+)$/';
preg_match($exp, $f[$i], $pocket);
list($full, $host, $usid, $us, $_time, $req, $res, $qbyte)=$pocket;

if($res == 200) {
preg_match("#\[(.*)\]#U", $f[$i], $matches);

MakeTime($matches[1]);

echo date("d.m.Y // H:i:s", MakeTime($matches[1]))."<br>"; //всё правильно выводит

mysql_query("INSERT INTO `logs` VALUES('','{$host}','{$usid}','{$us}','{$time}','{$req}','{$res}','{$qbyte}')");
      }
  }


return $all;

}

PM MAIL   Вверх
-=Ustas=-
Дата 20.2.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



sugee, здрасте, а кто будет переменной $time значение присваивать?!
Код

function MakeTime($string)
{
    $month = array("Jan" => 1,
                   "Feb" => 2,
                   "Mar" => 3,
                   "Apr" => 4,
                   "May" => 5,
                   "Jun" => 6,
                   "Jul" => 7,
                   "Aug" => 8,
                   "Sep" => 9,
                   "Oct" => 10,
                   "Nov" => 11,
                   "Dec" => 12);
    preg_match("#(.*)\/(.*)\/(.*):(.*):(.*):(.*)\s#U", $string, $matches);
    $time = mktime($matches[4], $matches[5], $matches[6], $month[$matches[2]], $matches[1], $matches[3]);

    return $time;
}

function LoadLogFile() {
$f=file("log_file/log_file");
 
for($i=0; $i<$all=sizeof($f)/100; $i++) {
$exp='/^(\S+)\s+(\S+)\s+(\S+)\s+\[(.*)\]\s+"(.*)"\s+(\S+)\s+(\S+)$/';
preg_match($exp, $f[$i], $pocket);
list($full, $host, $usid, $us, $_time, $req, $res, $qbyte)=$pocket;

if($res == 200) {
preg_match("#\[(.*)\]#U", $f[$i], $matches);

$time = MakeTime($matches[1]);

echo date("d.m.Y // H:i:s", MakeTime($matches[1]))."<br>"; //всё правильно выводит

mysql_query("INSERT INTO `logs` VALUES('','{$host}','{$usid}','{$us}','{$time}','{$req}','{$res}','{$qbyte}')");
      }
  }


return $all;

}



--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
sugee
Дата 21.2.2006, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 423
Регистрация: 12.6.2005

Репутация: нет
Всего: 4



smile
Да, можно было бы ещё долго разбираться в тонкостях форматов времени! Теперь всё на месте, только пожалуй функцию MakeTime() я опять приведу к изотоповскому виду.
PM MAIL   Вверх
IZ@TOP
Дата 22.2.2006, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 4
Всего: 73



-=Ustas=-, эй, товарищи, оно работает. Пробел съелся! Я уже везде проверил - везде работает.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
-=Ustas=-
Дата 22.2.2006, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 17
Всего: 69



Цитата(IZ@TOP @ 22.2.2006, 20:48 Найти цитируемый пост)
-=Ustas=-, эй, товарищи, оно работает. Пробел съелся! Я уже везде проверил - везде работает.

Не может такого быть! (Хотя...может только сегодня... smile )
Я только что попробовал, без пробела - вообще дату не хавает, возвращает -1, с пробелом совсем не те года подставляет.
Добавлено @ 21:07
Появилась еще одна особенность, если допустим в такой дате 22/Feb/2006:20:56:11 количество секунд превышает число 37, то всё, дата не переводится в timestamp.
И еще, IZ@TOP, я незнаю как ОНО могло у тебя сработать, у меня такую дату - 22/Feb/2006:20:56:36 перевело как 22 февраля 2036 года smile


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Базы Данных | Следующая тема »


 




[ Время генерации скрипта: 0.0793 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.