#1 2011.04.26 16:43

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

ЗЦ

Дописал, наконец, свой микроГовноЗагрузЦентр. Ура!
- - - -
Отрываю от сердца...
Пример: tipsun.h2m.ru


Вложения

Отредактировано tipsun (2011.05.02 17:18)

Неактивен

#2 2011.04.26 20:51

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

Re: ЗЦ

Добавил транслит папкэ
- - - -
Какие рекомендации, кроме логика/разметка раздельно?

Неактивен

#3 2011.04.26 21:06

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

Re: ЗЦ

начнем с того, что зачем это все в 1 файле?

Неактивен

#4 2011.04.26 21:10

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

Re: ЗЦ

Т.к. он единственный, пока что.
Сейчас исправлю.

Отредактировано tipsun (2011.04.27 21:02)

Неактивен

#5 2011.04.27 22:57

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

Re: ЗЦ

Просто не терпится все исправить и начать заливать картинки smile

Отредактировано tipsun (2011.04.28 21:38)

Неактивен

#6 2011.04.27 23:07

OloLo
Участник
Зарегистрирован: 2011.04.27
Сообщений: 7
Карма: 1
Профиль

Re: ЗЦ

Интересный зц ))Хотел посмотреть как мп3 файлы выводит,но в папках ещё не одного файла нету(((
Добавлено спустя   4 минуты  25 секунд:
в граббе мп3 поиска,на хомяке ошибку выдает в 8 строке(


http://nick-name.ru/forum3t6/POFIGISST.gif

Неактивен

#7 2011.04.27 23:16

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

Re: ЗЦ

Потом поправлю, на сегодня достаточно говнокода...
- - - -
Как обычный файл мр3, даже иконка не будет меняться... Никакой дополн. инфы.
- - - -
Со временем исправлю ошибки, надеюсь... Если конечно подскажут тут. По функциональности может ещё добавлю туда сортировку сначала папки, потом файлы и ещё сортировку по времени размещения или имени файла. Этим всё и ограничится. smile

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

Неактивен

#8 2011.04.27 23:18

OloLo
Участник
Зарегистрирован: 2011.04.27
Сообщений: 7
Карма: 1
Профиль

Re: ЗЦ

Закинь в директорию какую нибудь мп3 мелкую))))
Добавлено спустя   1 минуту  13 секунд:

tipsun написал:

Потом поправлю, на сегодня достаточно говнокода...
- - - -
Как обычный файл мр3, даже иконка не будет меняться... Никакой дополн. инфы.

Аааа,интересно прост было)))как будет выглядеть мп3шка))


http://nick-name.ru/forum3t6/POFIGISST.gif

Неактивен

#9 2011.04.28 21:23

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

Re: ЗЦ

Выложил свой говноЛистингФайлов/папок...

Отредактировано tipsun (2011.04.28 21:26)

Неактивен

#10 2011.04.29 14:37

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

Re: ЗЦ

Хотел спросить, как сделать раздельно показ сначала папок потом файлов в определенной папке?
Я это представляю как отдельное условие :: if(is_dir()){} :: при сканирований папки. В один массив заносить имена папок, потом сортировать по имени. И массив с именами файлов сортировать по усм. пользователя. Потом всё это обьединить :: array_merge() :: и посчитать :: sizeof() ::

Неактивен

#11 2011.04.29 15:46

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

Re: ЗЦ

да, именно.

Неактивен

#12 2011.04.29 20:07

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

Re: ЗЦ

Поправил, слегка

Код:

1
<?php !preg_match('/^[a-z0-9\_\-][a-z0-9\/\.\_\-]{1,}$/i'$_GET['dir']) ?>

Ну хотел чтоб при вводе только '_', '/', '.' и т.д. тоже была типа ошибка. Правда после '/' не будет уже работать это правило... ну и ладно...

Переделал ::foreach:: на ::for::
Ну и реализовал показ сначала папок, потом файлов.
- - - -
Перезалил архив.

Отредактировано tipsun (2011.04.29 20:35)

Неактивен

#13 2011.04.29 21:26

POFIGISST
Участник
Зарегистрирован: 2011.03.20
Сообщений: 1531
Карма: 6
Профиль

Re: ЗЦ

сделай статистику сколько раз скачали файл))) например "Скачать(47раз)" ну как то так)))

Неактивен

#14 2011.04.29 21:30

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

Re: ЗЦ

Для этого надо отдельный файл писать (about.php к примеру), база (ну можно и файлами обойтись, но это совсем говнокод, вроде как).
- - - -
Сейчас старый говноЛистинг свой поковыряю, может и получится сделать...

Отредактировано tipsun (2011.04.29 21:32)

Неактивен

#15 2011.04.29 21:34

POFIGISST
Участник
Зарегистрирован: 2011.03.20
Сообщений: 1531
Карма: 6
Профиль

Re: ЗЦ

я думал это проще писать)))и желательно чтоб выводило возле названий папок сколько в них файлов как то так "Видео (1985)" ))))

Неактивен

#16 2011.04.29 22:14

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

Re: ЗЦ

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

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

Неактивен

#17 2011.04.29 22:25

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

Re: ЗЦ

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

Неактивен

#18 2011.04.29 23:07

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

Re: ЗЦ

Ок. СПС.

Неактивен

#19 2011.04.30 12:39

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

Re: ЗЦ

Вот как возможно будет выглядеть about.php
http://wapinet.ru/forum/download.php?aid=558


Вложения

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

Неактивен

#20 2011.04.30 16:57

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

Re: ЗЦ

Доделал примитивнейшую статистику...
Осталось функцию подсчета количества файлов в папке написать...
Когда-то писал, поэтому думаю не очень долго буду писать в этот раз smile
- - - -
ещё поправил извлечение расширения файла, оказывается это делается при помощи ::pathinfo()::

Отредактировано tipsun (2011.04.30 17:01)

Неактивен

#21 2011.04.30 21:00

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

Re: ЗЦ

Мда, как задумал не получилось, переделал на одну такую зафигулину... Потом узнаете/поржете smile
Ну мне эта идея кажется не плохой.
- - - -
Да ладно, чего говнокод таить big_smile

sys/funs.php

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
define('TIMER'microtime(true));
 
//...
 
function html($body){
exit('<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">
<html>
<head>
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="keywords" content="'.$_SERVER['HTTP_HOST'].'" />
<title>'.$_SERVER['HTTP_HOST'].'</title>
<link rel="stylesheet" type="text/css" href="sys/default.css" />
</head>
<body>
<div class="head">DOWNLOADS</div>
<div class="f1"></div>
<div class="f2"></div>
<div class="f3"></div>
<div class="f4"></div>
<div class="f5"></div>
'.$body.'
<div class="h1"></div>
<div class="h2"></div>
<div class="h3"></div>
<div class="h4"></div>
<div class="h5"></div>
<div class="foot">&copy; <a href="/">Home</a> by TiPsun ('.round(microtime(true) - TIMER3).')</div>
<div class="f1"></div>
<div class="f2"></div>
<div class="f3"></div>
<div class="f4"></div>
<div class="f5"></div>
</body>
</html>');}
 
?>

При прямом выводе не работает header();
А так на 1 инклуд меньше... И вообще удобно вроде...
- - - -
Скоро выложу новую говноверсию...

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

Неактивен

#22 2011.05.01 16:40

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

Re: ЗЦ

Подсчет хочу осуществить путем самописного класса... Если конечно получится написать этот класс.

Неактивен

#23 2011.05.01 20:01

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

Re: ЗЦ

Черт, надо было не так. А глобально... 1 раз просканировал и занес в базу все папки сразу.
- - - -
Не знаю как сделать, такой как есть класс оставлю...

Отредактировано tipsun (2011.05.01 20:03)

Неактивен

#24 2011.05.01 20:39

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

Re: ЗЦ

Фух
- - - -
Про "время актуальности" забыл... епт
- - - -
Поправил...

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
 
//вот для чего нужен был strpos($_GET['dir'], '/.');
//чтоб не указывали ..... типа ?dir=_Kartinki/./././240x320
//от остального прег_матч, чтоб в начале не указалвывали / или ./ т.д.
//правда потом в папку нельзя будет назвать типа .olool т.к. olo/.ololo опознается как ошибкэ
//потом в прием папки обязательно добавлю
 
class dirStat
  {
    function count($dir)
    {
      GLOBAL $db;
      
      $dir preg_replace(array('/\/{2,}/''/\/\.{1,}/'), array('/'null), $dir);
      
      $query $db->prepare("SELECT `count` FROM `dirs` WHERE `name`=? AND `time`<'".$_SERVER['REQUEST_TIME']."' LIMIT 1;");
      $query->execute(array($dir));
      
      if($query->rowCount())
      {
        return $query->fetchColumn();
      }
      
      $this->count 0;
      self::run($dir);
      
      $query $db->prepare("REPLACE INTO `dirs` SET `name`=?, `count`='".$this->count."', `time`='".$_SERVER['REQUEST_TIME']."+600';");
      $query->execute(array($dir));
      
      return $this->count;
    }
    
    function run($dir)
    {
      if(is_dir('./'.$dir) and false !== ($opendir opendir('./'.$dir)))
      {
        while(false !== ($unit readdir($opendir)))
        {
          if('.' !== $unit and '..' !== $unit
          and 'about.php' !== $unit
          and 'index.php' !== $unit
          and 'sys' !== $unit
          and 'Thumbs.db' !== $unit)
          {
            if(is_dir('./'.$dir.'/'.$unit))
            {
              self::run($dir.'/'.$unit);
            }
            else
            {
              $this->count += 1;
            }
          }
        }
        
        closedir($opendir);
      }
      
      return;
    }
  } $STAT = new dirStat;
 
 
//использование...
echo $STAT->count($dir);
 
?>

Отредактировано tipsun (2011.05.02 09:21)

Неактивен

#25 2011.05.01 21:50

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

Re: ЗЦ

Зря я делал '/' при получении каталога! sad

Неактивен

#26 2011.05.02 00:21

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

Re: ЗЦ

Подскажите пожалуйста, печально ли будет если я ограничу прием адреса папки до

Код:

1
<?php !preg_match('/^[a-z0-9\_\-][a-z0-9\_\-\/]{1,}$/i'$_GET['dir'])) ?>

. Точка все портит. Из-за нее приходится дополнительно лепить защиту.

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

Неактивен

#27 2011.05.02 09:00

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

Re: ЗЦ

ну сам смотри, как папки называть будешь

Неактивен

#28 2011.05.02 09:08

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

Re: ЗЦ

Ну по-моему лучше сразу ограничить один раз прег_матчем чем потом везде на спец символы обрабатывать, точки учитывать... Если не учитывать, то в базу урл будет записываться с точками... Ну т.е. вроде одно и то же для ::is_dir():: , а в базу идет со всем этим мусором... /./././

этот мусор потом чистить... А так надо будет перед занесением только повторяющиеся слеши убрать.

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

Неактивен

#29 2011.05.02 16:28

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

Re: ЗЦ

Как я запарился с этим говнозагрузником...
Дырку тоже закрыл. С ::$page:: связана была в index.php
- - - -
Добавил последнюю версию.
Посмотрите пожалуйста, кто не занят делом, если ли ошибки/дырки...

Отредактировано tipsun (2011.05.02 16:36)

Неактивен

#30 2011.05.02 18:49

POFIGISST
Участник
Зарегистрирован: 2011.03.20
Сообщений: 1531
Карма: 6
Профиль

Re: ЗЦ

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

Неактивен

#31 2011.05.02 20:17

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

Re: ЗЦ

Ну не знаю. Я оказывается неправильно код пишу.
Akdmeh отозвался на другом форуме, за что ему спасибо. Он написал, что у меня неправильный подход к построению кода.
Я теперь вообще растерян...

Отредактировано tipsun (2011.05.02 20:18)

Неактивен

#32 2011.05.02 21:06

POFIGISST
Участник
Зарегистрирован: 2011.03.20
Сообщений: 1531
Карма: 6
Профиль

Re: ЗЦ

Хорошо хоть мой говнокод пока никто не видитbig_smile

Неактивен

#33 2013.01.29 22:45

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

Re: ЗЦ

Хочу попробовать написать загрузчик, который бы не относился к говнокоду.
Есть 2 мысли:
1) Читать прямо с папок, но кешировать страницы.
2) Читать с базы, может еще и кешировать страницы.
- - - -
Таблица с файлами и папками выглядит так:


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

+ еще может вес, скачиваний файла
+ для папок кол-во файлов/папок в ней
+ описание для папок, файлов

Функция сканирования выглядит так:
Но есть сомнения, стоит ли так делать, вдруг, как говориться, захочется что-то изменить.
Есть мысль сделать простую функцию, которая с нужной папки все просканирует и выдаст одномерный массив, после специальным классом или еще чем все элементы перебрать и установить параметры и прочее.

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
class Common {
 
    public static function dread($parent) {
        $array = array();
        if (false != ($resource opendir($parent))) {
            while (false != ($name readdir($resource))) {
                if ('.' != $name && '..' != $name) {
                    $child $parent '/' $name;
                    if (is_dir($child)) {
                        $array += self::dread($child);
                        $isDir true;
                    }
                    $array[] = array(
                        'type'        => (! $isDir),
                        'name'        => $name,
                        'parent'      => basename($parent),
                        'path'        => $child,
                        'size'        => $isDir filesize($child),
                        'extension'   => $isDir null pathinfo($namePATHINFO_EXTENSION),
                        'visible'     => true,
                        'description' => null,
                        'fixed'       => null
                    );
                }
            }
            closedir($resource);
        }
        return $array;
    }
}

Добавлено спустя   5 минут  29 секунд:
Может стоит сделать как на форуме, после того, как просканировал, переименовывать файл в <md5>.ext чтоб вести статистику скачиваний итд. А еще есть и ссылки =/

Неактивен

#34 2013.01.29 23:35

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

Re: ЗЦ

такое ощущение, что ты эту табличку из sea брал. необходимо еще хранить id родительской категории.

Неактивен

#35 2013.01.30 00:26

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

Re: ЗЦ

Я заглядывал в sea, но базу я вроде не смотрел. И то я заглядывал, чтоб посмотреть как там сканирование идет.
Добавлено спустя   1 минуту  41 секунду:

Gemorroj написал:

необходимо еще хранить id родительской категории.

Ох, ну озадачил, так озадачил. =/
Добавлено спустя   9 минут  16 секунд:
Да, а то такая же папка может быть в другой категории и получится каша.

Неактивен

#36 2013.01.30 18:00

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

Re: ЗЦ

Вот выдал мой мозг загагулину, не уверен что верно.

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
 
function dread($parent$childId 0$parentId 0) {
    $query null;
    if (false != ($resource opendir($parent))) {
        while (false != ($name readdir($resource))) {
            if ('.' != $name && '..' != $name) {
                $child $parent DIRECTORY_SEPARATOR $name;
                $childId += 1;
                $query .= (is_file($child) ? '' '>>>') . 'VALUES(`id`=\'' $childId '\', `parent_id`=\''.$parentId.'\', `type`=\''.(is_file($child) ? 0).'\', `name`=\''.$name.'\', `path`=\''.$child.'\'), ' PHP_EOL;
                if (is_dir($child)) {
                    $result dread($child$childId$childId);
                    $query .= $result[0];
                    $childId $result[1];
                }
            }
        }
        closedir($resource);
    }
    return array($query$childId);
}


VALUES(`id`='1', `parent_id`='0', `type`='1', `name`='0028.jpg', `path`='files\0028.jpg'),
VALUES(`id`='2', `parent_id`='0', `type`='1', `name`='0029.jpg', `path`='files\0029.jpg'),
VALUES(`id`='3', `parent_id`='0', `type`='1', `name`='0030.jpg', `path`='files\0030.jpg'),
VALUES(`id`='4', `parent_id`='0', `type`='1', `name`='0031.jpg', `path`='files\0031.jpg'),
VALUES(`id`='5', `parent_id`='0', `type`='1', `name`='0032.jpg', `path`='files\0032.jpg'),
>>>VALUES(`id`='6', `parent_id`='0', `type`='0', `name`='filesIsubdir1', `path`='files\filesIsubdir1'),
VALUES(`id`='7', `parent_id`='6', `type`='1', `name`='0002.jpg', `path`='files\filesIsubdir1\0002.jpg'),
VALUES(`id`='8', `parent_id`='6', `type`='1', `name`='0003.jpg', `path`='files\filesIsubdir1\0003.jpg'),
VALUES(`id`='9', `parent_id`='6', `type`='1', `name`='0004.jpg', `path`='files\filesIsubdir1\0004.jpg'),
VALUES(`id`='10', `parent_id`='6', `type`='1', `name`='0005.jpg', `path`='files\filesIsubdir1\0005.jpg'),
VALUES(`id`='11', `parent_id`='6', `type`='1', `name`='0006.jpg', `path`='files\filesIsubdir1\0006.jpg'),
>>>VALUES(`id`='12', `parent_id`='6', `type`='0', `name`='subdirIsubdir1', `path`='files\filesIsubdir1\subdirIsubdir1'),
VALUES(`id`='13', `parent_id`='12', `type`='1', `name`='0008.jpg', `path`='files\filesIsubdir1\subdirIsubdir1\0008.jpg'),
VALUES(`id`='14', `parent_id`='12', `type`='1', `name`='0009.jpg', `path`='files\filesIsubdir1\subdirIsubdir1\0009.jpg'),
VALUES(`id`='15', `parent_id`='12', `type`='1', `name`='0010.jpg', `path`='files\filesIsubdir1\subdirIsubdir1\0010.jpg'),
VALUES(`id`='16', `parent_id`='12', `type`='1', `name`='0011.jpg', `path`='files\filesIsubdir1\subdirIsubdir1\0011.jpg'),
VALUES(`id`='17', `parent_id`='12', `type`='1', `name`='0012.jpg', `path`='files\filesIsubdir1\subdirIsubdir1\0012.jpg'),
VALUES(`id`='18', `parent_id`='12', `type`='1', `name`='Thumbs.db', `path`='files\filesIsubdir1\subdirIsubdir1\Thumbs.db'),
>>>VALUES(`id`='19', `parent_id`='6', `type`='0', `name`='subdirIsubdir2', `path`='files\filesIsubdir1\subdirIsubdir2'),
VALUES(`id`='20', `parent_id`='19', `type`='1', `name`='0013.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\0013.jpg'),
VALUES(`id`='21', `parent_id`='19', `type`='1', `name`='0014.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\0014.jpg'),
VALUES(`id`='22', `parent_id`='19', `type`='1', `name`='0015.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\0015.jpg'),
VALUES(`id`='23', `parent_id`='19', `type`='1', `name`='0016.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\0016.jpg'),
VALUES(`id`='24', `parent_id`='19', `type`='1', `name`='0017.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\0017.jpg'),
>>>VALUES(`id`='25', `parent_id`='19', `type`='0', `name`='1', `path`='files\filesIsubdir1\subdirIsubdir2\1'),
VALUES(`id`='26', `parent_id`='25', `type`='1', `name`='0018.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\1\0018.jpg'),
VALUES(`id`='27', `parent_id`='25', `type`='1', `name`='0019.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\1\0019.jpg'),
VALUES(`id`='28', `parent_id`='25', `type`='1', `name`='0020.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\1\0020.jpg'),
VALUES(`id`='29', `parent_id`='25', `type`='1', `name`='0021.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\1\0021.jpg'),
VALUES(`id`='30', `parent_id`='25', `type`='1', `name`='0022.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\1\0022.jpg'),
>>>VALUES(`id`='31', `parent_id`='25', `type`='0', `name`='b', `path`='files\filesIsubdir1\subdirIsubdir2\1\b'),
VALUES(`id`='32', `parent_id`='31', `type`='1', `name`='0023.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\1\b\0023.jpg'),
VALUES(`id`='33', `parent_id`='31', `type`='1', `name`='0024.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\1\b\0024.jpg'),
VALUES(`id`='34', `parent_id`='31', `type`='1', `name`='0025.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\1\b\0025.jpg'),
VALUES(`id`='35', `parent_id`='31', `type`='1', `name`='0026.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\1\b\0026.jpg'),
VALUES(`id`='36', `parent_id`='31', `type`='1', `name`='0027.jpg', `path`='files\filesIsubdir1\subdirIsubdir2\1\b\0027.jpg'),
VALUES(`id`='37', `parent_id`='31', `type`='1', `name`='Thumbs.db', `path`='files\filesIsubdir1\subdirIsubdir2\1\b\Thumbs.db'),
VALUES(`id`='38', `parent_id`='25', `type`='1', `name`='Thumbs.db', `path`='files\filesIsubdir1\subdirIsubdir2\1\Thumbs.db'),
VALUES(`id`='39', `parent_id`='19', `type`='1', `name`='Thumbs.db', `path`='files\filesIsubdir1\subdirIsubdir2\Thumbs.db'),
VALUES(`id`='40', `parent_id`='6', `type`='1', `name`='Thumbs.db', `path`='files\filesIsubdir1\Thumbs.db'),
>>>VALUES(`id`='41', `parent_id`='0', `type`='0', `name`='filesIsubdir2', `path`='files\filesIsubdir2'),
VALUES(`id`='42', `parent_id`='41', `type`='1', `name`='0033.jpg', `path`='files\filesIsubdir2\0033.jpg'),
VALUES(`id`='43', `parent_id`='41', `type`='1', `name`='0034.jpg', `path`='files\filesIsubdir2\0034.jpg'),
VALUES(`id`='44', `parent_id`='41', `type`='1', `name`='0037.jpg', `path`='files\filesIsubdir2\0037.jpg'),
VALUES(`id`='45', `parent_id`='41', `type`='1', `name`='0038.jpg', `path`='files\filesIsubdir2\0038.jpg'),
VALUES(`id`='46', `parent_id`='41', `type`='1', `name`='0039.jpg', `path`='files\filesIsubdir2\0039.jpg'),
VALUES(`id`='47', `parent_id`='41', `type`='1', `name`='0040.jpg', `path`='files\filesIsubdir2\0040.jpg'),
VALUES(`id`='48', `parent_id`='41', `type`='1', `name`='0041.jpg', `path`='files\filesIsubdir2\0041.jpg'),
VALUES(`id`='49', `parent_id`='41', `type`='1', `name`='0042.jpg', `path`='files\filesIsubdir2\0042.jpg'),
VALUES(`id`='50', `parent_id`='41', `type`='1', `name`='0043.jpg', `path`='files\filesIsubdir2\0043.jpg'),
VALUES(`id`='51', `parent_id`='41', `type`='1', `name`='0044.jpg', `path`='files\filesIsubdir2\0044.jpg'),
VALUES(`id`='52', `parent_id`='41', `type`='1', `name`='0045.jpg', `path`='files\filesIsubdir2\0045.jpg'),
VALUES(`id`='53', `parent_id`='41', `type`='1', `name`='0046.jpg', `path`='files\filesIsubdir2\0046.jpg'),
VALUES(`id`='54', `parent_id`='41', `type`='1', `name`='0048-Makhachkala.jpg', `path`='files\filesIsubdir2\0048-Makhachkala.jpg'),
VALUES(`id`='55', `parent_id`='41', `type`='1', `name`='Thumbs.db', `path`='files\filesIsubdir2\Thumbs.db'),
VALUES(`id`='56', `parent_id`='41', `type`='1', `name`='x002.jpg', `path`='files\filesIsubdir2\x002.jpg'),
VALUES(`id`='57', `parent_id`='41', `type`='1', `name`='x003.jpg', `path`='files\filesIsubdir2\x003.jpg'),
VALUES(`id`='58', `parent_id`='41', `type`='1', `name`='x004.jpg', `path`='files\filesIsubdir2\x004.jpg'),
VALUES(`id`='59', `parent_id`='41', `type`='1', `name`='x005.jpg', `path`='files\filesIsubdir2\x005.jpg'),
VALUES(`id`='60', `parent_id`='41', `type`='1', `name`='x006.jpg', `path`='files\filesIsubdir2\x006.jpg'),
VALUES(`id`='61', `parent_id`='41', `type`='1', `name`='x007.jpg', `path`='files\filesIsubdir2\x007.jpg'),
VALUES(`id`='62', `parent_id`='41', `type`='1', `name`='x008.jpg', `path`='files\filesIsubdir2\x008.jpg'),
VALUES(`id`='63', `parent_id`='41', `type`='1', `name`='x009.jpg', `path`='files\filesIsubdir2\x009.jpg'),
VALUES(`id`='64', `parent_id`='41', `type`='1', `name`='x010.jpg', `path`='files\filesIsubdir2\x010.jpg'),
VALUES(`id`='65', `parent_id`='41', `type`='1', `name`='x011.jpg', `path`='files\filesIsubdir2\x011.jpg'),
VALUES(`id`='66', `parent_id`='41', `type`='1', `name`='x012.jpg', `path`='files\filesIsubdir2\x012.jpg'),
VALUES(`id`='67', `parent_id`='41', `type`='1', `name`='x013.jpg', `path`='files\filesIsubdir2\x013.jpg'),
VALUES(`id`='68', `parent_id`='41', `type`='1', `name`='x014.jpg', `path`='files\filesIsubdir2\x014.jpg'),
VALUES(`id`='69', `parent_id`='41', `type`='1', `name`='x015.jpg', `path`='files\filesIsubdir2\x015.jpg'),
VALUES(`id`='70', `parent_id`='41', `type`='1', `name`='x016.jpg', `path`='files\filesIsubdir2\x016.jpg'),
VALUES(`id`='71', `parent_id`='41', `type`='1', `name`='x017.jpg', `path`='files\filesIsubdir2\x017.jpg'),
VALUES(`id`='72', `parent_id`='41', `type`='1', `name`='x018.jpg', `path`='files\filesIsubdir2\x018.jpg'),
VALUES(`id`='73', `parent_id`='41', `type`='1', `name`='x019.jpg', `path`='files\filesIsubdir2\x019.jpg'),
VALUES(`id`='74', `parent_id`='41', `type`='1', `name`='x020.jpg', `path`='files\filesIsubdir2\x020.jpg'),
VALUES(`id`='75', `parent_id`='41', `type`='1', `name`='x021.jpg', `path`='files\filesIsubdir2\x021.jpg'),
VALUES(`id`='76', `parent_id`='41', `type`='1', `name`='x022.jpg', `path`='files\filesIsubdir2\x022.jpg'),
VALUES(`id`='77', `parent_id`='41', `type`='1', `name`='x023.jpg', `path`='files\filesIsubdir2\x023.jpg'),
VALUES(`id`='78', `parent_id`='41', `type`='1', `name`='x024.jpg', `path`='files\filesIsubdir2\x024.jpg'),
VALUES(`id`='79', `parent_id`='41', `type`='1', `name`='x025.jpg', `path`='files\filesIsubdir2\x025.jpg'),
VALUES(`id`='80', `parent_id`='41', `type`='1', `name`='x026.jpg', `path`='files\filesIsubdir2\x026.jpg'),
VALUES(`id`='81', `parent_id`='41', `type`='1', `name`='x027.jpg', `path`='files\filesIsubdir2\x027.jpg'),
VALUES(`id`='82', `parent_id`='41', `type`='1', `name`='x028.jpg', `path`='files\filesIsubdir2\x028.jpg'),
VALUES(`id`='83', `parent_id`='41', `type`='1', `name`='x029.jpg', `path`='files\filesIsubdir2\x029.jpg'),
VALUES(`id`='84', `parent_id`='41', `type`='1', `name`='x030.jpg', `path`='files\filesIsubdir2\x030.jpg'),
VALUES(`id`='85', `parent_id`='41', `type`='1', `name`='x031.jpg', `path`='files\filesIsubdir2\x031.jpg'),
VALUES(`id`='86', `parent_id`='41', `type`='1', `name`='x032.jpg', `path`='files\filesIsubdir2\x032.jpg'),
VALUES(`id`='87', `parent_id`='41', `type`='1', `name`='x033.jpg', `path`='files\filesIsubdir2\x033.jpg'),
VALUES(`id`='88', `parent_id`='41', `type`='1', `name`='x034.jpg', `path`='files\filesIsubdir2\x034.jpg'),
VALUES(`id`='89', `parent_id`='41', `type`='1', `name`='x035.jpg', `path`='files\filesIsubdir2\x035.jpg'),
VALUES(`id`='90', `parent_id`='41', `type`='1', `name`='x036.jpg', `path`='files\filesIsubdir2\x036.jpg'),
VALUES(`id`='91', `parent_id`='41', `type`='1', `name`='x037.jpg', `path`='files\filesIsubdir2\x037.jpg'),
VALUES(`id`='92', `parent_id`='41', `type`='1', `name`='x038.jpg', `path`='files\filesIsubdir2\x038.jpg'),
VALUES(`id`='93', `parent_id`='41', `type`='1', `name`='x039.jpg', `path`='files\filesIsubdir2\x039.jpg'),
VALUES(`id`='94', `parent_id`='41', `type`='1', `name`='x040.jpg', `path`='files\filesIsubdir2\x040.jpg'),
VALUES(`id`='95', `parent_id`='41', `type`='1', `name`='x041.jpg', `path`='files\filesIsubdir2\x041.jpg'),
VALUES(`id`='96', `parent_id`='41', `type`='1', `name`='x042.jpg', `path`='files\filesIsubdir2\x042.jpg'),
VALUES(`id`='97', `parent_id`='41', `type`='1', `name`='x043.jpg', `path`='files\filesIsubdir2\x043.jpg'),
VALUES(`id`='98', `parent_id`='41', `type`='1', `name`='x044.jpg', `path`='files\filesIsubdir2\x044.jpg'),
VALUES(`id`='99', `parent_id`='41', `type`='1', `name`='x045.jpg', `path`='files\filesIsubdir2\x045.jpg'),
VALUES(`id`='100', `parent_id`='41', `type`='1', `name`='x046.jpg', `path`='files\filesIsubdir2\x046.jpg'),
VALUES(`id`='101', `parent_id`='41', `type`='1', `name`='x047.jpg', `path`='files\filesIsubdir2\x047.jpg'),
VALUES(`id`='102', `parent_id`='41', `type`='1', `name`='x048.jpg', `path`='files\filesIsubdir2\x048.jpg'),
VALUES(`id`='103', `parent_id`='41', `type`='1', `name`='x049.jpg', `path`='files\filesIsubdir2\x049.jpg'),
VALUES(`id`='104', `parent_id`='41', `type`='1', `name`='x050.jpg', `path`='files\filesIsubdir2\x050.jpg'),
VALUES(`id`='105', `parent_id`='41', `type`='1', `name`='x051.jpg', `path`='files\filesIsubdir2\x051.jpg'),
VALUES(`id`='106', `parent_id`='41', `type`='1', `name`='x052.jpg', `path`='files\filesIsubdir2\x052.jpg'),
VALUES(`id`='107', `parent_id`='0', `type`='1', `name`='Thumbs.db', `path`='files\Thumbs.db'),

Добавлено спустя   9 минут  58 секунд:
Правда существующие записи придется удалять. А так больше мыслей нет, пока что.

Неактивен

#37 2013.01.30 18:21

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

Re: ЗЦ

Тут еще проблема, что при большом кол-ве файлов, получится огромный SQL запрос. А в MySQL есть ограничение на максимальную длину пакета. Не помню сколько там по умолчанию уже, но упереться в нее можно вполне элементарно, я уприался. Т.к. не всегда есть возможность переконфигурять настройки mysql сервера, нужно разбивать большие запросы на несколько частей.
Добавлено спустя    15 секунд:
https://dev.mysql.com/doc/refman/5.5/en … large.html

Неактивен

#38 2013.01.30 18:32

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

Re: ЗЦ

Gemorroj, да это вообще мелочи.
- - - -
Я вот что забыл - возвращать счетчик надо, а то нехорошо получается.
- - - -
Но спасибо за инфу smile

Неактивен

#39 2013.01.30 18:53

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

Re: ЗЦ

Разбить можно ориентируясь на запятая + перенос.
- - - -
Либо сделать массив строк, и их объединять в кол-ве 15-20 например.
Добавлено спустя   4 минуты  10 секунд:
Но это все говнокод, ибо прежние записи не будут иметь смысла.
Кто-то сохранит ссылку на файл, а он уже удален, либо попадет на другой файл. sad

Неактивен

#40 2013.01.30 21:06

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

Re: ЗЦ

Привел в порядок набросок:

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
function dread($parent$cid 0) {
    $pid $cid;
    $values null;
    if (false != ($resource opendir($parent))) {
        while (false != ($name readdir($resource))) {
            if ('.' != $name && '..' != $name) {
                $child $parent DIRECTORY_SEPARATOR $name;
                $type filetype($child);
                $size 'file' == $type filesize($child) : 0;
                $values .= sprintf(
                    "('%d', '%d', '%s', '%s', '%d', '%s'),\r\n",
                    ++$cid$pid$type$name$size$child
                );
                if ('dir' == $type) {
                    $result dread($child$cid);
                    $values .= $result[0];
                    $cid $result[1];
                }
            }
        }
        closedir($resource);
    }
    return array($values$cid);
}


INSERT INTO `downloads`
(`cid`, `pid`, `type`, `name`, `size`, `path`) VALUES
('1', '0', 'file', '0028.jpg', '58234', 'files\0028.jpg'),
('2', '0', 'file', '0029.jpg', '50556', 'files\0029.jpg'),
('3', '0', 'file', '0030.jpg', '75639', 'files\0030.jpg'),
('4', '0', 'file', '0031.jpg', '80291', 'files\0031.jpg'),
('5', '0', 'file', '0032.jpg', '52336', 'files\0032.jpg'),
('6', '0', 'dir', 'filesIsubdir1', '0', 'files\filesIsubdir1'),
('7', '6', 'file', '0002.jpg', '64592', 'files\filesIsubdir1\0002.jpg'),
('8', '6', 'file', '0003.jpg', '42742', 'files\filesIsubdir1\0003.jpg'),
('9', '6', 'file', '0004.jpg', '66215', 'files\filesIsubdir1\0004.jpg'),
('10', '6', 'file', '0005.jpg', '78609', 'files\filesIsubdir1\0005.jpg'),
('11', '6', 'file', '0006.jpg', '93487', 'files\filesIsubdir1\0006.jpg'),
('12', '6', 'dir', 'subdirIsubdir1', '0', 'files\filesIsubdir1\subdirIsubdir1'),
('13', '12', 'file', '0008.jpg', '82337', 'files\filesIsubdir1\subdirIsubdir1\0008.jpg'),
('14', '12', 'file', '0009.jpg', '58664', 'files\filesIsubdir1\subdirIsubdir1\0009.jpg'),
('15', '12', 'file', '0010.jpg', '51855', 'files\filesIsubdir1\subdirIsubdir1\0010.jpg'),
('16', '12', 'file', '0011.jpg', '48906', 'files\filesIsubdir1\subdirIsubdir1\0011.jpg'),
('17', '12', 'file', '0012.jpg', '52826', 'files\filesIsubdir1\subdirIsubdir1\0012.jpg'),
('18', '12', 'file', 'Thumbs.db', '24064', 'files\filesIsubdir1\subdirIsubdir1\Thumbs.db'),
('19', '6', 'dir', 'subdirIsubdir2', '0', 'files\filesIsubdir1\subdirIsubdir2'),
('20', '19', 'file', '0013.jpg', '71313', 'files\filesIsubdir1\subdirIsubdir2\0013.jpg'),
('21', '19', 'file', '0014.jpg', '67984', 'files\filesIsubdir1\subdirIsubdir2\0014.jpg'),
('22', '19', 'file', '0015.jpg', '81952', 'files\filesIsubdir1\subdirIsubdir2\0015.jpg'),
('23', '19', 'file', '0016.jpg', '72860', 'files\filesIsubdir1\subdirIsubdir2\0016.jpg'),
('24', '19', 'file', '0017.jpg', '64694', 'files\filesIsubdir1\subdirIsubdir2\0017.jpg'),
('25', '19', 'dir', '1', '0', 'files\filesIsubdir1\subdirIsubdir2\1'),
('26', '25', 'file', '0018.jpg', '18711', 'files\filesIsubdir1\subdirIsubdir2\1\0018.jpg'),
('27', '25', 'file', '0019.jpg', '74007', 'files\filesIsubdir1\subdirIsubdir2\1\0019.jpg'),
('28', '25', 'file', '0020.jpg', '74350', 'files\filesIsubdir1\subdirIsubdir2\1\0020.jpg'),
('29', '25', 'file', '0021.jpg', '78786', 'files\filesIsubdir1\subdirIsubdir2\1\0021.jpg'),
('30', '25', 'file', '0022.jpg', '48116', 'files\filesIsubdir1\subdirIsubdir2\1\0022.jpg'),
('31', '25', 'dir', 'b', '0', 'files\filesIsubdir1\subdirIsubdir2\1\b'),
('32', '31', 'file', '0023.jpg', '77344', 'files\filesIsubdir1\subdirIsubdir2\1\b\0023.jpg'),
('33', '31', 'file', '0024.jpg', '63458', 'files\filesIsubdir1\subdirIsubdir2\1\b\0024.jpg'),
('34', '31', 'file', '0025.jpg', '65444', 'files\filesIsubdir1\subdirIsubdir2\1\b\0025.jpg'),
('35', '31', 'file', '0026.jpg', '58036', 'files\filesIsubdir1\subdirIsubdir2\1\b\0026.jpg'),
('36', '31', 'file', '0027.jpg', '90343', 'files\filesIsubdir1\subdirIsubdir2\1\b\0027.jpg'),
('37', '31', 'file', 'Thumbs.db', '24576', 'files\filesIsubdir1\subdirIsubdir2\1\b\Thumbs.db'),
('38', '25', 'file', 'Thumbs.db', '24064', 'files\filesIsubdir1\subdirIsubdir2\1\Thumbs.db'),
('39', '19', 'file', 'Thumbs.db', '28672', 'files\filesIsubdir1\subdirIsubdir2\Thumbs.db'),
('40', '6', 'file', 'Thumbs.db', '20480', 'files\filesIsubdir1\Thumbs.db'),
('41', '0', 'dir', 'filesIsubdir2', '0', 'files\filesIsubdir2'),
('42', '41', 'file', '0033.jpg', '70408', 'files\filesIsubdir2\0033.jpg'),
('43', '41', 'file', '0034.jpg', '46991', 'files\filesIsubdir2\0034.jpg'),
('44', '41', 'file', '0037.jpg', '43537', 'files\filesIsubdir2\0037.jpg'),
('45', '41', 'file', '0038.jpg', '63920', 'files\filesIsubdir2\0038.jpg'),
('46', '41', 'file', '0039.jpg', '90721', 'files\filesIsubdir2\0039.jpg'),
('47', '41', 'file', '0040.jpg', '47878', 'files\filesIsubdir2\0040.jpg'),
('48', '41', 'file', '0041.jpg', '83906', 'files\filesIsubdir2\0041.jpg'),
('49', '41', 'file', '0042.jpg', '75864', 'files\filesIsubdir2\0042.jpg'),
('50', '41', 'file', '0043.jpg', '52764', 'files\filesIsubdir2\0043.jpg'),
('51', '41', 'file', '0044.jpg', '64343', 'files\filesIsubdir2\0044.jpg'),
('52', '41', 'file', '0045.jpg', '41389', 'files\filesIsubdir2\0045.jpg'),
('53', '41', 'file', '0046.jpg', '58873', 'files\filesIsubdir2\0046.jpg'),
('54', '41', 'file', '0048-Makhachkala.jpg', '90032', 'files\filesIsubdir2\0048-Makhachkala.jpg'),
('55', '41', 'file', 'Thumbs.db', '225280', 'files\filesIsubdir2\Thumbs.db'),
('56', '41', 'file', 'x002.jpg', '62005', 'files\filesIsubdir2\x002.jpg'),
('57', '41', 'file', 'x003.jpg', '76070', 'files\filesIsubdir2\x003.jpg'),
('58', '41', 'file', 'x004.jpg', '56660', 'files\filesIsubdir2\x004.jpg'),
('59', '41', 'file', 'x005.jpg', '81671', 'files\filesIsubdir2\x005.jpg'),
('60', '41', 'file', 'x006.jpg', '60354', 'files\filesIsubdir2\x006.jpg'),
('61', '41', 'file', 'x007.jpg', '83827', 'files\filesIsubdir2\x007.jpg'),
('62', '41', 'file', 'x008.jpg', '62332', 'files\filesIsubdir2\x008.jpg'),
('63', '41', 'file', 'x009.jpg', '83301', 'files\filesIsubdir2\x009.jpg'),
('64', '41', 'file', 'x010.jpg', '82282', 'files\filesIsubdir2\x010.jpg'),
('65', '41', 'file', 'x011.jpg', '73663', 'files\filesIsubdir2\x011.jpg'),
('66', '41', 'file', 'x012.jpg', '63168', 'files\filesIsubdir2\x012.jpg'),
('67', '41', 'file', 'x013.jpg', '72191', 'files\filesIsubdir2\x013.jpg'),
('68', '41', 'file', 'x014.jpg', '80216', 'files\filesIsubdir2\x014.jpg'),
('69', '41', 'file', 'x015.jpg', '91438', 'files\filesIsubdir2\x015.jpg'),
('70', '41', 'file', 'x016.jpg', '46264', 'files\filesIsubdir2\x016.jpg'),
('71', '41', 'file', 'x017.jpg', '50777', 'files\filesIsubdir2\x017.jpg'),
('72', '41', 'file', 'x018.jpg', '55731', 'files\filesIsubdir2\x018.jpg'),
('73', '41', 'file', 'x019.jpg', '68711', 'files\filesIsubdir2\x019.jpg'),
('74', '41', 'file', 'x020.jpg', '38736', 'files\filesIsubdir2\x020.jpg'),
('75', '41', 'file', 'x021.jpg', '56975', 'files\filesIsubdir2\x021.jpg'),
('76', '41', 'file', 'x022.jpg', '50250', 'files\filesIsubdir2\x022.jpg'),
('77', '41', 'file', 'x023.jpg', '98428', 'files\filesIsubdir2\x023.jpg'),
('78', '41', 'file', 'x024.jpg', '62987', 'files\filesIsubdir2\x024.jpg'),
('79', '41', 'file', 'x025.jpg', '64544', 'files\filesIsubdir2\x025.jpg'),
('80', '41', 'file', 'x026.jpg', '72213', 'files\filesIsubdir2\x026.jpg'),
('81', '41', 'file', 'x027.jpg', '75946', 'files\filesIsubdir2\x027.jpg'),
('82', '41', 'file', 'x028.jpg', '44154', 'files\filesIsubdir2\x028.jpg'),
('83', '41', 'file', 'x029.jpg', '48213', 'files\filesIsubdir2\x029.jpg'),
('84', '41', 'file', 'x030.jpg', '547672', 'files\filesIsubdir2\x030.jpg'),
('85', '41', 'file', 'x031.jpg', '43790', 'files\filesIsubdir2\x031.jpg'),
('86', '41', 'file', 'x032.jpg', '37180', 'files\filesIsubdir2\x032.jpg'),
('87', '41', 'file', 'x033.jpg', '72088', 'files\filesIsubdir2\x033.jpg'),
('88', '41', 'file', 'x034.jpg', '57389', 'files\filesIsubdir2\x034.jpg'),
('89', '41', 'file', 'x035.jpg', '44438', 'files\filesIsubdir2\x035.jpg'),
('90', '41', 'file', 'x036.jpg', '92283', 'files\filesIsubdir2\x036.jpg'),
('91', '41', 'file', 'x037.jpg', '73114', 'files\filesIsubdir2\x037.jpg'),
('92', '41', 'file', 'x038.jpg', '87403', 'files\filesIsubdir2\x038.jpg'),
('93', '41', 'file', 'x039.jpg', '25137', 'files\filesIsubdir2\x039.jpg'),
('94', '41', 'file', 'x040.jpg', '61774', 'files\filesIsubdir2\x040.jpg'),
('95', '41', 'file', 'x041.jpg', '31915', 'files\filesIsubdir2\x041.jpg'),
('96', '41', 'file', 'x042.jpg', '75674', 'files\filesIsubdir2\x042.jpg'),
('97', '41', 'file', 'x043.jpg', '110870', 'files\filesIsubdir2\x043.jpg'),
('98', '41', 'file', 'x044.jpg', '78248', 'files\filesIsubdir2\x044.jpg'),
('99', '41', 'file', 'x045.jpg', '90920', 'files\filesIsubdir2\x045.jpg'),
('100', '41', 'file', 'x046.jpg', '72660', 'files\filesIsubdir2\x046.jpg'),
('101', '41', 'file', 'x047.jpg', '96595', 'files\filesIsubdir2\x047.jpg'),
('102', '41', 'file', 'x048.jpg', '47806', 'files\filesIsubdir2\x048.jpg'),
('103', '41', 'file', 'x049.jpg', '49021', 'files\filesIsubdir2\x049.jpg'),
('104', '41', 'file', 'x050.jpg', '86942', 'files\filesIsubdir2\x050.jpg'),
('105', '41', 'file', 'x051.jpg', '44646', 'files\filesIsubdir2\x051.jpg'),
('106', '41', 'file', 'x052.jpg', '64225', 'files\filesIsubdir2\x052.jpg'),
('107', '0', 'file', 'Thumbs.db', '213504', 'files\Thumbs.db'),

Неактивен

#41 2013.01.30 21:28

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

Re: ЗЦ

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

Неактивен

#42 2013.01.30 21:32

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

Re: ЗЦ

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

Неактивен

#43 2013.01.31 00:22

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

Re: ЗЦ

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

Неактивен

#44 2013.01.31 00:52

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

Re: ЗЦ

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

Неактивен

#45 2013.01.31 01:03

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

Re: ЗЦ

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

Неактивен

#46 2013.01.31 11:49

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

Re: ЗЦ

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

Неактивен

#47 2013.01.31 14:51

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

Re: ЗЦ

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

Неактивен

#48 2013.02.01 10:05

tipsun
Moderator
Зарегистрирован: 2009.10.14
Сообщений: 2279
Карма: 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?php
 
function 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($arraydread($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
Сообщений: 6570
Карма: 107
Профиль Веб-сайт

Re: ЗЦ

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

Неактивен

#50 2013.02.01 11:23

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

Re: ЗЦ

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

Неактивен

#51 2013.02.01 12:29

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

Re: ЗЦ

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

Неактивен

#52 2013.02.01 16:06

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

Re: ЗЦ

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

Код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
 
function 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($arraydread($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
Сообщений: 2279
Карма: 19
Профиль

Re: ЗЦ

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

Неактивен

#54 2013.02.01 21:06

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

Re: ЗЦ

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

Неактивен

#55 2013.02.01 21:22

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

Re: ЗЦ

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

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

Неактивен

#56 2013.02.01 22:21

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

Re: ЗЦ

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

Неактивен

#57 2013.02.02 10:18

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

Re: ЗЦ

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

Неактивен

#58 2013.02.02 10:48

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

Re: ЗЦ

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


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

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

Неактивен

#59 2013.02.02 19:40

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

Re: ЗЦ

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

Неактивен

#60 2013.02.02 20:10

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

Re: ЗЦ

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

Неактивен

#61 2013.02.03 11:51

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

Re: ЗЦ

лучше на гитхаб.

Неактивен

#62 2013.02.03 14:30

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

Re: ЗЦ

https://github.com/tipsun91/downloads.git
Далее у меня в подписи.

Неактивен

#63 2013.02.03 14:49

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

Re: ЗЦ

Пока что только CodeIgniter залил. Пока с ним разберусь много времени уйдет...

Неактивен

#64 2013.02.04 13:09

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

Re: ЗЦ

Залил немного своего кода.
Добавлено спустя   1 минуту  3 секунды:
Не знаю как там драйвер переключить на pdo. В настройках если переключить, то ошибка получается.

Неактивен

#65 2013.02.04 13:16

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

Re: ЗЦ

http://stackoverflow.com/questions/5884 … eigniter-2 посмотри тут. я с CodeIgniter не работал.

Неактивен

#66 2013.02.04 14:47

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

Re: ЗЦ

Gemorroj, спс.
Сейчас попытаюсь сделать.

Неактивен

#67 2013.02.04 22:54

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

Re: ЗЦ

А стоит ли мне вообще делать это зц на фреймворке?
Добавлено спустя   5 минут  42 секунды:
Есть молодой фреймворк "Phalcon". Может на нем лучше, или проще. Или вообще без фреймворка.

Неактивен

#68 2013.02.05 11:00

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

Re: ЗЦ

tipsun, Phalcon означает, что на говнохостингах работать оно не будет. Если ты изначально определяешь, что работать будет только на VDS или выше, где можно поставить нужные PECL модули, то можно попробовать.

Неактивен

#69 2013.02.05 13:47

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

Re: ЗЦ

Спс. Надо будет тогда просто этот фреймворк изучить.
Останусь пока тогда на CI.

Неактивен

#70 2013.02.24 15:46

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

Re: ЗЦ

Новый адрес хранилища. С прежним что-то случилось. Я не стал заморачиваться и по-новой создал.
Теперь там только модули будут к Yii.

Неактивен

#71 2013.02.25 09:45

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

Re: ЗЦ

Наконец разобрался в этом Yii чпу rules.


'<module:\w+>/<parentId:\d+>/<page:\d+>'=>'<module>/default/index'
Если не зарезервировано слово, то получается GET параметр. key:value
Если не указать хоть 1 параметр, то получается каша..

Неактивен

#72 2013.02.25 16:11

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

Re: ЗЦ

Сделал, по подсказке друга, при помощи CActiveDataProvider, все.
Буквально пару строк кода и "вуаля".

Неактивен

#73 2013.02.25 18:39

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

Re: ЗЦ

сравниваю с роутами симфони2

Код:

1
2
3
4
5
6
7
test_json:
pattern: /test/{type}/{filter}/json
defaults: { _controller: WapinetTestBundle:Test:indexJson, _format: json, type: test, filter: all }
requirements:
_scheme: https
type: test|prod
filter: all|old|new

надеюсь по синтаксису понятно, что там происходит. По-моему у симфони2 роуты покрасивее

Неактивен

#74 2013.02.25 21:35

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

Re: ЗЦ

Так вроде бы немного понятно.
Сейчас у меня такое правило для модуля:


'<module:downloads>/<id:\d+>' => '<module>/default/index'

- - - -
Прописывать я научился, а вот ссылки создавать пока не получается нормально.

Неактивен

#75 2013.03.03 20:32

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

Re: ЗЦ

Реализовал правильные ссылки. Вроде.

Неактивен

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

forum.wapinet.ru

PunBB Mod v0.6.2
0.052 s