Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Kuvan palauttaminen

Teme [24.04.2003 22:15:56]

#

Olen nähnyt useaan otteeseen, kun jonkun sivun lähdekoodissa on esim. kävijälaskuri, jonka url voisi olla: "counter.cgi?a=tunnus&b=laskurityyppi". Sitten noiden muuttujien a:n ja b:n perusteella se palauttaa tietyt numerot kuvana. Onkos tämä mahdollista PHP:ssä? Olen yrittänyt seuraavia:

*******************
*** laskuri.php ***
*******************

<?php
return ("numerot.gif");
?>

////////// TAI //////////

<?php
print ("numerot.gif");
?>

Tuossahan noi esimerkit olisivat palauttaneet aina saman jutun, "numerot.gif" -tiedoston kuvan, mutta tarkoitin näin käytännössä että onko ylipäätänsä mahdollista kuvan palauttaminen? Entä sitten sen kuvan muodostaminen, siis numeroiden "liimaaminen" vieretysten? Jotenkin GD-kirjaston avulla, vai?

Siis tämänlainen olisi se HTML-juttu:

<IMG SRC="laskuri.php">

Oliskos jollain jotain tietoa kys. asiasta?

mikko [24.04.2003 22:41:54]

#

GD-kirjasto on kyllä ihan sopiva tuohon hommaan. Ja eipä tuon nyt niin kumma juttu pitäisi olla, oikeastaan uskon että tuota Antin opasta soveltamalla tajuat varmaan homman idean. Sieltä löytyy juuri noita "kuvan palauttamisia", noilla sinun esimerkeilläsi kun se ei taida oikein onnistua ;)
https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=gdlb

PS. Kannattaa varmaan lukaista tuo opas ja kysyä sitten jos joku juttu jäi epäselväksi.

Antti Laaksonen [24.04.2003 23:59:06]

#

Joo, GD-kirjaston avulla onnistuu hyvin. Tuollaisen laskurin toteutustapa on muuten aika nerokas: kuvan paikalle laitetaan skripti, joka ottaa yhteyden palvelimeen, laskee uuden kävijämäärän ja lopuksi luo laskurin kuvan. Ja kuvan lataus toimii, vaikka sivu olisi pelkkää HTML:ää.

Joissakin monipuolisimmissa laskureissa, kuten ExtremeTrackingissa (http://www.extreme-dm.com/tracking/), osa laskurin parametreista kirjoitetaan JavaScriptillä (jos se on käytössä), jolloin voidaan saada selville myös käyttäjän näytön resoluutio ja värimäärä.

thefox [25.04.2003 16:17:14]

#

Seuraavassa simppeli laskuri jonka joskus väsäsin, täytyy vääntää filut 'counter' ja 'ip' ja chmodata kohdalleen. 'digits.png' sisältää laskurin numerot, kuvan leveys ja korkeus voi olla mitä tahansa kunhan jokainen numero on saman levyinen.. numeroiden tulee siis olla kuvassa vierekkäin. Kuvan vaihto onnistuu tietysti todella kätevästi.
Monia parannuksia olisi mahdollista tehdä, mutta kelvannee esimerkiksi.

<?php
//
// Simple PHP Visitor counter -script
// Copyright (C) fawkz 2002 <thefox@cracked.org>
//

$counterFile    = "counter";
$digitsFile     = "digits.png";
$ipFilterFile   = "ip";

header("Content-type: image/png");

$counter = file($counterFile);
$counter = $counter[0];

$iFile = file($ipFilterFile);
$nFile = fopen($ipFilterFile, "w");
$uIp = $HTTP_SERVER_VARS["REMOTE_ADDR"];
$updateCounter = true;
foreach($iFile as $cIp)
{
	$cIp = explode("!", $cIp);
	if($cIp[0] == $uIp)
	{
		if((time() - $cIp[1]) < 86400)
		{
			$cIp = implode("!", $cIp);
			fwrite($nFile, $cIp);
			$updateCounter = false;
		}
	}
	else
	{
		$cIp = implode("!", $cIp);
		fwrite($nFile, $cIp);
	}
}
fclose($nFile);

if($updateCounter)
{
	$iFile = fopen($ipFilterFile, "a");
	$tData = $uIp . "!" . time() . "\n";
	fputs($iFile, $tData);
	fclose($iFile);

	$cFile = fopen($counterFile, "w");
	fputs($cFile, ++$counter);
	fclose($cFile);
}

$digits = imagecreatefrompng($digitsFile);
$aDigits = strlen($counter);
$pWidth = imagesx($digits) / 10;
$pHeight = imagesy($digits);
$cPic = imagecreate($aDigits * $pWidth, $pHeight);

for($c=0; $c<$aDigits; $c++)
{
	imagecopy($cPic, $digits, $c * $pWidth, 0, $counter[$c] * $pWidth, 0,
		$pWidth, $pHeight);
}

imagepng($cPic);
imagedestroy($cPic);
?>

Teme [25.04.2003 18:19:34]

#

Joo kiitti näillä varmaankin sitten pärjäilen...

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta