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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чистка директории по времени и значению из базы 
:(
    Опции темы
Jops
Дата 5.3.2013, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте уважаемые!
Помогите с решением или может, кто уже делал что-то подобное.
Есть директория вида /vlc/ready/, внутри которой идёт формирование:
/vlc/ready/cam1/03-03-2013 (сколь угодно большое кол-во папок)/…
/vlc/ready/cam2/01-03-2013 (по аналогии)/…
и т.д.
/vlc/ready/название камеры/дата создания архива записей/сами записи
Есть данные в базе вида: cam1 (название папки в директории /vlc/ready/); 10 или любое другое число (через это количество дней, начиная с момента создания папки 00-00-0000, удалить её).
Выборка типа: SELECT cam_alias, delete_dir FROM cam_list и выдаёт «массив» значений
И всё действие в следующем: Берём из базы название камеры (соответственно папки) и число (кол-во дней); прёмся в директорию и смотрим «А не устарели ли папки в cam1, например?». Если устарели, удаляем, если нет, то идём в cam2 и т.д.
Сам скрипт будет запускаться в cron.
Может, кто ваял уже что-то подобное или просто очертить, как правильно сделать. Вроде бы и ни чего такого сложного, но не идёт и всё в мозг нужные действия. Выборка, получение, а как с числом и папками разобраться, ну ни как.
Благодарю всех, кто потратит своё время на данный вопрос
P.S.: Имеется ли на PHP модуль или что либо подобное, для подкраски выводимых действий в консоли? Аля PERL

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


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Хотелось бы видеть еще дамп таблицы, наверное, потому что не понятно зачем здесь
Цитата(Jops @  5.3.2013,  14:06 Найти цитируемый пост)
Берём из базы название камеры (соответственно папки) и число (кол-во дней)

число дней, а не timestamp.

Имеется ввиду, что в БД хранится кол-во дней, которое должна хранится камера? Тогда там, берем текущую дату и для каждой камеры отнимаем из нее N дней, указанных в БД (например, гуглим по DateDiff). Получаем массив дат вида camera => date. Далее, бежим по директориям и по датам, проверяем - если нужно удаляем, примерно так:
Код

$sqlResult = array(
    'cam1' => '59',
    'cam2' => '28',
    'cam3' => '3',
);

$now = '2013-03-05';
...
// прогоняем в цикле DateDiff и получаем массив примерно такого вида:
...
$dateDiffs = array(
    'cam1' => '2013-01-01',
    'cam2' => '2013-02-05',
    'cam3' => '2013-03-02',
);
...
// 
...
foreach ($dirs as $cam) {
    foreach ($cam as $date) {
        // тут сравниваем даты
        if ($date < $dateDiffs[ $cam ]) {
            rmdir( realpath('/vlc/ready/'.$cam.'/'.$date) );
        }
    }
}


Это псевдокод, сама реализация за тобой.

Это сообщение отредактировал(а) Aliance - 5.3.2013, 13:21
PM MAIL WWW ICQ Skype   Вверх
Jops
Дата 5.3.2013, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Aliance @  5.3.2013,  13:19 Найти цитируемый пост)
число дней, а не timestamp.

Да именно кол-во дней. Тоесть 1 или 5 или 10 или 100 и.д.
Цитата(Aliance @  5.3.2013,  13:19 Найти цитируемый пост)
Хотелось бы видеть еще дамп таблицы, наверное, потому что не понятно зачем здесь

Название камеры берётся для того что бы инициировать (найти) нужную папку в директории /vlc/ready/. Кол-во папок можеть быть много. Они вида: cam1, cam12, cam33 или например aaa88. А уже в ней нужно удалить папку(и) вида 00-00-0000 через соответствующее кол-во дней, выбранных тоже из бызы. И в итоге: Для каждой папки cam... своё кол-во дней.


Цитата(Aliance @  5.3.2013,  13:19 Найти цитируемый пост)
Имеется ввиду, что в БД хранится кол-во дней, которое должна хранится камера? Тогда там, берем текущую дату и для каждой камеры отнимаем из нее N дней, указанных в БД (например, гуглим по DateDiff). Получаем массив дат вида camera => date. Далее, бежим по директориям и по датам, проверяем - если нужно удаляем, примерно так:

Не совсем. В БД хранится кол-во дней, которое должны хранится папки с записями в cam...
PM MAIL   Вверх
Aliance
Дата 5.3.2013, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

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



Я написал псевдокод, чем он не устраивает? Из написанного в новом посту ничего не меняет сути.
PM MAIL WWW ICQ Skype   Вверх
Jops
Дата 5.3.2013, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я понял, спасибо. Просто уточнил)
PM MAIL   Вверх
Jops
Дата 11.3.2013, 04:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Наконец то добрался до написания

Код

define('DB_HOST', '109.126.0.94');
    define('DB_LOGIN', 'cams');
    define('DB_PASSWORD', 'cams');
    define('DB_NAME', 'cams');

    
    echo "Подключение к БД...";
        $link = mysql_connect(DB_HOST, DB_LOGIN, DB_PASSWORD)
        or die ('Ошибка подключения:'. mysqli_connect_error() ."\n");
    echo "Done. \n";
    
    mysql_select_db(DB_NAME)
        or die("БД не найдена \n");
    
    echo "Считывание данных из БД...";
        $sql = "SELECT cam_alias, delete_dir FROM cams_list";
        $result = mysql_query($sql) 
        or die('Не удалось выполнить запрос!' . mysql_error() ."\n");
    echo "Done. \n";
    
    
    if (mysql_num_rows($result) > 0) {
        $array = array();
    while ($row = mysql_fetch_assoc($result)) {    
        $array[$row['cam_alias']] = $row['delete_dir'];
    }
    } else {
        echo "Данные в таблице `cams_list` отсутствуют \n";
    }
    

    $date_now = date('d-m-Y');
    echo 'Текущая дата: '.$date_now."\n";
    $array_time = array();
    foreach($array as $key => $value)
  {
        $timestamp = time();
        $date_time_array = getdate($timestamp);

        $hours = $date_time_array['hours'];
        $minutes = $date_time_array['minutes'];
        $seconds = $date_time_array['seconds'];
        $month = $date_time_array['mon'];
        $day = $date_time_array['mday'];
        $year = $date_time_array['year'];


        $timestamp = mktime($hours,$minutes,$seconds,$month,$day + $value,$year);

        $array_time[$key] = strftime('%d-%m-%Y',$timestamp);


  } 


В конечном итоге в консоле посредствам цикла foreach вывожу данные (для проверки) вида:

cam1 = 14-03-2013 
cam2 = 26-03-2013 
cam3 = 12-04-2013 
cam4 = 09-06-2013 
china = 09-06-2013 
cam6 = 09-06-2013 
cam7 = 09-06-2013 
cam8 = 06-05-2013 
cam9 = 09-06-2013 
cam10 = 09-06-2013 

Всё корректно меняется (прибавление количества дней до удаления).
А вот как дальше присобачить к вашей конструкции мой массив $array_time с данными, я как то не очень понимаю. Объясните?

И ещё. rmdir ведь удаляет директорию, если она пустая. А она соответственно не пустая и предварительно надо удалить из неё все файлы. Разъясните пожалуйста, а то времени уже в обрез) Дотянул так сказать

Это сообщение отредактировал(а) Jops - 11.3.2013, 11:21
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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