[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Выборка и вывод изображений
jefryk
Добрый день!
Имеется папка, в которой хранится еще много папок, а в каждой этой папке лежат изображения. Как средствами PHP вывести все эти изображения из каждой папки в браузер, при условии, что они раз в сутки обновляются и изменяют свое название, а также папки, в которых хранятся эти изображения, меняют свои названия.
Заранее спасибо!
Игорь_Vasinsky
ну я бы написал рекурсивную функцию с glob() - обходил бы корневыю папку, шарил бы по дочерним - и выводил бы найденные картинки.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
jefryk
Цитата (Игорь_Vasinsky @ 19.05.2014 - 06:43)
ну я бы написал рекурсивную функцию с glob() - обходил бы корневыю папку, шарил бы по дочерним - и выводил бы найденные картинки.

Спасибо!
Но задача немного усложнилась, необходимо еще установить фильтр по дате создания этих картинок, т.е. нужно прошарить все папки и вывести только по одному самому свежему изображению. Это реализуемо?
Игорь_Vasinsky
ну а почему нет)

date("d.m.Y H:i:s.", filemtime($file));


получить массив с датами изменения - отсортировать- и

array_shift() или array_pop() - в зависимости от сортировки вернёт нужный эл-т массива

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
jefryk
Это радует!) А можно немного поподробнее?) На простеньком примере реализовать в коде? С массивами не очень дружу(
Игорь_Vasinsky
1. написать функцию поиска картинок в папке с использованием штатной функции glob()
2. когда функция шарит по папке - она проверяет - папка это или файл - если папка - то лезет в неё

во время работы - собирается в подмассивы данные о последнем изменении файлов (в паре с именем и путём к файлу)

далее необходимо каждый подмассив общего массива - отсортировать и получить единственный нужный файл


Цитата
А можно немного поподробнее?)

хотелось бы ваши наработки увидеть.

ну если хотите готовый вариант - то мы можем договориться.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
jefryk
Ок, на данном этапе реализовал небольшой кусочек кода:

$arr = glob ("C:/Users/e.sadomov/Desktop/dir/*.*");
//выводим список файлов
if (is_array($arr))
{
foreach ($arr as $filename)
echo "$filename (".filesize($filename)." байт)<br>";
}


Но встал вопрос, как сделать более глубокий поиск файлов? Данный код ограничивает поиск папкой "dir". Здесь нужно добавить проверку типа "файл-папка"?
Игорь_Vasinsky
я же несколько раз говорил - про рекурсию

достаточно проверить в цикле файлы - если is_dir() вернёт true - значит это не файл, а директория - значит снова надо запускать ту функцию, но в качестве аргумента передавать дочернюю папку

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
jefryk
Цитата (Игорь_Vasinsky @ 19.05.2014 - 08:23)
1. написать функцию поиска картинок в папке с использованием штатной функции glob()
2. когда функция шарит по папке - она проверяет - папка это или файл - если папка - то лезет в неё

во время работы - собирается в подмассивы данные о последнем изменении файлов (в паре с именем и путём к файлу)

далее необходимо каждый подмассив общего массива - отсортировать и получить единственный нужный файл


Цитата
А можно немного поподробнее?)

хотелось бы ваши наработки увидеть.

ну если хотите готовый вариант - то мы можем договориться.

Первые два пункта реализовал, а вот с оставшимися двумя проблема. Может подтолкнете хоть кусочком кода? Вот, что имеется на данный момент:

function glob_recursive($dir){
foreach(glob($dir."*") as $filename){
echo $filename."<br>";
if(is_dir($filename)) glob_recursive($filename."/*");
}
}

$dir = "C:/Users/user/Desktop/dir/";
glob_recursive($dir);


Заранее спасибо!
Игорь_Vasinsky
с кодом слишком просто))

смотри - тебе нужно создать массив с файлами - это многомерный массив

какждый раз когда ты пробегаешь по директории - ты должен сохранять имя папки - как ассоц. индекс массива - в него уже класть картинки

в итоге ты должен иметь массив вида

array=>array(
'dir'=>array(file1,file2...),
'dir2'=>array(file1,file2...),
...

'dirN'=>array(file1,file2...),
);


это очень удобная конструкция массива

потом по нему пробежаться в цикле foreach() - и отсеять - всё что не является картинкой (на всяк случай) - для этого можно проверить mime type файла с помощью mime_content_type()

если это картинка - то оставляй её в массиве

параллельно можно собирать ещё массив с именем директории и картинками - но сразу смотреть дату изменения (функция выше - я говорил о ней)

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
jefryk
Ок, спасибо! Буду работать)
sergeiss
Цитата (jefryk @ 19.05.2014 - 06:05)
при условии, что они раз в сутки обновляются и изменяют свое название, а также папки, в которых хранятся эти изображения, меняют свои названия

Если не секрет, зачем такие "страсти" с переименованием файлов и папок?

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
jefryk
Цитата (sergeiss @ 19.05.2014 - 14:52)
Цитата (jefryk @ 19.05.2014 - 06:05)
при условии, что они раз в сутки обновляются и изменяют свое название, а также папки, в которых хранятся эти изображения, меняют свои названия

Если не секрет, зачем такие "страсти" с переименованием файлов и папок?

Не секрет. Я не совсем корректно выразился, раз в сутки добавляются свежие папки с файлами, старые остаются неизменны.
Игорь_Vasinsky
Тогда - проще - хранить эти имена отдельно - на нужное время - и брать их оттуда))


ну вот - была у меня пара минут - класс - но 2 метода - как раз конечные этапы - я не успел дописать

Свернутый текст
<?php
header("Content-Type: text/html;charset=utf-8");

/**
* Класс поиска картинок вдиректории
*
@param string - начальная ддректория поиска
*
@return array - все картинки с последней датой изменения (по 1му файлу из каждой директории)
*/

class FindImages{
public $dir;
public $allData = array();
public $types = array();
public $structure = array();
public $resultArray = array();

public function __construct($dir){
$this->dir = $dir;
}
/**
* Установка валидного mime типа файлов
*
@param array - mime type допустимых файлов
*/

function setTypes($types){
$this->types = $types;
}

/**
* Метод поиска картинок
*
@return array - ассоциативный массив - директория->список картинок
*/

public function searchAllData(){
$entry = glob($this->dir.'/*');
if(!empty($entry)){
foreach($entry as $k=>$v){
if(is_dir($v)){
$this->dir = $v;
$this->searchAllData();
}
else{

$temp = explode('/', $v);
//файл доступен для получения с него данных?
if(is_readable($v)){
//Файл с нужным mime типом?
if(!empty($this->types) && in_array(mime_content_type($v), $this->types)){
$this->structure[$temp[count($temp)-2]][] = array(
'name'=>$temp[count($temp)-1],
'mime'=>mime_content_type($v),
'date'=>date("d.m.Y H:i:s", filemtime($v)),
'unixtime'=>filemtime($v),
'fullpath'=>$v
);
}
}
}
}
}
}


/**
* Метод сортировки массива $this->structure - по полю unixtime
*
*/

public function sortByTime(){

}


/**
* Метод выдернет по одному нужному элементу из массивах $this->structure
* и укомплектует $this->resultArray
*/

public function getResultArray(){

}


}

//Директория для поиска
$dir = 'images';
//Установка директории и создание объекта класса
$obj = new FindImages($dir);
//Допустимые типы файлов
$types = array('image/png', 'image/jpg', 'image/jpeg');
//Установка типов
$obj->setTypes($types);
//Формирование массива с данными
$obj->searchAllData();

//Найденные картинки в директориях
echo '<pre>' . print_r($o->structure, 1) . '</pre>';
?>


на выходе такой вот массив

Array
(
[images] => Array
(
[0] => Array
(
[name] => lock.jpg
[mime] => image/jpeg
[date] => 24.01.2014 11:24:09
[unixtime] => 1390548249
[fullpath] => images/lock.jpg
)

)

[subdir-1] => Array
(
[0] => Array
(
[name] => 2144.png
[mime] => image/png
[date] => 15.05.2014 14:25:07
[unixtime] => 1400149507
[fullpath] => images/subdir-1/2144.png
)

[1] => Array
(
[name] => 222.png
[mime] => image/png
[date] => 15.05.2014 12:01:28
[unixtime] => 1400140888
[fullpath] => images/subdir-1/222.png
)

)

[subdir-1-1] => Array
(
[0] => Array
(
[name] => 222.png
[mime] => image/png
[date] => 15.05.2014 12:01:28
[unixtime] => 1400140888
[fullpath] => images/subdir-1/subdir-1-1/222.png
)

)

[subdir-2] => Array
(
[0] => Array
(
[name] => 1111.png
[mime] => image/png
[date] => 15.05.2014 11:43:42
[unixtime] => 1400139822
[fullpath] => images/subdir-2/1111.png
)

[1] => Array
(
[name] => 222.png
[mime] => image/png
[date] => 15.05.2014 12:01:28
[unixtime] => 1400140888
[fullpath] => images/subdir-2/222.png
)

[2] => Array
(
[name] => 333.png
[mime] => image/png
[date] => 15.05.2014 12:20:21
[unixtime] => 1400142021
[fullpath] => images/subdir-2/333.png
)

[3] => Array
(
[name] => 44.png
[mime] => image/png
[date] => 15.05.2014 14:25:07
[unixtime] => 1400149507
[fullpath] => images/subdir-2/44.png
)

)

[subdir-2-1] => Array
(
[0] => Array
(
[name] => 222.png
[mime] => image/png
[date] => 15.05.2014 12:01:28
[unixtime] => 1400140888
[fullpath] => images/subdir-2/subdir-2-1/222.png
)

[1] => Array
(
[name] => 44.png
[mime] => image/png
[date] => 15.05.2014 14:25:07
[unixtime] => 1400149507
[fullpath] => images/subdir-2/subdir-2-1/44.png
)

)

[subdir-2-1-1] => Array
(
[0] => Array
(
[name] => 44.png
[mime] => image/png
[date] => 15.05.2014 14:25:07
[unixtime] => 1400149507
[fullpath] => images/subdir-2/subdir-2-1/subdir-2-1-1/44.png
)

)

)


_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

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