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?
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.
PS. Kannattaa varmaan lukaista tuo opas ja kysyä sitten jos joku juttu jäi epäselväksi.
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ä.
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); ?>
Joo kiitti näillä varmaankin sitten pärjäilen...
Aihe on jo aika vanha, joten et voi enää vastata siihen.