[OLD] File Attachment Mod - Вложение файлов
-
- phpBB 2.0.7
- Сообщения: 573
- Стаж: 19 лет 11 месяцев
- Откуда: Moscow
-
- Former team member
- Сообщения: 955
- Стаж: 20 лет 3 месяца
- Откуда: Москва
Iftin
Cам с траблой не сталкивался, но на вашем месте поискал бы ответ в гиганстком треде на phpbb.com об этом моде.
Cам с траблой не сталкивался, но на вашем месте поискал бы ответ в гиганстком треде на phpbb.com об этом моде.
-
- phpBB 2.0.0
- Сообщения: 220
- Стаж: 19 лет 11 месяцев
- Откуда: Архангельск
Этот кусок для 2.0.13. Сейчас думаю, как прикрутить к 2.0.17 -- там всё перелопачено. Или поищу... :wink:ss20 писал(а):да кстати во время установки была одна проблема
в файле privmsg.php
в строке (по инструкции) надо было найти
#-----[ FIND ]---------------------------------------------
# around line 742
unset($delete_type);
}
у меня было без этой скобки. Смотрите ниже
#-----[ FIND ]---------------------------------------------
# around line 742
unset($delete_type);
я ее конечно добавил сам, установка прошла успешно, но как результат, смотрите начало поста
Добавлено спустя 14 минут 19 секунд:
Короче, так должно быть (см. премодифицированные файлы)
Код: Выделить всё
unset($delete_type);
$attachment_mod['pm']->delete_all_pm_attachments($mark_list);
Код: Выделить всё
if ( $mode != 'edit' )
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
-
- phpBB 1.4.1
- Сообщения: 41
- Стаж: 19 лет 8 месяцев
-
- phpBB 2.0.0
- Сообщения: 220
- Стаж: 19 лет 11 месяцев
- Откуда: Архангельск
Не писал я этого. Клянусь честью!AntonG писал(а):Гога писал(а): ее конечно добавил сам, установка прошла успешно,

Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
-
- phpBB 1.2.0
- Сообщения: 16
- Стаж: 19 лет 10 месяцев
А как нибудь можно решить такую проблему:
Например если файл с форума скачивается FlashGet'ом, то счетчик скачиваний сразу прибавляет 5, из-за того что FlasGet разбивает файл на 5 частей и качает каждую отдельно!!! Можно ли как нибудь сделать так чтобы счетчик прибавляль только еденицу?
Добавлено спустя 18 минут 51 секунду:
И еще есть такая проблема:
При попытки прикрепить файл примерно больше 6 мегабайт, выдается сообщение "Не указан режим сообщения"!!! В настройках php максимальный размер стоит 100 мегабайт, а в настройках мода вобще нет ограничений на размер файла!!!
Например если файл с форума скачивается FlashGet'ом, то счетчик скачиваний сразу прибавляет 5, из-за того что FlasGet разбивает файл на 5 частей и качает каждую отдельно!!! Можно ли как нибудь сделать так чтобы счетчик прибавляль только еденицу?
Добавлено спустя 18 минут 51 секунду:
И еще есть такая проблема:
При попытки прикрепить файл примерно больше 6 мегабайт, выдается сообщение "Не указан режим сообщения"!!! В настройках php максимальный размер стоит 100 мегабайт, а в настройках мода вобще нет ограничений на размер файла!!!
-
- phpBB Guru
- Сообщения: 5484
- Стаж: 21 год 1 месяц
- Поблагодарили: 2 раза
Что там конретно и где указано? В php как минимум две настройки, отвечающие за возможный размер загружаемый файлов.Scaryman писал(а):В настройках php максимальный размер стоит 100 мегабайт
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
-
- phpBB 1.2.0
- Сообщения: 16
- Стаж: 19 лет 10 месяцев
Ну вот в php.ini указан размер:
;;;;;;;;;;;;;;;;;;
; Закачка файлов ;
;;;;;;;;;;;;;;;;;;
; Разрешает PHP обрабатывать закачку файлов
file_uploads = On
; Каталог для временных файлов, в который PHP помещает закачанные
; файлы (используется системный временный каталог, если в директиве
; указана пустая строка)
upload_tmp_dir = /tmp
; Максимальный размер закачанного файла
upload_max_filesize = 100M
;;;;;;;;;;;;;;;;;;
; Закачка файлов ;
;;;;;;;;;;;;;;;;;;
; Разрешает PHP обрабатывать закачку файлов
file_uploads = On
; Каталог для временных файлов, в который PHP помещает закачанные
; файлы (используется системный временный каталог, если в директиве
; указана пустая строка)
upload_tmp_dir = /tmp
; Максимальный размер закачанного файла
upload_max_filesize = 100M
-
- Поддержка
- Сообщения: 5426
- Стаж: 20 лет 3 месяца
- Откуда: Питер
- Благодарил (а): 177 раз
- Поблагодарили: 749 раз
Scaryman
Там еще есть что-то вроде post_max_size, его тоже надо увеличить.
Там еще есть что-то вроде post_max_size, его тоже надо увеличить.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb2.0.x 3.5.x)
Ты очистил кеш? © Sheer
https://siava.ru (phpbb
-
- phpBB 2.0.0
- Сообщения: 220
- Стаж: 19 лет 11 месяцев
- Откуда: Архангельск
Миниатюры создаются шириной не более 400 точек, причём такой размер прописан в attach_mod/includes/functions_thumbs.php:get_img_size_format
(magic number
)
Максимальный размер отображаемого изображения остаётся неприкаянным (не понятно, зачем он) -- миниатюра всегда шириной 400.
В связи с этим предлагаю:
То есть теперь миниатюра вынуждена вписаться в этот размер, и логика настроек восстановлена.
Ещё есть сомнения в правильности построенного кода, но то, что $attach_config['img_link_height'] и $attach_config['img_link_width'] надо учитывать -- в этом я уверен.
Добавлено спустя 16 минут 47 секунд:
Ещё, похоже, миниатюры создаются сразу после закачки, а потом на них наплевать, только удалить, если они не нужны. А если изменить настройки, то ничего не изменится с миниатюрами уже загруженных картинок
Добавлено спустя 14 минут 21 секунду:
Ещё бы надоть добавить проверку: если размер новорожденной миниатюры превосходит минимальный размер, при котором ещё надо создавать миниатюру, то фтопку такую миниатюру.
Добавлено спустя 17 минут 41 секунду:
В общем, я вот так сделал:
(magic number

Максимальный размер отображаемого изображения остаётся неприкаянным (не понятно, зачем он) -- миниатюра всегда шириной 400.
В связи с этим предлагаю:
Код: Выделить всё
$max_width = ($attach_config['img_link_width'] >
$attach_config['img_link_height']) ?
$attach_config['img_link_width'] :
$attach_config['img_link_height'];
Ещё есть сомнения в правильности построенного кода, но то, что $attach_config['img_link_height'] и $attach_config['img_link_width'] надо учитывать -- в этом я уверен.
Добавлено спустя 16 минут 47 секунд:
Ещё, похоже, миниатюры создаются сразу после закачки, а потом на них наплевать, только удалить, если они не нужны. А если изменить настройки, то ничего не изменится с миниатюрами уже загруженных картинок
Добавлено спустя 14 минут 21 секунду:
Ещё бы надоть добавить проверку: если размер новорожденной миниатюры превосходит минимальный размер, при котором ещё надо создавать миниатюру, то фтопку такую миниатюру.
Добавлено спустя 17 минут 41 секунду:
В общем, я вот так сделал:
Код: Выделить всё
--- attach_mod/includes/functions_thumbs.php (revision 205)
+++ attach_mod/includes/functions_thumbs.php (revision 207)
@@ -37,8 +37,10 @@
//
function get_img_size_format($width, $height)
{
+ global $attach_config;
+
// Maximum Width the Image can take
- $max_width = 400;
+ $max_width = ($attach_config['img_link_width'] > $attach_config['img_link_height']) ? $attach_config['img_link_width'] : $attach_config['img_link_height'];
if ($width > $height)
{
@@ -241,9 +243,17 @@
}
else
{
- @chmod($new_file, 0664);
+ if (@filesize($new_file) > $attach_config['img_min_thumb_filesize'])
+ {
+ @unlink($new_file);
+ return false;
+ }
+ else
+ {
+ @chmod($new_file, 0664);
+ }
}
-
+
return true;
}
Последний раз редактировалось Гога 04.09.2005 5:27, всего редактировалось 1 раз.
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
-
- Поддержка
- Сообщения: 5426
- Стаж: 20 лет 3 месяца
- Откуда: Питер
- Благодарил (а): 177 раз
- Поблагодарили: 749 раз
Гога
Ура, хоть кто-то задумался над этой проблемкой =)
Кстати, самое отстойное с этими миниатюрами, что если загружаешь гиф-анимированную картинку, то создаётся её миниатюра ужасающих размеров (имеется в виду кб).
Ура, хоть кто-то задумался над этой проблемкой =)
Кстати, самое отстойное с этими миниатюрами, что если загружаешь гиф-анимированную картинку, то создаётся её миниатюра ужасающих размеров (имеется в виду кб).
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb2.0.x 3.5.x)
Ты очистил кеш? © Sheer
https://siava.ru (phpbb
-
- phpBB 2.0.0
- Сообщения: 220
- Стаж: 19 лет 11 месяцев
- Откуда: Архангельск
Щаз, смотрите (что-то мне не спится...)
Идея: не создавать миниатюру, если размер картинки и размер файла достаточно малы. Иначе создать миниатюру требуемого размера (высота, ширина), проверить размер файла миниатюры, выкинуть миниатюру, если её размер слишком велик. Причём размер миниатюры подгоняется так, чтоб не вылазила наибольшая сторона.
По любому, изображение будет показано (будь-то миниатюра или нет), если его размеры и размер файла не превосходят указанных. Иначе будет ссылка.
Добавлено спустя 3 минуты 8 секунд:
И ещё мне не нравится, что где-то intval(), а где-то (int) (было
)
Добавлено спустя 3 минуты 50 секунд:
Да, чисто теоретически может быть так, что размер миниатюры больше размера картинки (высота, ширина). Это я даже наблюдал на нашем сервере, но там пока какие-то чудовищные настройки PHP. Дома такого нет, но я не нашёл, где бы это контролировалось в тексте....
Просто тупо вызывается ImageMagic или GD с указанием требуемого размера... Где-то засада 
Добавлено спустя 59 секунд:
Добавлено спустя 4 часа 5 минут 3 секунды:
Вот в виде мода. Работаем в директории attach_mod
Добавлено спустя 1 час 45 минут 29 секунд:

Исправил:
Добавлено спустя 14 минут 48 секунд:
Осталось выяснить, почему при установленной open_base_dir и не установленной upload_tmp_dir аватары не грузятся, а вложения грузятся...
Добавлено спустя 29 минут 19 секунд:
Причина, по которой не грузятся аватары: file_exists возвращает false (это отлавливается, и мы видим сообщение: аватара должна быть 123x321), а в случае загружаемых файлов filesize возвращает 0, но это не отлавливается, поэтому файл проходит, но его размер не контролируется до тех пор пока файл не будет скопирован в отведённую директорию (files). Однако, это не страшно, т.к. есть ограничения PHP. Вопрос можно считать закрытым.
Идея: не создавать миниатюру, если размер картинки и размер файла достаточно малы. Иначе создать миниатюру требуемого размера (высота, ширина), проверить размер файла миниатюры, выкинуть миниатюру, если её размер слишком велик. Причём размер миниатюры подгоняется так, чтоб не вылазила наибольшая сторона.
По любому, изображение будет показано (будь-то миниатюра или нет), если его размеры и размер файла не превосходят указанных. Иначе будет ссылка.
Добавлено спустя 3 минуты 8 секунд:
И ещё мне не нравится, что где-то intval(), а где-то (int) (было

Добавлено спустя 3 минуты 50 секунд:
Да, чисто теоретически может быть так, что размер миниатюры больше размера картинки (высота, ширина). Это я даже наблюдал на нашем сервере, но там пока какие-то чудовищные настройки PHP. Дома такого нет, но я не нашёл, где бы это контролировалось в тексте....


Добавлено спустя 59 секунд:
GIF фтопку!Siava писал(а):гиф
Добавлено спустя 4 часа 5 минут 3 секунды:
Вот в виде мода. Работаем в директории attach_mod
Код: Выделить всё
#
#-----[ OPEN ]------------------------------------------
#
includes/functions_thumbs.php
#
#-----[ FIND ]------------------------------------------
#
function get_img_size_format($width, $height)
{
// Maximum Width the Image can take
$max_width = 400;
if ($width > $height)
{
return array(
round($width * ($max_width / $width)),
round($height * ($max_width / $width))
);
}
else
{
return array(
round($width * ($max_width / $height)),
round($height * ($max_width / $height))
);
}
}
#
#-----[ REPLACE WITH ]------------------------------------------
#
function get_img_size_format($width, $height)
{
global $attach_config;
// Maximum Dimensions the Image can take
$H = intval($attach_config['img_link_height']) / $height;
$W = intval($attach_config['img_link_width']) / $width;
$max_dim = ($H < $W) ? $H : $W;
if ($max_dim > 1.0)
{
$max_dim = 1.0;
}
return array(
round($width * $max_dim),
round($height * $max_dim)
);
}
#
#-----[ FIND ]------------------------------------------
#
if (!$img_filesize || $img_filesize <= $min_filesize)
#
#-----[ REPLACE WITH ]------------------------------------------
#
if (!$img_filesize)
#
#-----[ FIND ]------------------------------------------
#
list($new_width, $new_height) = get_img_size_format($width, $height);
#
#-----[ BEFORE, ADD ]------------------------------------------
#
if (($img_filesize <= $min_filesize) && ($width <= intval($attach_config['img_link_width'])) && ($height <= intval($attach_config['img_link_height'])))
{
return false;
}
#
#-----[ FIND ]------------------------------------------
#
}
else
{
@chmod($new_file, 0664);
}
#
#-----[ REPLACE WITH ]------------------------------------------
#
}
else
{
if (@filesize($new_file) > $attach_config['img_min_thumb_filesize'])
{
@unlink($new_file);
return false;
}
else
{
@chmod($new_file, 0664);
}
}
#
#-----[ OPEN ]------------------------------------------
#
displaying.php
#
#-----[ FIND ]------------------------------------------
#
if ( ($width <= intval($attach_config['img_link_width'])) && ($height <= intval($attach_config['img_link_height'])) )
#
#-----[ REPLACE WITH ]------------------------------------------
#
$img_filesize = (@file_exists($filename)) ? @filesize($filename) : false;
if ( ($width <= intval($attach_config['img_link_width'])) && ($height <= intval($attach_config['img_link_height']))
&& ($img_filesize > 0) && ($img_filesize <= intval($attach_config['img_min_thumb_filesize'])))
#
#-----[ FIND ]------------------------------------------
#
if ( ($width <= intval($attach_config['img_link_width'])) && ($height <= intval($attach_config['img_link_height'])) )
#
#-----[ REPLACE WITH ]------------------------------------------
#
$img_filesize = (@file_exists($filename)) ? @filesize($filename) : false;
if ( ($width <= intval($attach_config['img_link_width'])) && ($height <= intval($attach_config['img_link_height']))
&& ($img_filesize > 0) && ($img_filesize <= intval($attach_config['img_min_thumb_filesize'])))
#
#-----[ SAVE/CLOSE ALL FILES ]------------------------------------------
#
# EoM
Есть такое, даже при самых мягких настройках -- бага, однакоГога писал(а):чисто теоретически может быть так, что размер миниатюры больше размера картинки (высота, ширина). Это я даже наблюдал на нашем сервере, но там пока какие-то чудовищные настройки PHP. Дома такого нет

Исправил:
Код: Выделить всё
if ($max_dim > 1.0)
{
$max_dim = 1.0;
}
Осталось выяснить, почему при установленной open_base_dir и не установленной upload_tmp_dir аватары не грузятся, а вложения грузятся...
Добавлено спустя 29 минут 19 секунд:
Вот и выяснилось: при установленной open_base_dir (так что ни file_exists, ни filesize не могут до файла дотянуться) помираем, если сделать так (posting_attachments.php):Гога писал(а):Осталось выяснить, почему при установленной open_base_dir и не установленной upload_tmp_dir аватары не грузятся, а вложения грузятся...
Код: Выделить всё
$this->filesize = @filesize($file);
$this->filesize = intval($this->filesize);
if ($this->filesize == 0) {
die ('oops!');
}
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
-
- phpBB 2.0.0
- Сообщения: 220
- Стаж: 19 лет 11 месяцев
- Откуда: Архангельск
У меня ситуация: open_base_dir установлен, upload_tmp_dir -- нет. Поэтому размеры картинок не проверяются:
attach_mod/posting_attachments.php
То есть выхватить загруженный файл можно (скопировать куда надо), а заглянуть внутрь -- низзя. Я ещё не в курсе, можно ли upload_tmp_dir назначать для отдельных директорий, поэтому надо бороться:
attach_mod/posting_attachments.php
НАЙТИ:
ЗАМЕНИТЬ НА:
После этого размер выясняется у уже загруженного файла.
Добавлено спустя 1 час 54 секунды:
Загрузка аватар исправлена тоже
attach_mod/posting_attachments.php
Код: Выделить всё
if ( ($width != 0) && ($height != 0) && (intval($attach_config['img_max_width']) != 0) && (intval($attach_config['img_max_height']) != 0) )
{
if ( ($width > intval($attach_config['img_max_width'])) || ($height > intval($attach_config['img_max_height'])) )
{
$error = TRUE;
if(!empty($error_msg))
{
$error_msg .= '<br />';
}
$error_msg .= sprintf($lang['Error_imagesize'], intval($attach_config['img_max_width']), intval($attach_config['img_max_height']));
}
}
attach_mod/posting_attachments.php
НАЙТИ:
Код: Выделить всё
list($width, $height) = image_getdimension($file);
Код: Выделить всё
list($width, $height) = image_getdimension($upload_dir . '/' . $this->attach_filename);
Добавлено спустя 1 час 54 секунды:
Загрузка аватар исправлена тоже
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
-
- phpBB 1.4.3
- Сообщения: 77
- Стаж: 20 лет
- Откуда: п. Врангель
Убила свой форум
Please ensure both the install/ and contrib/ directories are deleted
Насколько я знаю английский тут сказано удалить две директории, инстал удалила, contrib/ не нашла. Дальше этих надписей форум не грузится + к этому:
Warning: include_attach_lang(./language/lang_russian/lang_main_attach.php): failed to open stream: No such file or directory in /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php on line 55
Warning: include_attach_lang(): Failed opening './language/lang_russian/lang_main_attach.php' for inclusion (include_path='.:') in /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php on line 55
Warning: Cannot modify header information - headers already sent by (output started at /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php:55) in /home/m/mstyn.h14.ru/WWW/forums/includes/page_header.php on line 475
Warning: Cannot modify header information - headers already sent by (output started at /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php:55) in /home/m/mstyn.h14.ru/WWW/forums/includes/page_header.php on line 477
Warning: Cannot modify header information - headers already sent by (output started at /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php:55) in /home/m/mstyn.h14.ru/WWW/forums/includes/page_header.php on line 478
Хелп ми!!!!!
Добавлено спустя 3 минуты 18 секунд:
Так форум загрузился и еще такой же косяк в чат-боксе =/
Warning: include_attach_lang(./language/lang_russian/lang_main_attach.php): failed to open stream: No such file or directory in /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php on line 55
Warning: include_attach_lang(): Failed opening './language/lang_russian/lang_main_attach.php' for inclusion (include_path='.:') in /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php on line 55
Хочется как лучше а получается как всегда, пошляка топиться =)
Please ensure both the install/ and contrib/ directories are deleted
Насколько я знаю английский тут сказано удалить две директории, инстал удалила, contrib/ не нашла. Дальше этих надписей форум не грузится + к этому:
Warning: include_attach_lang(./language/lang_russian/lang_main_attach.php): failed to open stream: No such file or directory in /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php on line 55
Warning: include_attach_lang(): Failed opening './language/lang_russian/lang_main_attach.php' for inclusion (include_path='.:') in /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php on line 55
Warning: Cannot modify header information - headers already sent by (output started at /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php:55) in /home/m/mstyn.h14.ru/WWW/forums/includes/page_header.php on line 475
Warning: Cannot modify header information - headers already sent by (output started at /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php:55) in /home/m/mstyn.h14.ru/WWW/forums/includes/page_header.php on line 477
Warning: Cannot modify header information - headers already sent by (output started at /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php:55) in /home/m/mstyn.h14.ru/WWW/forums/includes/page_header.php on line 478
Хелп ми!!!!!
Добавлено спустя 3 минуты 18 секунд:
Так форум загрузился и еще такой же косяк в чат-боксе =/
Warning: include_attach_lang(./language/lang_russian/lang_main_attach.php): failed to open stream: No such file or directory in /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php on line 55
Warning: include_attach_lang(): Failed opening './language/lang_russian/lang_main_attach.php' for inclusion (include_path='.:') in /home/m/mstyn.h14.ru/WWW/forums/attach_mod/attachment_mod.php on line 55
Хочется как лучше а получается как всегда, пошляка топиться =)
Куплю сторожевого хомячка с трёхлитровой будкой
-
- Поддержка
- Сообщения: 5426
- Стаж: 20 лет 3 месяца
- Откуда: Питер
- Благодарил (а): 177 раз
- Поблагодарили: 749 раз
Verades
1. перед установкой модов всегда надо делать резервную копию хотя бы файлов форума!
2. на 90% бесплатных хостингах аттач мод не работает корректно.
3. что делать? Возвращать всё обратно.
1. перед установкой модов всегда надо делать резервную копию хотя бы файлов форума!
2. на 90% бесплатных хостингах аттач мод не работает корректно.
3. что делать? Возвращать всё обратно.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb2.0.x 3.5.x)
Ты очистил кеш? © Sheer
https://siava.ru (phpbb