#51 2013.02.01 12:29

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

Re: ЗЦ

Добавил #48.
Думаю так попроще будет.

Неактивен

#52 2013.02.01 16:06

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

Re: ЗЦ

УРА!!!
http://wapinet.ru/forum/uploaded/whoopy.jpg

Код:

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('files');$physical = dread($root);if (! empty($physical)) { // Get virtual pathes $virtual = array(); $pdo = new Pdo('mysql:dbname=downloads;host=127.0.0.1;', 'root', ''); $qt = 'SELECT `id`, `path` FROM `downloads`;'; if (false !== ($q = $pdo->query($qt))) { if ($q->rowCount()) { while ($path = $q->fetch(PDO::FETCH_ASSOC)) { $virtual[$path['id']] = $path['path']; } } } // Search new pathes $new = empty($virtual) ? $physical : array_diff($physical, $virtual); // Search invalid pathes // $invalid = array_diff($virtual, $physical); if (! empty($new)) { // Add new pathes on virtual $qt = 'INSERT INTO `downloads` (`path`, `name`, `type`, `parent_id`, `size`) ' . 'VALUES (:path, :name, :type, :parent_id, :size);'; $pdo->beginTransaction(); $q = $pdo->prepare($qt); $parentId = null; foreach ($new as $path) { if (false !== $q->execute(array( ':path' => $path, ':name' => basename($path), ':type' => ($type = filetype($path)), ':parent_id' => (int) array_search(dirname($path), $virtual), ':size' => ('file' == $type ? filesize($path) : 0) ))) { $parentId += (null === $parentId) ? $pdo->lastInsertId('downloads') : 1; if ('dir' == $type) { // $virtual[$pdo->lastInsertId('downloads.id')] = $path; $virtual[$parentId] = $path; } } } $pdo->commit(); }}

Неактивен

#53 2013.02.01 18:23

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

Re: ЗЦ

Я еще думал может ключи и значения после
отсеивания array_diff() местами поменять,
чтоб по ключу можно было получить parent_id,
чем искать array_search()?

Неактивен

#54 2013.02.01 21:06

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

Re: ЗЦ

Вот, заоптимизировал, вроде. Хотя кто знает, может простым: $pdo->lastInsertId('downloads') было бы куда быстрее.
Пост #52

Неактивен

#55 2013.02.01 21:22

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

Re: ЗЦ

Насчет физически несуществующих файлов, можно в принципе оставить эти записи.
Просто, если человек наткнется, то проверить один раз на существование файла/папки, если нет, то удалить все вложенные папки/файлы.

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

Неактивен

#56 2013.02.01 22:21

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

Re: ЗЦ

Если код плохой, есть еще одна мысль.
Получить сначала виртуальные данные, потом при проверке физических данных сразу все фиксировать.

Неактивен

#57 2013.02.02 10:18

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

Re: ЗЦ

нормааальный)

Неактивен

#58 2013.02.02 10:48

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

Re: ЗЦ

Чтобы получилась кнопка [ .. ]


SELECT * FROM downloads WHERE parent_id=:id} OR id=:id}

После в отдельную переменную и долой с массива.

Неактивен

#59 2013.02.02 19:40

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

Re: ЗЦ

Я, наверно, нативным синтаксисом в шаблонах, на CodeIgniter попробую все написать.

Неактивен

#60 2013.02.02 20:10

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

Re: ЗЦ

Есть желающие присоединиться к написанию?
Если да, то я на code.google.com выложу.

Неактивен

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

forum.wapinet.ru

PunBB Mod v0.6.2
0.013 s