alex300 / files Goto Github PK
View Code? Open in Web Editor NEWFiles module for Cotonti CMF
Home Page: https://www.cotonti.com/extensions/files-media/files-module
License: BSD 3-Clause "New" or "Revised" License
Files module for Cotonti CMF
Home Page: https://www.cotonti.com/extensions/files-media/files-module
License: BSD 3-Clause "New" or "Revised" License
Members can't create folder in PFS. Only admistartors can.
On a big project we can generate too many folders in datas/files/page, on 1 project using mavatars few years ago i get more than 10000+ folders and it was impossible to manage this folder even by ftp.
На одном из проектов когда то я получил более 10к папок с картинками в папке с маватарами и по ftp зайдя в папку тупо подвисала система. Есть предложение сделать что то вида
datas/files/folio/тут текущий месяц и год создания страницы/id
то есть datas/files/page/0420017/id или что то на подобии этого. И лить все по этому пути и дергать файл так же по этому пути. Можно опционально в конфиге модуля сделать.
Да, в папке _thumbs у меня уже на стадии разработки ад адов - 200 папок, при нагрузке 1000 активных пользователей (сейчас 4 коллеги бета-тестят сайт) прикинул что за год будет около 100к+ папок там.
То есть этот загруженный файл уже нельзя обратно залить не только на сайт на котонти, где есть проверка через стандартный cot_file_check но и на множества других сайтов.
Соответственно есть ряд мыслей
Вар 1
//смотрим какое было расширение файла
//если установлено обязательная конвертация в jpg
//переконвертим файл в то расширение которое было?
Вар 2
//либо смотрим какое расширение сейчас - и $file->file_name меняем расширение
Вар 3
//либо при записи файла поле в БД file_name сразу делать jpg а не то которое было
Смысл в том, что если пользователь с id = 1 и он создает папку для файлов и потом загружает в неё файл то создается не нужная папка там где по идее создается папки с id пользователей.
http://prntscr.com/81ww2z
Она является дубликатом под папки для хранения файлов.
Лечение:
files.upload.php стр: 481
$upload_dir = $this->get_upload_path($source, $item);
меняем на:
$upload_dir = $this->get_upload_path($source, $file->item);
On the version of php 7.2, when you call PFS on the link javascript: files_pfs ('1', 'pageform', 'rpageurl', ''), a warning appears:
на версии php 7.2 при вызове PFS по ссылке javascript:files_pfs('1','pageform','rpageurl','') появляется предупреждение:
Warning: count(): Parameter must be an array or an object that implements Countable in */modules/files/inc/files.pfs.php on line 71
Полезная штука. Правда не понятно почему делается только на миниатюру.
Было бы лучше в админке сделать настройку - накладывать водяной знак и что бы при загрузке - на оригинальное изображение был наложен водяной знак.
Implement file replace without page reload
Нет видимости расширения файла {%=file.ext%} в files.templates.tpl, при том что url, id и другие доступны, например в file.php : 'EXT' => htmlspecialchars($item->file_ext).
Предлагаю добавить в files.upload.php по аналогии.
Пользователь должен иметь возможность удалить свою аватару при редактировании профиля. Тоже и для администратора при редактировании любого пользователя.
Добавить настройку в модуль отвечающую за то, должен ли удаляться файл изображения при удалении аватара или нет. Часто не нужно удалять фотографию пользователя, если она больше не является аватаром.
Здравствуйте, подскажите пожалуйста из-за чего может возникать подобная ошибка при загрузки файла, например для новой страницы
Error SyntaxError: Unexpected token < in JSON at position 0
http://image.prntscr.com/image/8318db443b6c47c192aab5eae063a2f6.png
{PHP|cot_files_filebox('modname', 0, 'files', 'all', '3')}
Указываю ограничение на 3 файла, но добавляется сколько угодно.
https://lily-software.com/forums?m=posts&q=307&d=4#post_10432
https://lily-software.com/forums/10432?m=posts
Проблема:
При параллельной закачке у меня на сайт попадут снимки (в зависимости от веса они в таком порядке закачаются) и получат в БД file_order именно такой. А если это цикл снимков с определенной логикой в порядке отображения (которая обычно отображена в номерции файлов - к примеру если бы в примере были номера 1.jpg 2.jpg и тд это все равно бы ничего не дало - все по весу отсортируется ввтоматом) то вся логика будет убита и после закачки надо открывать и пересортировывать.
Что нужно:
Чтобы файлы загружались в том же порядке, в каком они размещены в форме загрузки да начала отправки на сервер.
Возможное решение:
Вместе с файлом слать на сервер параметр с порядковым номером файла, который и использовать для этих целей.
Дополнительно:
При загрузке файлов к объекту у которого уже есть файлы их можно догружать в конец списка или в начало. Можно сделать опцию в настройках
{PHP|cot_files_filebox('modname', 0, 'files', 'all', '3')}
Загружаю 3 изображения, но не публикую объект ухожу со страницы.
Возвращаюсь на туже страницу загруженных файлов не видно ( ну и ладно ). Но нет возможности загрузить файлы, т.к. вылазит сообщение что лимит исчерпан и это в не зависимости от пользователя.
То есть если 1 пользователь исчерпает лимит, то не только он не сможет загрузить его, но и другие пользователи.
В аттаче такого не было + загруженные файлы появлялись если пользователь загрузил, но объект так и не был создан. То есть если браузер вдруг выбьет, то загруженные файлы появятся.
При редактировании страницы нужно иметь возможность вставлять файлы в текущую позицию курсора в Ckeditor.
Исключительно PFS для этих целей использовать не вполне логично. Лучше загружать файлы с привязкой к данной странице.
Рассмотреть 2 варианта:
Рассмотреть возможность вставки плейсхолдера, который во время парсинга будет заменяться на изображение.
Duplicate lines №928 & 936
Избавиться от префиксов имен полей в БД. Желательно с файлом для миграции на новую версию.
При заливке нового прошлый аватар не удаляется автоматом и висит в корне моих файлов при чем полноразмером. При очистке тоже его не удаляет, это при крупном сайте лишние гб.
Реализовать скачивание файлов средствами web сервера, не привлекая php если это возможно.
Для Apache2 использовать модуль X-SendFile, если установлен. Требуется проверка доступности этого модуля. Это невозможно, если php не загружен как модуль Apache, например как CGI.
Для Nginx использовать X-Accel-Redirect.
Для больших файлов это решает некоторые проблемы, в том числе с ограничениями по ресурсам и производительностью.
@Alex300 еще предложу автоматически прятать кнопки "заменить файл" при создании новой записи, так как все равно ничего полезного (кроме удаления ранее набранного текста и добавленных фото) они не несут. По крайней мере у меня при добавлении нового и замене в этом 1 файла - просто сносит все ранее набранное.
ТОЛЬКО на IOS устройствах при добавлении файла картинки из pfs в поле cke редактора (нажав Мои файлы / Файловый архив сайта) и выбрав файл, при переходе на следующую страницу мы теряем HEADER_BASEHREF. То есть браузеры любые на ipad/iphone считают что их "атакуют." На стандартном Сафари в компе - все норм.
Подробнее про это http://stackoverflow.com/questions/17016960/chromiums-xss-auditor-refused-to-execute-a-script
И лечиться это (через опу конечно) добавлением в htaccess Header set X-XSS-Protection 0
Хотелось бы вылечить правильно но не хватило ума.
Добрый день,
после обновления модуля до версии 1.0.3 (была 1.0.1) и библиотеки cotontilib до 2.0 перестали работать все функции. Пробовал на тестовом локально, потом пробовал на чистой версии на сервере, ошибка происходит в момент вызова функции, как при добавлении/редактировании, так и на странице вызова.
Parse error: syntax error, unexpected '[', expecting ')' in **************\lib\Component.php on line 280
In files.parser.php $files_item_cache is not implemented yet in files_model_File?
Лечение: files.upload.php в стр: 588 и 589 заменить
files_model_File::tableName()
на
files_model_File::getTableName()
cot_files_thumb() пытается создать миниатюру изображения при помощи функции cot_files_thumbnail().
Но если исходного файла не существует. Например случайно удален с диска, а запись в БД осталась, или возникла ошибка и файл не записался. То после вызова этой функции, вызывается
list($th_width, $th_height) = getimagesize($thumb_path);
Которая выдает
<b>Warning</b>: getimagesize(datas/files/_thumbs/2819/file_2819-160x160-crop.jpg): failed to open stream
: No such file or directory in <b>/path_to_site/modules/files/inc
/files.functions.php</b> on line <b>573</b><br />
Особенно это мешает при загрузке миниатюр через Ajax
Второй момент, когда из-за нехватки ресурсов может прерваться переименование файла и останется файл и с оригинальным именем и с новым. Нужно удалять ненужное.
https://github.com/Alex300/files/blob/master/files/inc/files.admin.main.php#L196
удаляем page в корзину, клинап экшн и файлы от этой пейдж отвалятся
При удалении страницы в корзину и последующем удалении из корзины файлы могут не удалиться.
Приходится использовать уборку мусора.
Это актуально для форумов и для страниц
Можно использовать что то вроде этого:
https://onlinephp.io/c/99a81
P.S. Что самое интересное, модуль вообще не поддерживает корзину. А мне сообщают об ошибках :)
Ошибка в файле files.functions.php в строке 575 - отсутствие сравнения высоты изображения, в результате чего водяной знак накладывается в любом случае:
if($th_width >= cot::$cfg['files']['thumb_wm_widht'] || cot::$cfg['files']['thumb_wm_height']){
Для исправления достаточно добавить значение из конфига:
if($th_width >= cot::$cfg['files']['thumb_wm_widht'] || $th_height >= cot::$cfg['files']['thumb_wm_height']){
If the image size reduction after loading ends with error, for example due to lack of memory, the script should not "fall" with the 500 error.
It is needed to use try/catch and in 'catch' roll back all changes, delete unneeded entry in the database, delete unneded uploaded file and show the error message to the user.
Если уменьшение размеров изображения при загрузке заканчивается ошибкой, например из-за нехватки памяти, скрипт не должен "падать" с 500-ой ошибкой. Нужно использовать try/catch, откатить все изменения, удалить лишнюю запись в БД, удалить не нужный более загруженный файл и показать сообщение об ошибке пользователю.
Предложу в исходниках улучшить поле "заменить файл" - то что есть сейчас автоматом подтягивает стили браузера и ос и выглядит местами не красиво.
<input type="file" name="replacement" class="files-replace-file inputfile inputfile-3" data-id="{%=file.id%}" id="files-file{%=file.id%}"> <label for="files-file{%=file.id%}"><i class="fa fa-refresh fa-border _margin-right-10" aria-hidden="true"></i><span>{PHP.L.files_replace}…</span></label>
.inputfile { width: 0.1px; height: 0.1px; opacity: 0; overflow: hidden; position: absolute; z-index: -1; } .inputfile + label { max-width: 80%; text-overflow: ellipsis; white-space: nowrap; cursor: pointer; display: inline-block; overflow: hidden; } .inputfile-3 + label { color: #0275d8; }
В редактор вставлять большую миниатюру вместо оригинального изображения. Предельные размеры можно брать из настроек модуля.
Это нужно для наложения водяного знака на все выводимые изображения.
Попробовать использовать placeholders (shortcodes).
Если включена опция "Конвертировать все изображения в JPG при закачке", то не конвертируются изображения в формате JPEG. Хоть они и идентичные, но само название опции подразумевает конвертацию всех изображений в JPG.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.