вложения (файлы) к сообщениям

phpBB но не только...

Модераторы: Olej, adminn

Аватара пользователя
Olej
Писатель
Сообщения: 14878
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

вложения (файлы) к сообщениям

Непрочитанное сообщение Olej » 25 янв 2020, 20:35

Относительно вложений (прикрепляемых к сообщениям файлам) уже обсуждалось (и изменялось) за годы существования форума:
прикрепляемые файлы: расширения и ограничения

Но ...
- форум прошёл очень существенную реконструкцию, сменился хостинг, вместо виртуального хостинга он теперь размещён на отдельном виртуальном облачном сервере, VDS ...
- обсуждения те довольно старые ... чего старое ворошить? ;-) подымать старые темы?

В отношении вложений важно навести порядок (внести ясность) по следующим вопросам:
1. какие по типам расширения файлы могут прикрепляться к сообщениям?
2. какой максимальный допустимый размер файлов вложений? зависит он от типа файла?
3. возникают, временами, потерянные вложения ... из-за халявного администрирования от случая к случаю - с ними нужно навести порядок: либо удалить, либо прикрепить к тем конкретным сообщениям, которым они предназначались.

Аватара пользователя
Olej
Писатель
Сообщения: 14878
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: вложения (файлы) к сообщениям

Непрочитанное сообщение Olej » 25 янв 2020, 21:00

Olej писал(а):
25 янв 2020, 20:35
1. какие по типам расширения файлы могут прикрепляться к сообщениям?
Там много разных людей и много лет дополняли, изменяли, редактировали...
В итоге разрешённые расширения файлов по группам расширений приписаны так (чтобы знать заранее и не напарываться непосредственно при вложении):

Изображения:
bmp gif jpeg jpg pgm png tga tif tiff xcf
Архивы:
7z ace bz2 gtar gz rar tar tgz zip
Текстовые файлы:
csv diz hist ini log lst txt xml
Документы:
ai doc docm docx dot dotm dotx odg odp ods odt pdf ppt pptm pptx ps rtf xls xlsb xlsm xlsx
Файлы Flash:
flv swf
Скачиваемый файлы:
apk dat djvu ogm torrent
Программный код:
c cc conf cpp f go h hpp hs ino java js kt lua ml php pm py pyx rb rs scala scb scm sh swift tcl
Аудио:
mid midi mp3 ogg raw spx wav
Мультимедиа:
avi mov mp4 mpeg mpg webm
не назначена категория:
3g2 3gp m4a m4v qt
Явно видно, что там много лишнего ... но это не я дополнял, и нужно ли это подчищать - пока не уверен.

Аватара пользователя
Olej
Писатель
Сообщения: 14878
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: вложения (файлы) к сообщениям

Непрочитанное сообщение Olej » 25 янв 2020, 21:08

Olej писал(а):
25 янв 2020, 20:35
2. какой максимальный допустимый размер файлов вложений? зависит он от типа файла?
На админстранице phpBB в "Настройки вложений" для "Максимальный размер файла" указано 0.
В примечании к этому параметру записано:
Максимальный размер каждого загружаемого файла. Если значение равно 0, размер файла ограничен только конфигурацией PHP.

Но вот только недавно (может после обновления phpBB до 3.2.8) обнаружено, что вложения-изображения (.jpg, .png) размером больше ~2.5Mb создают ошибку.
С этим нужно разбираться!

Аватара пользователя
Olej
Писатель
Сообщения: 14878
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: вложения (файлы) к сообщениям

Непрочитанное сообщение Olej » 25 янв 2020, 21:12

Olej писал(а):
25 янв 2020, 20:35
3. возникают, временами, потерянные вложения ... из-за халявного администрирования от случая к случаю - с ними нужно навести порядок: либо удалить, либо прикрепить к тем конкретным сообщениям, которым они предназначались.
На сегодня, за 10 лет работы форума (довольно бесконтрольной) потерянные вложения выглядят так:
f1.png
Собственно, нужно разобрать 13 вложений, и добавленных в последние 1/2 года (в период особой бесхозности).

Аватара пользователя
Olej
Писатель
Сообщения: 14878
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: вложения (файлы) к сообщениям

Непрочитанное сообщение Olej » 25 янв 2020, 22:30

Olej писал(а):
25 янв 2020, 20:35
3. возникают, временами, потерянные вложения ... из-за халявного администрирования от случая к случаю - с ними нужно навести порядок: либо удалить, либо прикрепить к тем конкретным сообщениям, которым они предназначались.
Разбираюсь со структурой БД и файлов вложений в phpBB...
(это служебная информация, которая может быть минимально интересна только тем, кто работает с конференциями под управлением phpBB)

Вложенные файлы находятся в подкаталоге files, отсчитываемом от корневого каталога конференции:

Код: Выделить всё

root@277938:/var/www/linux-ru.ru/files# pwd
/var/www/linux-ru.ru/files

root@277938:/var/www/linux-ru.ru/files# ls -l | wc -l
5836
Вот там сколько файлов (там ещё есть пару-тройка служебных файлов... .htaccess, files.zip, ... )!
Т.е. все файлы вложений в phpBB - переименованы, а соответствие их реальным именам файлов (как они помещались во вложения), темам и сообщениям, к которым они прикреплены - всё это находится в базе данных MySQL (в реализации MariaDB):

Код: Выделить всё

olej@277938:~$ mysql --version
mysql  Ver 15.1 Distrib 10.3.18-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

Аватара пользователя
Olej
Писатель
Сообщения: 14878
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: вложения (файлы) к сообщениям

Непрочитанное сообщение Olej » 25 янв 2020, 22:47

Olej писал(а):
25 янв 2020, 22:30
Т.е. все файлы вложений в phpBB - переименованы, а соответствие их реальным именам файлов (как они помещались во вложения), темам и сообщениям, к которым они прикреплены - всё это находится в базе данных MySQL (в реализации MariaDB):
См. начало списка файлов, от самых больших к меньшим:

Код: Выделить всё

olej@277938:/var/www/linux-ru.ru/files$ ls -l -S | head -n20
итого 1137676
-rw-r--r-- 1 www-data www-data 106286599 дек 22 01:20 11018_a5775236643fc95166f4fd9e3e8005e1
-rw-r--r-- 1 www-data www-data  66433524 дек 22 01:16 files.zip
-rw-r--r-- 1 www-data www-data  47272089 дек 22 01:19 4065_7da5d7a86f5943115aa0197608b3ab6b
-rw-r--r-- 1 www-data www-data  14426203 дек 22 01:25 4065_442d457b2de43d143da50ab79cab2074
-rw-r--r-- 1 www-data www-data  13506394 дек 22 01:19 4065_44bfeb492d1e87ba67cf5c5c50905d22
-rw-r--r-- 1 www-data www-data  12497904 дек 22 01:18 4065_1abbec50608b859580cd7e94e8685ada
-rw-r--r-- 1 www-data www-data  12222464 дек 22 01:16 4065_c6d761ef1fd20c4d87002d8181cf49c2
-rw-r--r-- 1 www-data www-data  10733663 дек 22 01:15 4065_02df78b348cfb6cbbaa65165998bc31e
-rw-r--r-- 1 www-data www-data  10606820 дек 22 01:23 4065_42835060018ed74fe3bb89d7f8c961b3
-rw-r--r-- 1 www-data www-data   9404751 дек 22 01:21 4065_5e411ebe8a4a13595c7f006c0c8f7f50
-rw-r--r-- 1 www-data www-data   8840207 дек 22 01:18 4065_ef372248a5f279ae5bd6136b7c8490d6
-rw-r--r-- 1 www-data www-data   8507318 дек 22 01:16 4065_bd4eea5a7b60c90802865ff2527c7797
-rw-r--r-- 1 www-data www-data   8018572 дек 22 01:24 4065_d0506484b21d0ccf5cc2b4e1be9d9f5b
-rw-r--r-- 1 www-data www-data   7643852 дек 22 01:16 4065_be6858e541a6221ef1d56ec7482a4de1
-rw-r--r-- 1 www-data www-data   7458068 дек 22 01:15 4065_d52e4113806f42e2550f86da8984e421
-rw-r--r-- 1 www-data www-data   6758664 дек 22 01:14 4081_fad3e69aa02ec2621f10a85ced06629d
-rw------- 1 www-data www-data   6730140 дек 22 01:25 4065_6b70017598e901c8195e3d25990867d7
-rw-r--r-- 1 www-data www-data   6499453 дек 22 01:19 4065_a9ff27b0b7aa8c55d7e1535063300fb3
-rw-r--r-- 1 www-data www-data   5693768 дек 22 01:22 4065_6cd4e992a08f5315252fde8e82c41eee
Как видно, файлы хранятся без расширений, с хэшированными именами, самые разные по типам файлы ... и установить их принадлежность к типу содержимого - нужна БД:

Код: Выделить всё

olej@277938:/var/www/linux-ru.ru/files$ file 11018_a5775236643fc95166f4fd9e3e8005e1
11018_a5775236643fc95166f4fd9e3e8005e1: gzip compressed data, last modified: Thu Jun 14 10:04:07 2012, max compression, from Unix, original size 527605760

olej@277938:/var/www/linux-ru.ru/files$ file 4065_7da5d7a86f5943115aa0197608b3ab6b
4065_7da5d7a86f5943115aa0197608b3ab6b: PDF document, version 1.6

olej@277938:/var/www/linux-ru.ru/files$ file 4065_6cd4e992a08f5315252fde8e82c41eee
4065_6cd4e992a08f5315252fde8e82c41eee: ISO Media, MPEG v4 system, 3GPP

olej@277938:/var/www/linux-ru.ru/files$ file 4065_a9ff27b0b7aa8c55d7e1535063300fb3
4065_a9ff27b0b7aa8c55d7e1535063300fb3: DjVu multiple page document

olej@277938:/var/www/linux-ru.ru/files$ file 4065_6b70017598e901c8195e3d25990867d7
4065_6b70017598e901c8195e3d25990867d7: gzip compressed data, last modified: Tue Dec 18 15:14:20 2018, from Unix, original size 6748160
P.S. Фиксируем тот факт, что размер многих файлов вложений, помещённых когда-то в форум, значительно превышают (106Mb) то ограничение (2.5Mb), которое форум сегодня (phpBB 3.2.8) накладывает на файлы, по крайней мере изображений... Но это вопрос для дальнейших отдельных разборок...

Аватара пользователя
Olej
Писатель
Сообщения: 14878
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: вложения (файлы) к сообщениям

Непрочитанное сообщение Olej » 25 янв 2020, 22:52

Olej писал(а):
25 янв 2020, 22:30
всё это находится в базе данных MySQL (в реализации MariaDB):
Переходим к БД - самое интересное место...
Конкретные параметры БД в phpBB читаем в файле config.php (все разговоры про корневой каталог форума):

Код: Выделить всё

olej@277938:~$ cat /var/www/linux-ru.ru/config.php 
<?php
// phpBB 3.0.x auto-generated configuration file
// Do not change anything in this file!

$dbms = 'mysqli';
$dbhost = 'localhost';
$dbport = '';
$dbname = 'forum';
$dbuser = 'xxxxxxxx';
$dbpasswd = 'zzzzzzzz';
$table_prefix = 'rlf1_';
$acm_type = 'file';
$load_extensions = '';
...
Этого достаточно для того, чтобы открыть БД:

Код: Выделить всё

olej@277938:~$ sudo mysql -u xxxxxxxx --password=zzzzzzzz
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 12953
Server version: 10.3.18-MariaDB-0+deb10u1 Debian 10

Код: Выделить всё

MariaDB [(none)]> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| forum              |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.005 sec)
Выбрали свой форум:

Код: Выделить всё

MariaDB [(none)]> use forum
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [forum]> show tables;
+--------------------------+
| Tables_in_forum          |
+--------------------------+
| rl_comments              |
| rl_eval                  |
| rl_pages                 |
| rlf1_acl_groups          |
| rlf1_acl_options         |
| rlf1_acl_roles           |
| rlf1_acl_roles_data      |
| rlf1_acl_users           |
| rlf1_attachments         |
| rlf1_banlist             |
| rlf1_bbcodes             |
| rlf1_bookmarks           |
| rlf1_bots                |
| rlf1_captcha_answers     |
| rlf1_captcha_questions   |
| rlf1_clicks              |
| rlf1_config              |
| rlf1_config_text         |
| rlf1_confirm             |
| rlf1_disallow            |
| rlf1_drafts              |
| rlf1_ext                 |
| rlf1_extension_groups    |
| rlf1_extensions          |
| rlf1_forums              |
| rlf1_forums_access       |
| rlf1_forums_track        |
| rlf1_forums_watch        |
| rlf1_groups              |
| rlf1_icons               |
| rlf1_lang                |
| rlf1_log                 |
| rlf1_login_attempts      |
| rlf1_migrations          |
| rlf1_moderator_cache     |
| rlf1_modules             |
| rlf1_notification_types  |
| rlf1_notifications       |
| rlf1_oauth_accounts      |
| rlf1_oauth_states        |
| rlf1_oauth_tokens        |
| rlf1_poll_options        |
| rlf1_poll_votes          |
| rlf1_posts               |
| rlf1_privmsgs            |
| rlf1_privmsgs_folder     |
| rlf1_privmsgs_rules      |
| rlf1_privmsgs_to         |
| rlf1_profile_fields      |
| rlf1_profile_fields_data |
| rlf1_profile_fields_lang |
| rlf1_profile_lang        |
| rlf1_qa_confirm          |
| rlf1_ranks               |
| rlf1_register_log        |
| rlf1_reports             |
| rlf1_reports_reasons     |
| rlf1_search_results      |
| rlf1_search_wordlist     |
| rlf1_search_wordmatch    |
| rlf1_sessions            |
| rlf1_sessions_keys       |
| rlf1_sitelist            |
| rlf1_smilies             |
| rlf1_styles              |
| rlf1_teampage            |
| rlf1_topics              |
| rlf1_topics_posted       |
| rlf1_topics_track        |
| rlf1_topics_watch        |
| rlf1_user_group          |
| rlf1_user_notifications  |
| rlf1_users               |
| rlf1_warnings            |
| rlf1_words               |
| rlf1_zebra               |
+--------------------------+
76 rows in set (0.001 sec)

Аватара пользователя
Olej
Писатель
Сообщения: 14878
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: вложения (файлы) к сообщениям

Непрочитанное сообщение Olej » 25 янв 2020, 22:58

Olej писал(а):
25 янв 2020, 22:52
Выбрали свой форум:
Для вложений из всего форума нас интересует только таблица:

Код: Выделить всё

MariaDB [forum]> DESCRIBE rlf1_attachments;
+-------------------+-----------------------+------+-----+---------+----------------+
| Field             | Type                  | Null | Key | Default | Extra          |
+-------------------+-----------------------+------+-----+---------+----------------+
| attach_id         | int(10) unsigned      | NO   | PRI | NULL    | auto_increment |
| post_msg_id       | int(10) unsigned      | NO   | MUL | 0       |                |
| topic_id          | int(10) unsigned      | NO   | MUL | 0       |                |
| in_message        | tinyint(1) unsigned   | NO   |     | 0       |                |
| poster_id         | int(10) unsigned      | NO   | MUL | 0       |                |
| is_orphan         | tinyint(1) unsigned   | NO   | MUL | 1       |                |
| physical_filename | varchar(255)          | NO   |     |         |                |
| real_filename     | varchar(255)          | NO   |     |         |                |
| download_count    | mediumint(8) unsigned | NO   |     | 0       |                |
| attach_comment    | text                  | NO   |     | NULL    |                |
| extension         | varchar(100)          | NO   |     |         |                |
| mimetype          | varchar(100)          | NO   |     |         |                |
| filesize          | int(20) unsigned      | NO   |     | 0       |                |
| filetime          | int(11) unsigned      | NO   | MUL | 0       |                |
| thumbnail         | tinyint(1) unsigned   | NO   |     | 0       |                |
+-------------------+-----------------------+------+-----+---------+----------------+
15 rows in set (0.006 sec)

Код: Выделить всё

MariaDB [forum]> SELECT COUNT(*) FROM rlf1_attachments;
+----------+
| COUNT(*) |
+----------+
|     3693 |
+----------+
1 row in set (0.000 sec)
Все поля (они нам все не нужны!) посмотрим 1 раз для 1-й записи:

Код: Выделить всё

MariaDB [forum]> SELECT * FROM rlf1_attachments WHERE physical_filename = "11018_a5775236643fc95166f4fd9e3e8005e1"; 
+-----------+-------------+----------+------------+-----------+-----------+----------------------------------------+------------------+----------------+----------------+-----------+------------------+-----------+------------+-----------+
| attach_id | post_msg_id | topic_id | in_message | poster_id | is_orphan | physical_filename                      | real_filename    | download_count | attach_comment | extension | mimetype         | filesize  | filetime   | thumbnail |
+-----------+-------------+----------+------------+-----------+-----------+----------------------------------------+------------------+----------------+----------------+-----------+------------------+-----------+------------+-----------+
|      2575 |       17985 |     1311 |          0 |     11018 |         0 | 11018_a5775236643fc95166f4fd9e3e8005e1 | gcc-4.7.1.tar.gz |             59 |                | gz        | application/gzip | 106286599 | 1496914374 |         0 |
+-----------+-------------+----------+------------+-----------+-----------+----------------------------------------+------------------+----------------+----------------+-----------+------------------+-----------+------------+-----------+
1 row in set (0.002 sec)
Тут всё становится понятно...
Нужные нам поля:

Код: Выделить всё

MariaDB [forum]> SELECT post_msg_id,topic_id,physical_filename,real_filename FROM rlf1_attachments limit 1,5; 
+-------------+----------+---------------------------------------+-----------------+
| post_msg_id | topic_id | physical_filename                     | real_filename   |
+-------------+----------+---------------------------------------+-----------------+
|        6037 |     1976 | 4065_2497f08530ae6e747635b9654561f012 | chart2.png      |
|        1723 |     1388 | 3832_9da978eda562a214330d2e320c8512ee | nfsuserver.rar  |
|        2104 |     1498 | 4065_32d834b2c05feae5a696e1724976740c | nvidia.info.png |
|        1985 |     1476 | 4030_30b474da9d060c2af4bd70a69a9fbaf6 | mc.JPG          |
|        1989 |     1476 | 4030_e6d745f8fc25e7ed66d53c297283e0d5 | localeru.JPG    |
+-------------+----------+---------------------------------------+-----------------+
5 rows in set (0.001 sec)
Прекрасно видно как имя файла в каталоге files phpBB (physical_filename) соотносится с реальным именем файла (real_filename), с которым он помещался в форум.

Аватара пользователя
Olej
Писатель
Сообщения: 14878
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: вложения (файлы) к сообщениям

Непрочитанное сообщение Olej » 25 янв 2020, 23:03

Olej писал(а):
25 янв 2020, 22:58
Прекрасно видно как имя файла в каталоге files phpBB (physical_filename) соотносится с реальным именем файла (real_filename), с которым он помещался в форум.
Ну а дальше разобраться (найти их) с потерянными вложениями совсем просто... беру последнее имя из скрина выше:

Код: Выделить всё

MariaDB [forum]> SELECT post_msg_id,topic_id,physical_filename,real_filename FROM rlf1_attachments WHERE real_filename = "Снимок экрана от 2019-10-01 00-32-19.png"; 
+-------------+----------+---------------------------------------+--------------------------------------------------------+
| post_msg_id | topic_id | physical_filename                     | real_filename                                          |
+-------------+----------+---------------------------------------+--------------------------------------------------------+
|           0 |        0 | 4065_05ab645f8f2516c74fdc9ee01494627a | Снимок экрана от 2019-10-01 00-32-19.png               |
|       22562 |     4220 | 4065_72f4ebf7552ab3010a4f41cbb62158a0 | Снимок экрана от 2019-10-01 00-32-19.png               |
+-------------+----------+---------------------------------------+--------------------------------------------------------+
2 rows in set (0.002 sec)
Во как интересно! Таких файлов 2 - 1 некорректно удалённый при правках, и не привязанный ни к какому сообщению (post_msg_id) и теме(topic_id).
Лишнее удаляем:

Код: Выделить всё

MariaDB [forum]> DELETE from rlf1_attachments where real_filename = "Снимок экрана от 2019-10-01 00-32-19.png" AND topic_id = '0';
Query OK, 1 row affected (0.005 sec)
Вот его уже и нет:

Код: Выделить всё

MariaDB [forum]> SELECT post_msg_id,topic_id,physical_filename,real_filename FROM rlf1_attachments WHERE real_filename = "Снимок экрана от 2019-10-01 00-32-19.png"; 
+-------------+----------+---------------------------------------+--------------------------------------------------------+
| post_msg_id | topic_id | physical_filename                     | real_filename                                          |
+-------------+----------+---------------------------------------+--------------------------------------------------------+
|       22562 |     4220 | 4065_72f4ebf7552ab3010a4f41cbb62158a0 | Снимок экрана от 2019-10-01 00-32-19.png               |
+-------------+----------+---------------------------------------+--------------------------------------------------------+
1 row in set (0.002 sec)
И вот их уже не 13, а 12:
Вложения
f2.png

Аватара пользователя
Olej
Писатель
Сообщения: 14878
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: вложения (файлы) к сообщениям

Непрочитанное сообщение Olej » 25 янв 2020, 23:07

Olej писал(а):
25 янв 2020, 23:03
И вот их уже не 13, а 12:
Но ещё нужно файловую структуру посмотреть:

Код: Выделить всё

olej@277938:/var/www/linux-ru.ru/files$ pwd
/var/www/linux-ru.ru/files

olej@277938:/var/www/linux-ru.ru/files$ ls -l 4065_72f4ebf7552ab3010a4f41cbb62158a0
-rw-r--r-- 1 www-data www-data 352000 дек 22 01:23 4065_72f4ebf7552ab3010a4f41cbb62158a0
... и убедиться что "лишний" файл как был - так и остался.
Выправляем:

Код: Выделить всё

olej@277938:/var/www/linux-ru.ru/files$ sudo rm 4065_72f4ebf7552ab3010a4f41cbb62158a0

olej@277938:/var/www/linux-ru.ru/files$ ls -l 4065_72f4ebf7552ab3010a4f41cbb62158a0
ls: невозможно получить доступ к '4065_72f4ebf7552ab3010a4f41cbb62158a0': Нет такого файла или каталога
Вот теперь уже - всё.
С этим потерянным вложением (и бессмысленными 320Kb) разобрались!

Ответить

Вернуться в «Управление WEB ресурсами»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя