Mailinglisten-Archive |
Hi Amalesh!
amalesh kempf wrote:
> Einen counter hatte ich mir vorgenommen und es funktioniert auch alles
> prdchtig, bis auf eine kleinigkeit (wie so hdufig ;)). Der counter funzt
> so, da_ er $REDIRECT_URL ausliest und dann in einer mysql-tabelle die hits
> schreibt. Dazu kann folgendes in einer php-datei eingegeben werden:
Warum $REDIRECT_URL? Das zeigt doch nur eine Umleitung nach einem 3xx
Response des Servers an, AFAIK.
Was Du brauchst, ist doch eher $HTTP_REFERER.
> <?php
> include("gpac.php3");
> echo "$strHits hits since $strSince <br>";
> echo "Last Update: $strLastMod<br>";
> ?>
>
> $strHits ist |brigens ein <img>
Wie ist das gemeint? gpac.php3 generiert (nebenbei) eine GIF-Datei, die
dann mit einem <img> tag eingebunden wird?
[...]
> Nun meine fragen:
> Kann man den namen der (aufrufenden) HTML-datei auslesen, wenn nur <img
> src="gpac.php3"> eingebunden wird?
Verstehe ich nicht. Entweder gpac.php3 erzeugt nur HTML-Code (wie im
obigen Beispiel), dann kann es nicht mit <img src=...> funktionieren,
oder es erzeugt eine Image-Datei (und teilt explizit den Content-Type
mit), dann kann es nicht mit Text gemischt werden, wie oben gemacht.
Anyway, ein Script, dass ueber <img src="counter.php3"> aufgerufen wird,
bekommt die aufrufende Seite ueber $HTTP_REFERER mitgeteilt. Somit kann
man damit auch eine Datenbankabfrage basteln (vielleicht mit parse_url
den "path" Teil extrahieren, um unabhaengig vom Servernamen zu sein).
Weil's soviel Spass macht, hier ein Bleispiel mit GD-lib :-))) :
-------------------- schnipp --------------------
<?php
/** counter.php3
** Generate a GIF image with a counter on it
*/
Header("Content-type: image/gif");
$im = ImageCreate (200,20);
// Colors and fonts
$bg = ImageColorAllocate ($im, 255, 255, 255);
$fontcol = ImageColorAllocate($im, 100,120,180);
$size=14;
$font="fonts/arialbd.ttf"; // insert your favourite font here
// Parse the URL and extract only the "path" part
// as a key to the database
$urlparts = parse_url ($HTTP_REFERER);
$path = $urlparts['path'];
$text = "oups!"; // default
if ($path != "") {
if (mysql_connect ("localhost", "wwwsql")) {
$result = mysql_db_query ("wwwtest", "select hits from
counter where path='".$path."'");
if ($result > 0 && $hithash = mysql_fetch_array ($result)) {
$text = $hithash['hits'];
$text++;
mysql_query ("update counter set hits='".$text."' where
path='".$path."'");
} else { // we presume an unknown path, so it will
automagically be added
mysql_query ("insert into counter (path, hits) values
('".$path."','1')");
$text = 1;
}
}
}
// Create the text and calculate position
$txtbox = ImageTTFBBox ($size,0,$font,$text);
/* Well, you could also make the image size depend
* on the text size by creating it after the
* ImageTTFBBox call...
*/
$px = (ImageSX($im)-$txtbox[2]+$txtbox[0])/2;
/* This calculation is not exact, because the string
* is drawn relative to the base line, but the BBox
* includes the string depth:
*/
$py = (ImageSY($im)+$txtbox[1]-$txtbox[7])/2;
ImageTTFText($im,$size,0,$px,$py,$fontcol,$font,$text);
// Output the image
ImageGif($im);
ImageDestroy($im);
?>
-------------------- schnapp --------------------
Einen passenden Font sollte man natuerlich zur Hand haben, die mySQL
Datenbank und Tabelle sollten angelegt sein.
> Gibt es sp|rbare performance-verluste, wenn PHP auch alle HTML-dateien
> parst, obwohl (bis auf wenige) kein <?php ... ?> enthalten ist?
Das ist zu erwarten.
Ausserdem halte ich diese Loesung fuer nicht sehr elegant.
>
> tia!
>
> amalesh
Ciao,
Harald
--
* Harald H.-J. Bongartz bongartz_(at)_physik.uni-bonn.de *
* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- *
* "The day Microsoft makes something that doesn't suck is probably *
* the day they start making vacuum cleaners." --Ernst Jan Plugge *
php::bar PHP Wiki - Listenarchive