2 fragen zu chCounters in phpBB 2.0.x

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
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

also ich denke der Fehler liegt daran, dass die Daten aus der Datenbank so groß sind, dass dadurch meine 8 MB gesprengt werden.

Soweit so gut.

Wie kann ich denn die Datenbankabfrage reduzieren.

Hier brauche ich jemanden, der PHP kann. :wink:

Also das er nur die ersten 100 Ergebnisse anzeigt. Das würde ja auch vollkommen reichen.

Hier die Bereiche, die ich denke, wo man was machen müsste:

Code: Alles auswählen

		case 'pages':		$typ = $typen[$HTTP_GET_VARS['extensive']];
					$table = $GLOBALS['chC']['dbconfig']['table_pages'];
					$field = 'seite';
					$field2 = 'titel';
					$where = '';
					break;
oder hier:

Code: Alles auswählen

	# seiten
	$config['url_hp'] = preg_replace("#/$#", "", $config['url_hp']);
	if($config['stats_ignore_counterfiles'] == "1")
	{
		$bedingung = "WHERE `seite` NOT LIKE '".$config['verzeichnis']."%' ";
	}
	elseif($config['stats_ignore_counterfile'] == "1")
	{
		$bedingung = "WHERE '".$config['verzeichnis']."/counter.php' NOT IN (seite)";
	}
	else
	{
		$bedingung = "";
	}
	$seiten = $db->query("SELECT seite, titel, anzahl FROM `".$GLOBALS['chC']['dbconfig']['table_pages']."` $bedingung ORDER BY anzahl DESC LIMIT 0, ".$config['anzahl_stats_seiten']);
	$seiten = $db->fetch_assoc($seiten, 'multiple');
	if(count($seiten) > 0)
	{
		$max_length = 100;
		$seiten_gesamt = $db->query("SELECT SUM(anzahl) as anzahl_gesamt, COUNT(anzahl) AS anzahl_seiten FROM `".$GLOBALS['chC']['dbconfig']['table_pages']."`");
		$seiten_gesamt = $db->fetch_assoc($seiten_gesamt);
		$verz = str_replace("http://".$GLOBALS['chC']['env']['server_name'], "", $config['url_hp']);
		$output_seiten = '';
		for($i=0;$i<count($seiten);$i++)
		{
			$seiten[$i]['seite'] = htmlspecialchars($seiten[$i]['seite']);
			$rowclass = (!(1 & $i)) ? "row1" : "row2";
			if(empty($seiten[$i]['titel']))
				$seiten[$i]['titel'] = $seiten[$i]['seite'];
			$seiten[$i]['seite'] = str_replace($verz, "", $seiten[$i]['seite']);
			$prozent = number_format(round((($seiten[$i]['anzahl']) / $seiten_gesamt['anzahl_gesamt'])*100, 2), 2, $dec_seperator, $thousands_seperator);
			$width = @round(($seiten[$i]['anzahl'] / $seiten_gesamt['anzahl_gesamt']) * $max_length);
			$output_seiten .= " <tr class=\"$rowclass\">\n";
  			$output_seiten .= "  <td align=\"left\">".($i+1)."</td>\n";
  			$output_seiten .= "  <td align=\"left\"><a href=\"".$config['url_hp'].$seiten[$i]['seite']."\" target=\"_blank\">".$seiten[$i]['titel']."</a></td>\n";
  			$output_seiten .= "  <td align=\"right\">".$seiten[$i]['anzahl']."</td>\n";
	  		$output_seiten .= "  <td align=\"right\">".$prozent."%</td>\n";
			$output_seiten .= "  <td align=\"left\" style=\"width: ".$max_length."px\"><img src=\"images/graph1.png\" width=\"".$width."\" height=\"10\" alt=\"".$prozent."%\"></td>\n";
			$output_seiten .= " </tr>\n";
		}
		$output_seiten .= " <tr class=\"row4\">\n  <td>&nbsp;</td>\n  <td align=\"left\"><b>".$chC_lang['allgemein']['gesamt'].": ".$seiten_gesamt['anzahl_seiten']."</b></td>\n  <td align=\"right\">".$seiten_gesamt['anzahl_gesamt']."</td>\n  <td align=\"right\">100%</td>\n  <td>&nbsp;</td>\n </tr>\n";
	}
	else
	{
		$output_seiten = "<tr class=\"row1\"><td colspan=\"5\" align=\"center\">".$chC_lang['allgemein']['keine_seiten_in_db']."</td></tr>";
	}
	$tpl->assign("STATISTICS_PAGES", $output_seiten);
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

ich musste lange rumprobieren bis ich das hinbekommen habe.

danke auch :x

die zeile:

Code: Alles auswählen

		$extensive = $db->query("SELECT ".$field.", ".(isset($field2) ? $field2.',' : '')." anzahl FROM `$table` $where $order");
ändern in:

Code: Alles auswählen

		$extensive = $db->query("SELECT ".$field.", ".(isset($field2) ? $field2.',' : '')." anzahl FROM `$table` $where $order LIMIT 2000");
dann zeigt er max. 2000 ergebnisse und das reicht vollkommen aus.
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Hi,

ich warte schon gespannt auf die neue Version. Sieht schon super aus was Du da gemacht hast.

Mein Vater hat den Counter jetzt auch auf seiner Seite und nutzt das Tool schon sehr ausgiebig.

Was ich mir noch wünschen würde, wäre eine Funktion wo man sehen kann welche Reihenfolgen von Seiten abgerufen wurden.. also Startseite, dann unterseite usw. und vielleicht auch da eine Top 10 welche Reihenfolgen am meisten genutzt wurden.

Dann habe ich noch eine Frage an die Allgemeinheit.

Wie könnte ich die Referal-Unterseite schützen, so dass nur die Mods und Admins diese Seite einsehen können?
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Antworten

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