[OLD] File Attachment Mod - Вложение файлов

Ответы на вопросы, связанные с модами для phpBB 2.0.x, кроме относящихся к форуму Для авторов (phpBB 2.0.x).
Iftin
phpBB 2.0.7
Сообщения: 573
Стаж: 19 лет 11 месяцев
Откуда: Moscow

Сообщение Iftin »

p00h

вообщем мишка одни мы с тобой тупые и косалапые =))) пойдём сгоря есть мед, чтоль... чтобы скрасить нашу жизнь....

НАРОД ПООМГИТЕ, ПОМОЖИТЕ, HELP, HELP ME!! =)
Аватара пользователя
Coagulant
Former team member
Сообщения: 955
Стаж: 20 лет 3 месяца
Откуда: Москва

Сообщение Coagulant »

Iftin
Cам с траблой не сталкивался, но на вашем месте поискал бы ответ в гиганстком треде на phpbb.com об этом моде.
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 19 лет 11 месяцев
Откуда: Архангельск

Сообщение Гога »

ss20 писал(а):да кстати во время установки была одна проблема
в файле privmsg.php
в строке (по инструкции) надо было найти
#-----[ FIND ]---------------------------------------------
# around line 742
unset($delete_type);
}
у меня было без этой скобки. Смотрите ниже

#-----[ FIND ]---------------------------------------------
# around line 742
unset($delete_type);

я ее конечно добавил сам, установка прошла успешно, но как результат, смотрите начало поста
Этот кусок для 2.0.13. Сейчас думаю, как прикрутить к 2.0.17 -- там всё перелопачено. Или поищу... :wink:

Добавлено спустя 14 минут 19 секунд:

Короче, так должно быть (см. премодифицированные файлы)

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

unset($delete_type);
$attachment_mod['pm']->delete_all_pm_attachments($mark_list);
Если у кого вложения в личных сообщениях не работают, говорю где грабли лежат. Таких кусков в privmsg.php несколько, не промахнитесь:

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

if ( $mode != 'edit' )
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
AntonG
phpBB 1.4.1
Сообщения: 41
Стаж: 19 лет 8 месяцев

Сообщение AntonG »

Гога писал(а): ее конечно добавил сам, установка прошла успешно,
а я когда поставил privmsg.php
ругнулся и пришлось ее удалить эту }
тогда все стало нормально :?:
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 19 лет 11 месяцев
Откуда: Архангельск

Сообщение Гога »

AntonG писал(а):
Гога писал(а): ее конечно добавил сам, установка прошла успешно,
Не писал я этого. Клянусь честью! :D
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Scaryman
phpBB 1.2.0
Сообщения: 16
Стаж: 19 лет 10 месяцев

Сообщение Scaryman »

А как нибудь можно решить такую проблему:
Например если файл с форума скачивается FlashGet'ом, то счетчик скачиваний сразу прибавляет 5, из-за того что FlasGet разбивает файл на 5 частей и качает каждую отдельно!!! Можно ли как нибудь сделать так чтобы счетчик прибавляль только еденицу?

Добавлено спустя 18 минут 51 секунду:

И еще есть такая проблема:
При попытки прикрепить файл примерно больше 6 мегабайт, выдается сообщение "Не указан режим сообщения"!!! В настройках php максимальный размер стоит 100 мегабайт, а в настройках мода вобще нет ограничений на размер файла!!!
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 21 год 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

Scaryman писал(а):В настройках php максимальный размер стоит 100 мегабайт
Что там конретно и где указано? В php как минимум две настройки, отвечающие за возможный размер загружаемый файлов.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Scaryman
phpBB 1.2.0
Сообщения: 16
Стаж: 19 лет 10 месяцев

Сообщение Scaryman »

Ну вот в php.ini указан размер:

;;;;;;;;;;;;;;;;;;
; Закачка файлов ;
;;;;;;;;;;;;;;;;;;

; Разрешает PHP обрабатывать закачку файлов
file_uploads = On

; Каталог для временных файлов, в который PHP помещает закачанные
; файлы (используется системный временный каталог, если в директиве
; указана пустая строка)
upload_tmp_dir = /tmp

; Максимальный размер закачанного файла
upload_max_filesize = 100M
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5426
Стаж: 20 лет 3 месяца
Откуда: Питер
Благодарил (а): 177 раз
Поблагодарили: 749 раз

Сообщение Siava »

Scaryman
Там еще есть что-то вроде post_max_size, его тоже надо увеличить.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 19 лет 11 месяцев
Откуда: Архангельск

Сообщение Гога »

Миниатюры создаются шириной не более 400 точек, причём такой размер прописан в attach_mod/includes/functions_thumbs.php:get_img_size_format
(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 раз.
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5426
Стаж: 20 лет 3 месяца
Откуда: Питер
Благодарил (а): 177 раз
Поблагодарили: 749 раз

Сообщение Siava »

Гога
Ура, хоть кто-то задумался над этой проблемкой =)

Кстати, самое отстойное с этими миниатюрами, что если загружаешь гиф-анимированную картинку, то создаётся её миниатюра ужасающих размеров (имеется в виду кб).
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 19 лет 11 месяцев
Откуда: Архангельск

Сообщение Гога »

Щаз, смотрите (что-то мне не спится...)
Идея: не создавать миниатюру, если размер картинки и размер файла достаточно малы. Иначе создать миниатюру требуемого размера (высота, ширина), проверить размер файла миниатюры, выкинуть миниатюру, если её размер слишком велик. Причём размер миниатюры подгоняется так, чтоб не вылазила наибольшая сторона.

По любому, изображение будет показано (будь-то миниатюра или нет), если его размеры и размер файла не превосходят указанных. Иначе будет ссылка.

Добавлено спустя 3 минуты 8 секунд:

И ещё мне не нравится, что где-то intval(), а где-то (int) (было :) )

Добавлено спустя 3 минуты 50 секунд:

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

Добавлено спустя 59 секунд:
Siava писал(а):гиф
GIF фтопку!

Добавлено спустя 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
Добавлено спустя 1 час 45 минут 29 секунд:
Гога писал(а):чисто теоретически может быть так, что размер миниатюры больше размера картинки (высота, ширина). Это я даже наблюдал на нашем сервере, но там пока какие-то чудовищные настройки PHP. Дома такого нет
Есть такое, даже при самых мягких настройках -- бага, однако :roll:
Исправил:

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

	if ($max_dim > 1.0)
	{
		$max_dim = 1.0;
	}
Добавлено спустя 14 минут 48 секунд:

Осталось выяснить, почему при установленной open_base_dir и не установленной upload_tmp_dir аватары не грузятся, а вложения грузятся...

Добавлено спустя 29 минут 19 секунд:
Гога писал(а):Осталось выяснить, почему при установленной open_base_dir и не установленной upload_tmp_dir аватары не грузятся, а вложения грузятся...
Вот и выяснилось: при установленной open_base_dir (так что ни file_exists, ни filesize не могут до файла дотянуться) помираем, если сделать так (posting_attachments.php):

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

			$this->filesize = @filesize($file);
			$this->filesize = intval($this->filesize);
			if ($this->filesize == 0) {
				die ('oops!');
			}
Причина, по которой не грузятся аватары: file_exists возвращает false (это отлавливается, и мы видим сообщение: аватара должна быть 123x321), а в случае загружаемых файлов filesize возвращает 0, но это не отлавливается, поэтому файл проходит, но его размер не контролируется до тех пор пока файл не будет скопирован в отведённую директорию (files). Однако, это не страшно, т.к. есть ограничения PHP. Вопрос можно считать закрытым.
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Аватара пользователя
Гога
phpBB 2.0.0
Сообщения: 220
Стаж: 19 лет 11 месяцев
Откуда: Архангельск

Сообщение Гога »

У меня ситуация: open_base_dir установлен, upload_tmp_dir -- нет. Поэтому размеры картинок не проверяются:
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']));
					}
				}
То есть выхватить загруженный файл можно (скопировать куда надо), а заглянуть внутрь -- низзя. Я ещё не в курсе, можно ли upload_tmp_dir назначать для отдельных директорий, поэтому надо бороться:
attach_mod/posting_attachments.php
НАЙТИ:

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

list($width, $height) = image_getdimension($file);
ЗАМЕНИТЬ НА:

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

list($width, $height) = image_getdimension($upload_dir . '/' . $this->attach_filename);
После этого размер выясняется у уже загруженного файла.

Добавлено спустя 1 час 54 секунды:

Загрузка аватар исправлена тоже
Гугл рулит. Я люблю ЛОР.
Интересно, они пришли с миром или им таки нужен наш моск?
Знания принадлежат всему человечеству.
Аватара пользователя
Verades
phpBB 1.4.3
Сообщения: 77
Стаж: 20 лет
Откуда: п. Врангель

Сообщение Verades »

Убила свой форум

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

Хочется как лучше а получается как всегда, пошляка топиться =)
Куплю сторожевого хомячка с трёхлитровой будкой
Аватара пользователя
Siava
Поддержка
Поддержка
Сообщения: 5426
Стаж: 20 лет 3 месяца
Откуда: Питер
Благодарил (а): 177 раз
Поблагодарили: 749 раз

Сообщение Siava »

Verades
1. перед установкой модов всегда надо делать резервную копию хотя бы файлов форума!
2. на 90% бесплатных хостингах аттач мод не работает корректно.
3. что делать? Возвращать всё обратно.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb 2.0.x 3.5.x)

Вернуться в «Поддержка модов для phpBB 2.0.x»