Seite 1 von 1

Statistiken außerhalb von PhpBB (aber auf gleicher Domain)

Verfasst: 16.12.2008 18:37
von Dr-Psycho-Fans
Guten Abend, ich such mich schon blöde. Es ist prinzipiell gesehen ganz einfach: Ich möchte die Statistiken, genauer genommen nur die Beitragszahlen, woanders includen. Ein passendes Script oder ähnliches hab ich auf anderen Seiten auch nicht finden können.

Die Ausgabe soll die reine Zahl sein, von daher hab ich die index.php soweit gekürzt, und eine neues Template angelegt, dass nur noch die Zahl ausgegeben wird. So weit, so gut... das funktioniert auch, aber nur wenn ich die Datei direkt aufrufe (Domain.de/forum/stats.php).

Die stats.php

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('viewforum');

display_forums('', $config['load_moderators']);

// Set some stats, get posts count from forums data if we... hum... retrieve all forums data
$total_posts	= $config['num_posts'];
$total_topics	= $config['num_topics'];
$total_users	= $config['num_users'];

$l_total_user_s = ($total_users == 0) ? 'TOTAL_USERS_ZERO' : 'TOTAL_USERS_OTHER';
$l_total_post_s = ($total_posts == 0) ? 'TOTAL_POSTS_ZERO' : 'TOTAL_POSTS_OTHER';
$l_total_topic_s = ($total_topics == 0) ? 'TOTAL_TOPICS_ZERO' : 'TOTAL_TOPICS_OTHER';

$result = $db->sql_query($sql);

$db->sql_freeresult($result);
// Assign index specific vars
$template->assign_vars(array(
	'TOTAL_POSTS'	=> sprintf($user->lang[$l_total_post_s], $total_posts),
)
);

// Output page
page_header($user->lang['INDEX']);
$template->set_filenames(array(
	'body' => 'zaehler.html')
);

page_footer();

?>
Hier das Template "zaehler.html":
{TOTAL_POSTS}
Sobald ich sie aber in meine startseite (in mein Grundverzeichnis) includen will, bleibt der Wert leer. Die Pfadangaben stimmen eigentlich

Code: Alles auswählen

$zaehler = include '/srv/www/vhosts/Domain.de/forum/stats.php';
und dann als Ausgabe in meiner Startseite:

Code: Alles auswählen

Das Forum hat $zaehler Beiträge
Wieso geht der direkte Aufruf, die Include-Angaben sind auch korrekt, aber kein Wert wird ausgegeben?

Würd' mich über Lösungsvorschläge freuen! Danke...
Sebastian

Verfasst: 16.12.2008 19:58
von gn#36
Die Aussage dass die include Anweisungen korrekt sind sehe ich allerdings anders.

Die Datei produziert an keiner Stelle einen Rückgabewert, sondern lediglich Ausgaben die auf den Bildschirm geschrieben werden. Wenn du bei dieser Technik bleiben willst, dann verwende output buffering ([php:ob_start] und co.).

Ich würde da allerdings eher eine Zahl erzeugen, also einfach die Zahl direkt aus der Config Tabelle auslesen und dann per Return zurück geben. Also den ganzen Template Kram weglassen und nach dem hier:

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx); 
sofort die Variable zurückliefern (falls deine eigene Datei keine phpBB Funktionen nutzt, ansonsten kannst du das ganze direkt per $config['num_topics'] erledigen):

Code: Alles auswählen

return $config['num_topics'];
Entsprechend dürftest du alles andere weglassen können.

Verfasst: 16.12.2008 20:17
von Dr-Psycho-Fans
Also Dein Code ändert nichts. Denn die stats.php wird sowohl bei meinem als auch in Deiner Weise (mit echo statt return) mit der richtigen Zahl ausgegeben.

Was bei beiden Varianten allerdings immer noch nicht klappt, ist diese Zahl woanders zu includen. Das mit dem "output buffering" verstehe ich nicht, sofern es damit überhaupt was zu tun hat.

Verfasst: 16.12.2008 20:30
von gn#36
Dann zeig mir mal was du da gemacht hast?

Verfasst: 16.12.2008 22:10
von Dr-Psycho-Fans
Steht eigentlich schon oben alles, aber hier einmal komplett mit Deiner Bearbeitung:

in der stats.php (die sich im Ordner /forum befindet):

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
echo $config['num_posts'];
?>
...diese gibt dann den Wert z.B. "40" für die Anzahl der Beiträge aus. Bei "num_topics" (wie von Dir angegeben) wird nur die Anzahl der Themen ausgegeben, deswegen habe ich daraus "num_posts" gemacht. Wenn man diese PHP-Datei direkt aufruft, dann wird die (An)Zahl ausgegeben.

Wenn ich diese aber include, dann wird nichts ausgegeben bzw. übertragen. Hier noch 'mal die Angaben in der Startseite (die sich im Grundverzeichnis, also nicht im Ordner "forum" befindet):

Code: Alles auswählen

<?php
$zaehler = include '/srv/www/vhosts/Domain.de/forum/stats.php';
echo "Das Forum hat $zaehler Beiträge";
?>

Verfasst: 17.12.2008 00:32
von gn#36
Ich wüsste nicht dass ich was von echo geschrieben habe. Bei mir steht return ;)

Verfasst: 17.12.2008 00:38
von Dr-Psycho-Fans
gn#36 hat geschrieben:Ich wüsste nicht dass ich was von echo geschrieben habe. Bei mir steht return ;)
Wer lesen kann, ist klar im Vorteil. Schau mal zwei Beiträge drüber:
Dr-Psycho-Fans hat geschrieben:(...) Denn die stats.php wird sowohl bei meiner als auch in Deiner Weise (mit echo statt return) mit der richtigen Zahl ausgegeben. (...)
Mal ganz abgesehen passiert bei return gar nichts, geschweige denn wird in die Startseite eine Zahl includet.

Bevor wir hier noch weiter rumschwafeln, schreib doch bitte einfach mal in Reinform den Code, den Du verwenden würdest, damit das hinhaut.

Danke.

Verfasst: 17.12.2008 01:35
von gn#36
Ich würde das sowieso anders machen (auch wenn return laut [php:include] und [php:return] funktionieren müsste):

Code: Alles auswählen

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
?>
Und dann in der anderen Datei

Code: Alles auswählen

//was auch immmer davor....
include('pfad_zur_datei.php');
echo $config['num_posts'];
//was auch immer dahinter...
Oder auch direkt den ganzen Code hier in die andere Datei und dann ohne include.

Verfasst: 17.12.2008 02:23
von Dr-Psycho-Fans
Nüscht... keine Variante ist erfolgreich. Dennoch danke für Deine Mühen.

Kann es sein, dass es so ne Art "Sperre" bei Phpbb gibt? Ich hab einmal alles in den Ordner forum gepackt. Da klappt der include... doch nicht im anderen Verzeichnis. Das liegt jedenfalls nicht an den Pfadangaben, die stimmen alle..

Re: Statistiken außerhalb von PhpBB (aber auf gleicher Domain)

Verfasst: 28.01.2009 09:36
von schicki_01
Ich weiß, dass der Beitrag schon älter ist, jedoch denke ich, dass es ev. für andere auch interessant sein könnte.

Der Code, der hier gepostet wurde funktioniert einwandfrei - lediglich die gzip-Komprimierung muss deaktiviert werden.

Habs bei mir versucht - dann funktionierts.

LG
Schicki