Вы не зашли.
Главная » PHP » ЗЦ
#31. tipsun Off (19)
Moderator
2011.05.02 20:08
Ну не знаю. Я оказывается неправильно код пишу.
Akdmeh отозвался на другом форуме, за что ему спасибо. Он написал, что у меня неправильный подход к построению кода.
Я теперь вообще растерян...
Отредактировано tipsun (2011.05.02 20:08)
#32. POFIGISST Off (6)
Участник
2011.05.02 21:09
Хорошо хоть мой говнокод пока никто не видитbig_smile
#33. tipsun Off (19)
Moderator
2013.01.29 22:10
Хочу попробовать написать загрузчик, который бы не относился к говнокоду.
Есть 2 мысли:
1) Читать прямо с папок, но кешировать страницы.
2) Читать с базы, может еще и кешировать страницы.
- - - -
Таблица с файлами и папками выглядит так:
Показать скрытый текст

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

Функция сканирования выглядит так:
Но есть сомнения, стоит ли так делать, вдруг, как говориться, захочется что-то изменить.
Есть мысль сделать простую функцию, которая с нужной папки все просканирует и выдаст одномерный массив, после специальным классом или еще чем все элементы перебрать и установить параметры и прочее.
Код:
span style="color: #0000BB"><?phpclass 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 ? 0 : filesize($child), 'extension' => $isDir ? null : pathinfo($name, PATHINFO_EXTENSION), 'visible' => true, 'description' => null, 'fixed' => null ); } } closedir($resource); } return $array; }}
Добавлено спустя   5 минут  29 секунд:
Может стоит сделать как на форуме, после того, как просканировал, переименовывать файл в <md5>.ext чтоб вести статистику скачиваний итд. А еще есть и ссылки =/
#34. Gemorroj Off (107)
Administrator
2013.01.29 23:11
такое ощущение, что ты эту табличку из sea брал. необходимо еще хранить id родительской категории.
#35. tipsun Off (19)
Moderator
2013.01.30 00:12
Я заглядывал в sea, но базу я вроде не смотрел. И то я заглядывал, чтоб посмотреть как там сканирование идет.
Добавлено спустя   1 минуту  41 секунду:
Gemorroj написал:
необходимо еще хранить id родительской категории.
Ох, ну озадачил, так озадачил. =/
Добавлено спустя   9 минут  16 секунд:
Да, а то такая же папка может быть в другой категории и получится каша.
#36. tipsun Off (19)
Moderator
2013.01.30 18:06
Вот выдал мой мозг загагулину, не уверен что верно.
Код:
span style="color: #0000BB"><?phpfunction 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) ? 1 : 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);}
Показать скрытый текст

Добавлено спустя   9 минут  58 секунд:
Правда существующие записи придется удалять. А так больше мыслей нет, пока что.
#37. Gemorroj Off (107)
Administrator
2013.01.30 18:06
Тут еще проблема, что при большом кол-ве файлов, получится огромный SQL запрос. А в MySQL есть ограничение на максимальную длину пакета. Не помню сколько там по умолчанию уже, но упереться в нее можно вполне элементарно, я уприался. Т.к. не всегда есть возможность переконфигурять настройки mysql сервера, нужно разбивать большие запросы на несколько частей.
Добавлено спустя    15 секунд:
https://dev.mysql.com/doc/refman/5.5/en … large.html
#38. tipsun Off (19)
Moderator
2013.01.30 18:06
Gemorroj, да это вообще мелочи.
- - - -
Я вот что забыл - возвращать счетчик надо, а то нехорошо получается.
- - - -
Но спасибо за инфу smile
#39. tipsun Off (19)
Moderator
2013.01.30 18:06
Разбить можно ориентируясь на запятая + перенос.
- - - -
Либо сделать массив строк, и их объединять в кол-ве 15-20 например.
Добавлено спустя   4 минуты  10 секунд:
Но это все говнокод, ибо прежние записи не будут иметь смысла.
Кто-то сохранит ссылку на файл, а он уже удален, либо попадет на другой файл. sad
#40. tipsun Off (19)
Moderator
2013.01.30 21:09
Привел в порядок набросок:
Код:
span style="color: #0000BB"><?phpfunction 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);}
Показать скрытый текст
Страниц: 1 2 3 4 5 68 Все
Главная
WEB
PunBB Mod v0.6.2
0.017 s