Remote Avatar ImageSize Controle MOD

In diesem Forum können Mod-Autoren ihre Mods vorstellen, die sich noch im Entwicklungsstatus befinden. Der Einbau in Foren im produktiven Betrieb wird nicht empfohlen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
Waagenbauer
Mitglied
Beiträge: 219
Registriert: 11.06.2001 02:00
Kontaktdaten:

Remote Avatar ImageSize Controle MOD

Beitrag von Waagenbauer »

Ist das normal, das wenn man die URL für ein Remote Avatar angibt, die Dateigröße kontrolliert wird aber nicht die Abmessungen ?

Wenn das so ist hätte ich einen schönen Mod für euch :D

EDIT: Habe den Mod unten gepostet. Viel Spaß!
Zuletzt geändert von Waagenbauer am 30.01.2005 14:15, insgesamt 1-mal geändert.
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag von D@ve »

imho wird da garnix überprüft, weder die Größe noch die Ausmaße. Ohne enorme Performance-Einbußen lässt sich das aber auch kaum realisieren...

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
Waagenbauer
Mitglied
Beiträge: 219
Registriert: 11.06.2001 02:00
Kontaktdaten:

Der Mod dazu

Beitrag von Waagenbauer »

Ich habe einen Mod geschrieben um die Maße des Remote Avatars beim Registrieren bzw. Profil editieren zu überprüfen.

Da die Kontrolle auch übergangen werden kann, indem man das verlinkte Avatar gegen ein größeres unerlaubtes auf dem Webspace austauscht, wird zusätzlich die Höhe und Breite des Avatars in die Tabelle users der Datenbank gespeichert und beim Anzeigen des Remote Avatars, in viewtopic.php, im <IMG> Tag mit width und height, immer auf Ursprungsgröße gebracht.

Ich empfehle dazu den Signatures control Mod vorher einzubauen. Dadurch wird auch die Dateigröße des Remote Avatars kontrolliert.
Siehe hier: http://www.phpbb.de/viewtopic.php?p=361134#361134

Meinen Mod kann man auch als Erweiterung ansehen, funzt aber auch ohne diesen Mod. Das funzt einwandfrei auf meinem Board.

Zuerst muss die Tabelle users erweitert werden (z.B. mit phpmyadmin):

Code: Alles auswählen

ALTER TABLE users ADD avatar_remote_height SMALLINT(4) UNSIGNED DEFAULT '0' NOT  NULL AFTER user_avatar_type,
 ADD avatar_remote_width SMALLINT(4) UNSIGNED DEFAULT '0' NOT NULL AFTER avatar_remote_height;
Dann folgende Dateien ändern und speichern:

Code: Alles auswählen

# 
#-----[ OPEN ]------------------------------------------------ 
#
includes/usercp_register.php

# 
#-----[ FIND ]------------------------------------------------
#
$avatar_sql = user_avatar_delete($userdata['user_avatar_type'], $userdata['user_avatar']);

# 
#-----[ AFTER, ADD ]------------------------------------------ 
#
// Kontolle Remote Avatar Imagesize Add by Downer
		$avatar_sql .= ", avatar_remote_height = '', avatar_remote_width = ''";
		// Kontolle Remote Avatar Imagesize End

# 
#-----[ FIND ]------------------------------------------------
#
$avatar_sql = user_avatar_url($mode, $error, $error_msg, $user_avatar_remoteurl);

# 
#-----[ REPLACE WITH ]------------------------------------------ 
#
// Remote Avatar Imagesize Controle by Downer
//$avatar_sql = user_avatar_url($mode, $error, $error_msg, $user_avatar_remoteurl);

// Wenn für das Remote Avatar eigene Max Größen verwendet werden sollen, in den folgenden beiden Zeilen $board_config['avatar_max_heigh'] und $board_config['avatar_max_width'] gegen feste Werte ersetzen:
$avatar_remote_max_height = $board_config['avatar_max_heigh'];
$avatar_remote_max_width = $board_config['avatar_max_width'];

$avatar_remote_size_sql = '';
		
		usleep(1500);
		if ( list($image_width, $image_height) = @getimagesize($user_avatar_remoteurl) )
		{
			if( ($avatar_remote_max_height != 0 && $image_height > $avatar_remote_max_height) || ($avatar_remote_max_width != 0 && $image_width > $avatar_remote_max_width) )
			{
				$error = TRUE;
				$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' : '';
				$error_msg .= 'Falsche Abmessungen für das Remote Avatar: '.$image_height.' x '.$image_width.' px. Erlaubt sind maximal '.$avatar_remote_max_height.' x '.$avatar_remote_max_width.' px (h x b).';
			}
			else
			{
				$avatar_remote_size_sql = ", avatar_remote_height = $image_height, avatar_remote_width = $image_width";
			}
		}		
				
		$avatar_sql = user_avatar_url($mode, $error, $error_msg, $user_avatar_remoteurl);
		$avatar_sql .= $avatar_remote_size_sql;
	
// Remote Avatar Imagesize Controle by Downer End

# 
#-----[ OPEN ]------------------------------------------------ 
#
viewtopic.php

# 
#-----[ FIND ]------------------------------------------------
#
$poster_avatar = ( $board_config['allow_avatar_remote'] ) ? '<img src="' . $postrow[$i]['user_avatar'] . '" alt="" border="0" />' : '';

# 
#-----[ REPLACE WITH ]------------------------------------------------
#
// Kontolle Remote Avatar Imagesize Add by Downer
				//$poster_avatar = ( $board_config['allow_avatar_remote'] ) ? '<img src="' . $postrow[$i]['user_avatar'] . '" alt="" border="0" />' : '';

				$poster_avatar = ( $board_config['allow_avatar_remote'] ) ? '<img src="' . $postrow[$i]['user_avatar'] . '" width="'.$postrow[$i]['avatar_remote_width'].'" height="'.$postrow[$i]['avatar_remote_height'].'" alt="" border="0" />' : '';
				// Kontolle Remote Avatar Imagesize End
Zuletzt geändert von Waagenbauer am 01.02.2005 15:22, insgesamt 3-mal geändert.
http://www.kaltmacher.de - Die Seite für PC-Freaks und Profis.
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag von D@ve »

Der Ansatz ist gut... aber letztlich nicht praktikabel, wenn Du in der Viewtopic jedes einzelne Bild per getimagesize überprüfst... überleg mal, es werden pro Seite zwanzig Postings gelistet und alle haben einen Remote-Avatar... und überleg mal die sind jetzt alle auf irgendwelchem billig-Webspace á la tripod abgespeichert.
Und jetzt lass es mal nicht einen User sein der auf dem Board in den Threads stöbert sondern 10...50... oder 100... damit zwingst Du jeden Server gnadenlos in die Knie...

Einzig möglicher Ansatz:
Wenn ein User den Avatar im Profil hochlädt, werden die Abmessungen (length x width) in der Users-Tabelle in der DB gespeichert und in der Viewtopic einfach angewendet... so hat man zwar keine Größenbeschränkung, aber zumindestens die Sicherheit, dass die User einem nicht das Layout zwschießen...

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
Benutzeravatar
Waagenbauer
Mitglied
Beiträge: 219
Registriert: 11.06.2001 02:00
Kontaktdaten:

Beitrag von Waagenbauer »

Stimmt, könnte passieren.
Aber kann man dann nicht ein Timelimit für getimagesize setzen?

Die h und b des Remote Avatars in Usertable speichern und dann im Post setzen ist aber ne gute Idee. Werde das mal testen.
Benutzeravatar
Waagenbauer
Mitglied
Beiträge: 219
Registriert: 11.06.2001 02:00
Kontaktdaten:

Beitrag von Waagenbauer »

Ich habe jetzt den Mod nach D@ve's Ansatz umgeschrieben und im oberen Posting neu eingetragen. :D
http://www.kaltmacher.de - Die Seite für PC-Freaks und Profis.
Benutzeravatar
Waagenbauer
Mitglied
Beiträge: 219
Registriert: 11.06.2001 02:00
Kontaktdaten:

Beitrag von Waagenbauer »

Hier habe ich noch ein Tool für den MOD geschrieben, welches beim Ausführen alle bestehenden Remote Avatars der User überprüft.
Fehlerhafte Avatars, mit falscher Größe oder toter URL, werden aus der Datenbank gelöscht.
Von Remote Avatars, die innerhalb der Größenvorgabe liegen, werden Höhe und Breite in die users-Tabelle gespeichert.

Code: Alles auswählen

<?php
// ************************************************************
// Resync Remote Avatars Tool v1.0
// Programmed by Downer, Webmaster @ http://www.kaltmacher.de
// ************************************************************
 
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

$avatar_remote_max_height = $board_config['avatar_max_heigh'];
$avatar_remote_max_width = $board_config['avatar_max_width']; 
		
$sql = "SELECT user_id, username, user_avatar_type, user_avatar
	FROM " . USERS_TABLE . "
	WHERE user_id <> " . ANONYMOUS . "
	AND  user_avatar_type = 2
	ORDER BY user_id";
if( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, 'Could not query users', '', __LINE__, __FILE__, $sql);
}

if ( $row = $db->sql_fetchrow($result) )
{
	$users = 0;
	$error_avatars = 0;
	$avatars = 0;
	$user_id_error_array = array();
	$username_error_array = array();
	$user_id_array = array();
	$username_array = array();
	do
	{
		$error = FALSE;
		$username = $row['username'];
		$user_id = $row['user_id'];
		$user_avatar_remoteurl = $row['user_avatar'];
		
		//usleep(1500);
		if ( list($image_width, $image_height) = @getimagesize($user_avatar_remoteurl) )
		{
			if( ($avatar_remote_max_height != 0 && $image_height > $avatar_remote_max_height) || ($avatar_remote_max_width != 0 && $image_width > $avatar_remote_max_width) )
			{
				$error = TRUE;
			}
		}
		else $error = TRUE;
		
		if ( $error )
		{
			$user_id_error_array[] = $user_id;
			$username_error_array[] = $username;
			$error_avatars++;
			
			$sql2 = "UPDATE " . USERS_TABLE . " SET user_avatar = '', user_avatar_type = " . USER_AVATAR_NONE . ", avatar_remote_height = '', avatar_remote_width = ''
				WHERE user_id = $user_id
				";
			if ( !($result2 = $db->sql_query($sql2)) )
			{
				message_die(GENERAL_ERROR, 'Could not delete Remote Avatar', '', __LINE__, __FILE__, $sql2);
			}
		}
		else
		{
			$user_id_array[] = $user_id;
			$username_array[] = $username;
			$avatars++;
			
			$sql2 = "UPDATE " . USERS_TABLE . " SET avatar_remote_height = $image_height, avatar_remote_width = $image_width
				WHERE user_id = $user_id
				";
			if ( !($result2 = $db->sql_query($sql2)) )
			{
				message_die(GENERAL_ERROR, 'Could not update Remote Avatar', '', __LINE__, __FILE__, $sql2);
			}
		}
		
			$users++;
	}
	while ( $row = $db->sql_fetchrow($result) );
	$db->sql_freeresult($result);
}

$error_user_ids = implode(", ",$user_id_error_array);
$error_usernames = implode(", ",$username_error_array);

$user_ids = implode(", ",$user_id_array);
$usernames = implode(", ",$username_array);

die($users.' Remote Avatars<br><br>'.$error_avatars.' Errors, Data deleted: '.$error_usernames.'<br><br>'.$avatars.' OK, Data updated: '.$usernames);
?>
http://www.kaltmacher.de - Die Seite für PC-Freaks und Profis.
Dave
Mitglied
Beiträge: 2085
Registriert: 25.05.2003 15:03
Wohnort: Wuppertal

Beitrag von Dave »

Man merkt das du nen gemoddetes Board hast :D
Bei nem Standart phpbb mußt du aber noch u.avatar_remote_width, u.avatar_remote_height aus der Datenbank auslesen ;)


MfG
Dave

[edit]
sql befehl:

Code: Alles auswählen

ALTER TABLE phpbb_users ADD avatar_remote_height SMALLINT(4) UNSIGNED DEFAULT '0' NOT  NULL AFTER user_avatar_type, 
 ADD avatar_remote_width SMALLINT(4) UNSIGNED DEFAULT '0' NOT NULL AFTER avatar_remote_height;
bei dir fehle das phpbb_ ;)

[edit2]
Ich warte jetzt schon mehr als 1Std das er alle Avatare durchackert um die größe nach zu schauen :o
Geht das nicht schneller? :wink:
Benutzeravatar
Waagenbauer
Mitglied
Beiträge: 219
Registriert: 11.06.2001 02:00
Kontaktdaten:

Beitrag von Waagenbauer »

Ja richtig, hatte ich vergessen zu schreiben. Bei mir macht das nämlich in viewtopic.php SELECT u.*

Bei mir hat das Tool nur ein paar Minuten gedauert bei 5900 Usern.
Es hatten 67 User Remote Avatars davon 32 Fehlerhafte.
http://www.kaltmacher.de - Die Seite für PC-Freaks und Profis.
lenni
Mitglied
Beiträge: 202
Registriert: 25.10.2004 16:25

Beitrag von lenni »

Ich habe nur kurz über den Quellcode geschaut...

Sehe ich das richtig: wenn Höhe oder Breite zu groß sind,
wird der Avatar nicht akzeptiert?

Falls ja: Schöner wäre es, das Seitenverhältnis zu ermitteln und
den Avatar dementsprechend zu resizen ...

Lenni
Antworten

Zurück zu „phpBB 2.0: Mods in Entwicklung“