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