Проверка на содержимое папки

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Проверка на содержимое папки

Сообщение webms » Пн дек 11, 2017 10:44 am

Ребята, помогите пожалуйста, второй день спать\работать спокойно не могу
Есть вот такой код
КодПоказать

Код: Выделить всё

<style type="text/css">
        hr {
            height: 1px;
            overflow: hidden;
            font-size: 0;
            line-height: 0;
            background: #ccc;
            margin: 50px 0;
            border: 0;
        }

        /* css for calendar */
        .b-calendar {
            font: 14px/1.2 Arial, sans-serif;
            background: #fff;
        }
        .b-calendar--along {
            width: 300px;
            padding: 30px 40px;
            margin: 50px auto;
        }
        .b-calendar--many {
            padding: 20px;
            width: 250px;
            display: inline-block;
            vertical-align: top;
            margin: 0 7px 20px;
            border: 1px solid #e0e0e0;        
        }
        .b-calendar__title {
            text-align: center;
            margin: 0 0 20px;
        }
        .b-calendar__year {
            font-weight: bold;
            color: #333;
        }
        .b-calendar__tb {
            width: 100%;
        }
        .b-calendar__head {
            font: bold 14px/1.2 Arial, sans-serif;
            padding: 5px;
            text-align: left;
            border-bottom: 1px solid #c0c0c0;
        }
        .b-calendar__np {
            padding: 5px;
        }
        .b-calendar__day {
            font: 14px/1.2 Arial, sans-serif;
            padding: 8px 5px;
            text-align: center;
        }
        .b-calendar__weekend > a{
            color: red;
        }
        .day<?php echo date("dm");?> { 
        color: #fff !important;
        background-color: #FF5722;
        border-radius: 50%;
        display: block;
        
        padding: 6px;
        position: absolute;
        margin-top: -14px;
        margin-left: -5px;
        width: 16px;        
        
        }
        .selectday<?php if (!empty($_GET["dt"])) { echo date('dm', strtotime($_GET['dt'])); } ?> { 
        color: #000 !important;
        background-color: #fff;
        border: 1px solid #FF5722;
        border-radius: 50%;
        display: block;
        
        padding: 5px;
        position: absolute;
        margin-top: -14px;
        margin-left: -5px;
        width: 16px;        
        
        }
        
        a {text-decoration: none; color: #000;}
        .b-calendar__number:hover {font-weight: 600;}
</style>

<?php

function aksort(&$array,$valrev=false,$keyrev=false) {
  if ($valrev) { arsort($array); } else { asort($array); }
    $vals = array_count_values($array);
    $i = 0;
    foreach ($vals AS $val=>$num) {
        $first = array_splice($array,0,$i);
        $tmp = array_splice($array,0,$num);
        if ($keyrev) { krsort($tmp); } else { ksort($tmp); }
        $array = array_merge($first,$tmp,$array);
        unset($tmp);
        $i = $num;
    }
}

//////////////// НАСТРОЙКИ ВНИЗУ
 
function showdate($dir,$fdate) {

 $files = array();
 foreach (scandir($dir) as $v) {$files[$v] = filemtime("$dir/$v");

}
 aksort($files, true);
 $files = array_keys($files);

$arr =$files;
foreach($arr as $b) {

if(stripos($b,'.jpg')){

if (date ("d.m.Y",filemtime($dir.$b))==$fdate)
{echo '<a href="'.$dir.$b.'"  title='.$b.'><img src="'.$dir.$b.'" width="200" hegiht="200"  /></a>';}
}
}
}



function draw_calendar($month, $year, $action = 'none', $ch) {
    
    if ($month == date('m', strtotime("-11 month"))) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Январь</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    if ($month == date('m', strtotime("-10 month"))) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Февраль</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    if ($month == date('m', strtotime("-9 month"))) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Март</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    if ($month == date('m', strtotime("-8 month"))) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Апрель</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    if ($month == date('m', strtotime("-7 month"))) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Май</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    if ($month == date('m', strtotime("-6 month"))) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Июнь</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    if ($month == date('m', strtotime("-5 month"))) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Июль</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    if ($month == date('m', strtotime("-4 month"))) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Август</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    if ($month == date('m', strtotime("-3 month"))) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Сентябрь</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    if ($month == date('m', strtotime("-2 month"))) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Октябрь</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    if ($month == date('m', strtotime("-1 month"))) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Ноябрь</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    if ($month == date('m')) $calendar = '<div class="b-calendar b-calendar--many"><div class="b-calendar__title"><span class="b-calendar__month">Декабрь</span> <span class="b-calendar__year">\''.date("y").'</span></div><table cellpadding="6" cellspacing="6" class="b-calendar__tb">';
    
    // вывод дней недели
    $headings = array('Пн','Вт','Ср','Чт','Пт','Сб','Вс');
    $calendar.= '<tr class="b-calendar__row">';
    for($head_day = 0; $head_day <= 6; $head_day++) {
        $calendar.= '<th class="b-calendar__head';
        // выделяем выходные дни
        if ($head_day != 0) {
            if (($head_day % 5 == 0) || ($head_day % 6 == 0)) {
                $calendar .= ' b-calendar__weekend';
            }
        }
        $calendar .= '">';
        $calendar.= '<div class="b-calendar__number">'.$headings[$head_day].'</div>';
        $calendar.= '</th>';
    }
    $calendar.= '</tr>';

    // выставляем начало недели на понедельник
    $running_day = date('w',mktime(0,0,0,$month,1,$year));
    $running_day = $running_day - 1;
    if ($running_day == -1) {
        $running_day = 6;
    }
    
    $days_in_month = date('t',mktime(0,0,0,$month,1,$year));
    $day_counter = 0;
    $days_in_this_week = 1;
    $dates_array = array();
    
    // первая строка календаря
    $calendar.= '<tr class="b-calendar__row">';
    
    // вывод пустых ячеек
    for ($x = 0; $x < $running_day; $x++) {
        $calendar.= '<td class="b-calendar__np"></td>';
        $days_in_this_week++;
    }
    
    // дошли до чисел, будем их писать в первую строку
    for($list_day = 1; $list_day <= $days_in_month; $list_day++) {
        $calendar.= '<td class="b-calendar__day';

        // выделяем выходные дни
        if ($running_day != 0) {
            if (($running_day % 5 == 0) || ($running_day % 6 == 0)) {
                $calendar .= ' b-calendar__weekend';
            }
        }
        $calendar .= '">';
        
        //стиль
        $styleday = str_pad($list_day, 2,"0",STR_PAD_LEFT).str_pad($month, 2,"0",STR_PAD_LEFT);
        if (!empty($_GET["dt"])) {
        if ($styleday == date('dm', strtotime($_GET['dt']))) { $selectday =  date('dm', strtotime($_GET['dt'])); } else { $selectday = ""; }
        } else { $selectday = "0"; }
        
        // пишем номер в ячейку
        $calendar.= '<a class="day'.$styleday.' selectday'.$selectday.'" href="img_security.php?cam='.$ch.'&dt='.str_pad($list_day, 2,"0",STR_PAD_LEFT).".".str_pad($month, 2,"0",STR_PAD_LEFT).".".$year.'"><div class="b-calendar__number">'.$list_day.'</div>';
        $calendar.= '</td></a>';

        // дошли до последнего дня недели
        if ($running_day == 6) {
            // закрываем строку
            $calendar.= '</tr>';
            // если день не последний в месяце, начинаем следующую строку
            if (($day_counter + 1) != $days_in_month) {
                $calendar.= '<tr class="b-calendar__row">';
            }
            // сбрасываем счетчики 
            $running_day = -1;
            $days_in_this_week = 0;
        }

        $days_in_this_week++; 
        $running_day++; 
        $day_counter++;
    }

    // выводим пустые ячейки в конце последней недели
    if ($days_in_this_week < 8) {
        for($x = 1; $x <= (8 - $days_in_this_week); $x++) {
           // $calendar.= '<td class="b-calendar__np"> </td>';
        }
    }
    $calendar.= '</tr>';
    $calendar.= '</table></div>';

    return $calendar; 
}

/////////////////////////////////////////////НАСТРОЙКИ ПАПКИ КАМЕРЫ
$imgcam = "backup";
/////////////////////////////////////////////КОНЕЦ

$mm2=str_pad(date("m", strtotime("-1 month")), 2,"0",STR_PAD_LEFT);
$mm1=str_pad(date("m"), 2,"0",STR_PAD_LEFT);
$yy=str_pad(date("Y"), 4,"0",STR_PAD_LEFT);

if (empty($_GET['cam']))  {$cam=$imgcam;} else {$cam = $_GET['cam'];}
if (empty($_GET['dt']))  $dt=date("d.m.Y"); else $dt = $_GET['dt'];

/////////////////////////////////////////////НАСТРОЙКИ ПАПКИ ГДЕ ХРАНЯТЬСЯ ПАПКИ КАМЕР
$path = "../ipcam/".$cam."/";
/////////////////////////////////////////////КОНЕЦ

//Calendar();
echo draw_calendar($mm2,$yy,null,$cam);
echo draw_calendar($mm1,$yy,null,$cam);
echo "<div></div>";
showdate($path,$dt);

?>
как проверить есть ли в папке файлы при выборе даты в календаре?
(хочется чтоб даты без файлов были серыми)
СкриншотПоказать
Изображение
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Проверка на содержимое папки

Сообщение skysilver » Пн дек 11, 2017 10:47 am

А имена файлов по шаблону формируются?

Есть file_exists ($имя_файла_или_папки);
http://php.net/manual/ru/function.file-exists.php
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Проверка на содержимое папки

Сообщение webms » Пн дек 11, 2017 11:09 am

skysilver писал(а):А имена файлов по шаблону формируются?

Есть file_exists ($имя_файла_или_папки);
http://php.net/manual/ru/function.file-exists.php
про эту функцию я знаю
я не могу ее объединить с календарем который при клике на дату генерирует поиск картинок в папке
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Проверка на содержимое папки

Сообщение nick7zmail » Пн дек 11, 2017 1:06 pm

Чтобы подсветить дату серым - надо условие, чтобы подсветить дату серым...условие это if(file_exists()). Но по условию куда-то должны быть записаны данные. Файлы у вас подгружаются только после клика на дату, как я полагаю.

Варианта 2:
1) перенести анализ присутствия/отсутствия файла в момент формирования таблицы календаря (скорее всего существенно замедлит выполнение скрипта)
2) Раз в какой-либо период проверять наличие файлов средствами сервера, и формировать календарь, к примеру, в свойстве какого-либо объекта. Тут минус - то что обновляться данные будут в момент запуска скрипта, а не в момент отрисовки страницы.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Проверка на содержимое папки

Сообщение webms » Пн дек 11, 2017 1:14 pm

nick7zmail писал(а):2) Раз в какой-либо период проверять наличие файлов средствами сервера, и формировать календарь, к примеру, в свойстве какого-либо объекта. Тут минус - то что обновляться данные будут в момент запуска скрипта, а не в момент отрисовки страницы.
А как сделать второй пункт? Помогите пожалуйста
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Проверка на содержимое папки

Сообщение nick7zmail » Пн дек 11, 2017 1:45 pm

Точно так же, как сделано у вас, только вместо echo использовать sg.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Проверка на содержимое папки

Сообщение webms » Пн дек 11, 2017 2:17 pm

nick7zmail писал(а):Точно так же, как сделано у вас, только вместо echo использовать sg.
что то я вас не понимаю, причем sg
надо же еще запрос как то сформировать (функцию написать)

выше функция с echo для отображение картинок по этому запросу
Аватара пользователя
Vovix
Сообщения: 1155
Зарегистрирован: Пн янв 27, 2014 1:43 am
Откуда: г.Ижевск
Благодарил (а): 60 раз
Поблагодарили: 531 раз
Контактная информация:

Re: Проверка на содержимое папки

Сообщение Vovix » Пн дек 11, 2017 3:32 pm

webms писал(а):
nick7zmail писал(а):Точно так же, как сделано у вас, только вместо echo использовать sg.
что то я вас не понимаю, причем sg
надо же еще запрос как то сформировать (функцию написать)

выше функция с echo для отображение картинок по этому запросу
Уважаемый nick7zmail, на сколько я понимаю, отвечая на ваш вопрос: А как сделать второй пункт?
предложил заменить echo на sg("ВашОбъект.свойство", "код для отображения");
например ваши последние строки будут выглядеть так:

Код: Выделить всё

//Calendar();
$htmlView1 = draw_calendar($mm2,$yy,null,$cam)) + draw_calendar($mm1,$yy,null,$cam) + "<div></div>";
sg("ВашОбъект.свойство", $htmlView1);
 
и выводить потом куда надо через: %ВашОбъект.свойство%
...
тока у вас там надо бы учитывать еще (добавить в начало $htmlView1 ) код style ваш (тот который в начале)
...
и возможно еще не все...

UPD:
а да придется еще в функции showdate($dir,$fdate)
поменять, чтобы она возвращала через return просто блок html кода (без echo) и тогда ее еще в конец добавить к $htmlView1
т.е. будет так:

Код: Выделить всё

//Calendar();
$htmlView1 = $styleView + draw_calendar($mm2,$yy,null,$cam)) + draw_calendar($mm1,$yy,null,$cam) + "<div></div>" + showdate($dir,$fdate);
sg("ВашОбъект.свойство", $htmlView1);
 
где в свою очередь $styleView это код стиля (у вас в начале) вложенный в эту переменную!
как-то так!
Мой -CONNECT-
Windows 7(PHP 7.2) + Raspberry Pi(освещение на 1-Wire) + MP751(управление) + ESP8266(сенсоры) + LAN(сенсоры)
-=: Если вам помогло моё сообщение, нажмите кнопку "Поблагодарить за сообщение автора: Vovix" (кнопка Спасибо) справа! :=-
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург
Благодарил (а): 121 раз
Поблагодарили: 2010 раз

Re: Проверка на содержимое папки

Сообщение nick7zmail » Пн дек 11, 2017 4:53 pm

Vovix да, всё верно =)...просто не было времени на столько расписывать))) подтолкнул просто в правильном направлении.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
Аватара пользователя
webms
Сообщения: 498
Зарегистрирован: Чт дек 15, 2016 3:13 am
Благодарил (а): 221 раз
Поблагодарили: 88 раз

Re: Проверка на содержимое папки

Сообщение webms » Пн дек 11, 2017 5:06 pm

всем спасибо
попробовал - не получилось. взбесился.. в ж%пу эту хрень
Ответить