# AlkatraZ (23.08.2016 / 00:07)
Это давно запилено в mobiCMS, а в Джоне этого не будет, нет смысла.
в джоне и не за чем городить мегафункционал на этом участке, надо просто избавится от нынешнего аплоадера ибо он откровенно мешает. тут сгодится любой аплоадер, и чем он проще будет, тем проще с ним общаться будет мододелам, по моему для джона это одно из важнейших условий
Да все понятно с Вами. Бессмысленно Вам что-то предлагать. Делайте все в один файлик, так же будет удобно для ramzes, ValekS и других.
А лучше пусть Вам тогда напишет все ramzes с его мега способностями программирования, он же опытный, программировал когда я еще под стол пешком ходил
:
}else{
...
}
}else{
...
}
$upload->deleteTmpFile();
}else{
...
}
}else{
...
}
}else{
....
}
# Jahak (23.08.2016 / 06:25)
Да все понятно с Вами. Бессмысленно Вам что-то предлагать. Делайте все в один файлик, так же будет удобно для ramzes, ValekS и других.
А лучше пусть Вам тогда напишет все ramzes с его мега способн
троллинг в серьёзном разделе - предупреждение!
Jahak, пустозвон, ты че сказать то имеешь? есть конкретные замечания? озвучивай, нет? проходи мимо.
Delphinum, действительно, можно же в мемкеш таблицу файлов слить, там структура то у таблицы простейшая
можно всю целиком, а можно и по ключам)
подумаю))
ramzes, делал как то кэш файлов и отчистку по времени
не ttl, на основе времени создания файла и как раз хеши применял
пример (+/-)
class Kcache extends KimageUtils {
private $file;
public $uploadDir = 'upload';
public $test = '';
public function __construct($source, $x, $y) {
$image = imagecreatetruecolor($x, $y);
$this->transparent($image);
imagecopyresampled($image, $source, 0, 0, 0, 0, $x, $y, $x, $y);
$tmpfile = tempnam($this->uploadDir . '/tmp', 'bb_');
imagepng($image, $tmpfile, 9, PNG_ALL_FILTERS);
$md5 = md5_file($tmpfile);
if (!file_exists($this->uploadDir . '/' . $md5 . '.png')) {
file_put_contents($this->uploadDir . '/' . $md5 . '.png', file_get_contents($tmpfile));
} // тут обработка дубля
unlink($tmpfile);
$this->file = $this->uploadDir . '/' . $md5 . '.png';
}
public function getFile() {
return $this->file;
}
public function base64() {
return $this->output_base64(file_get_contents($this->getFile()));
}
public function clearCache($per) {
$periods = array(
'i' => 60,
'h' => 3600, // i*60
'd' => 86400, // h*24
'w' => 604800, // d*7
'm' => 2419200, // w*30
'y' => 29030400, // m*12
);
$per = strtolower($per);
$int = abs(intval($per[0]));
$int = $int > 0 ? $int : 1;
$lit = array_key_exists($per[1], $periods) ? $per[1] : 'y';
$period = time() - ($int * $periods[$lit]);
foreach(new DirectoryIterator($this->uploadDir . '/') as $fileInfo) { // TODO: GlobItertor
if (preg_match('/^(.*.png)$/i', $fileInfo->getFilename()) && ($fileInfo->getMTime() < $period)) {
unlink($this->uploadDir . '/' . $fileInfo->getFilename());
}
}
}
}
ну и юзать
#$cache->clearCache('1i'); // 2y , 3m, 5h ....
# ramzes (23.08.2016 / 14:26)
Delphinum, действительно, можно же в мемкеш таблицу файлов слить, там структура то у таблицы простейшая можно всю целиком, а можно и по ключам)
подумаю))
Сливать таблицу в кэш нет смысла.
Если сливаешь всю таблицу, то на кой хрен тогда база? Нельзя подменять понятия.
Частично слить ты не сможешь, ибо не знаешь, какой запрос поступит.
При оптимальной систематизации таблиц (отдельная таблица для структуры и отдельная для описаний файлов и правильные ключи), достигается вполне приемлемая производительность, даже если несколько миллионов файлов. На крайняк применяешь Редиску
А вот в сильно нагруженных системах (десятки-сотни тысяч, или миллионы файлов) нужно уже заботиться не о таблицах (допустим, что они разбиты правильно и хорошие ключи), а о самом хранении файлов. Дело в том, что если в одном каталоге хранится более 2000 файлов, возникают заметные тормоза на уровне операционной системы, тем большие, чем меньше память у сервера на файловый кэш. Цифра приблизительна, но сама суть проблемы есть.
Альк, а 10тикратное ускорение ты как бэ не учитываешь?)
в то же время нельзя не хранить данные в мускул, мемкеш может очистить данные при переполнении или просто истечении жизни ключа.
частично и не надо. это лишено смысла, всю таблицу полностью
редиска аналог мемкеша
ты предлагаешь заменить шило на мыло.
данные о файле ни какие не нужны, хранилище только хранит, данные уже не его забота
___
таблица позволила бы хранить файлы даже удаленно, не то что разбросать их по 100500 каталогам
Koenig, физический проход по каталогу + чтение атребутов (время создания) +регулярка на фильтре имени файла.
плохо скажется на большом кол-ве файлов
# ramzes (23.08.2016 / 15:29)
Альк, а 10тикратное ускорение ты как бэ не учитываешь?)
На кой оно тебе?
По большей части будет запрос на 1 файл.
Даже, если их хранится миллион, клиент загружает только один (надеюсь картинки для интерфейса там хранить не будем гг). В большинстве случаев мы знаем ID файла, это уникальное ключевое поле и выборка идет максимально быстро.