#41 2013.01.30 21:28

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: ЗЦ

tipsun, в данном случае (InnoDB) можно вообще, на каждый файл делать отдельный инсерт и просто обернуть цикл в транзакцию. И еще использовать PDO с подготовленным вне цикла запросом.

Неактивен

#42 2013.01.30 21:32

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: ЗЦ

Короче, я не на правильном пути...

Неактивен

#43 2013.01.31 00:22

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: ЗЦ

Заглянул в sea_downloads2, там попроще, без id. Все на путях.

Неактивен

#44 2013.01.31 00:52

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: ЗЦ

ПонЭл принцип, как у меня это все будет.
Сканировать и сверять так же буду, как в sea, а насчет добавления, там будет принцип лесенки.
Самое главное, чтоб получилась эта лесенка, чтоб плавная была.
Остальное за pdo->lastinsertid(). Дальше мысля пока не пошла.
Добавлено спустя   3 минуты  58 секунд:
Еще понял, что надо бы полный путь сразу указывать, чтоб потом не мучаться. Отдавать все-равно буду через одну точку, значит локального пути хватит вполне.
Добавлено спустя   9 минут  59 секунд:
Можно даже без pdo->lastinsertid, ибо по принципу лесенки, эта папка уже будет в базе.

Неактивен

#45 2013.01.31 01:03

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: ЗЦ

Значит я могу запросом вытащить id который будет parent_id для следующих элементов.

Неактивен

#46 2013.01.31 11:49

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: ЗЦ

tipsun, в sea далеко не идеальная архитектура. Принимать ее как эталонную не стоит.

Неактивен

#47 2013.01.31 14:51

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: ЗЦ

Можно было бы одной функцией попробовать, типа: сравнить два массива и выдать только недостающие ключи. А там перебор идет.

Неактивен

#48 2013.02.01 10:05

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: ЗЦ

Можно 1 циклом обойтись, в функцию подготовленный prepare запихать и вперед.
- - - -
Надо еще с путями разобраться и parent_id


CREATE TABLE IF NOT EXISTS `downloads` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `path` text NOT NULL,
  `name` varchar(50) NOT NULL,
  `parent_id` bigint(20) NOT NULL,
  `type` varchar(20) NOT NULL,
  `size` bigint(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `name` (`name`,`parent_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Код:

1
span style="color: #0000BB"><?phpfunction dread($parent) { $array = array(); if (false !== ($resource = opendir($parent))) { while (false !== ($name = readdir($resource))) { if ('.' != $name && '..' != $name) { $child = $parent . DIRECTORY_SEPARATOR . $name; $array[] = $child; if (is_dir($child)) { $array = array_merge($array, dread($child)); } } } closedir($resource); } return $array;}// Get physical pathes$root = realpath('folders');$physical = dread($root);// Get virtual pathes$virtual = array();$pdo = new Pdo('mysql:dbname=downloads;host=127.0.0.1;', 'root', '');$qt = 'SELECT `path` FROM `downloads`;';if (false !== ($q = $pdo->query($qt))) { if ($q->rowCount()) { $virtual = $q->fetchAll(PDO::FETCH_COLUMN); }}// Search new and invalid pathes$new = array_diff($physical, $virtual);// $invalid = array_diff($virtual, $physical);// Add new pathes in virtual$qt = 'INSERT INTO `downloads` (`path`, `name`, `type`, `parent_id`, `size`) ' . 'VALUES (:path, :name, :type, :parent_id, :size)';$pdo->beginTransaction();$q = $pdo->prepare($qt);foreach ((array) dread($root) as $path) { $q->execute(array( ':path' => $path, ':name' => basename($path), ':type' => ($type = filetype($path)), ':parent_id' => 0, ':size' => ('file' == $type ? filesize($path) : 0) ));}$pdo->commit();

Отредактировано tipsun (2013.02.01 12:27)

Неактивен

#49 2013.02.01 11:14

Gemorroj
Administrator
Откуда: Белоруссия
Зарегистрирован: 2007.11.03
Сообщений: 6593
Карма: 107
Профиль Веб-сайт

Re: ЗЦ

tipsun, да, мне видится такой более чистым и правильным. Единственное что, нужно бы еще проверку на false делать более жесткой. Т.е. !==

Неактивен

#50 2013.02.01 11:23

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2277
Карма: 19
Профиль

Re: ЗЦ

Спасибо, что посмотрел. smile
Я вот еще не пойму пока, мне полный путь нужен в базе или нет.
Еще вот никак не представлю как parent_id узнавать.

Неактивен

Дополнительно

forum.wapinet.ru

PunBB Mod v0.6.2
0.013 s