Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Numeronnäyttäjä

arcatan [27.05.2003 08:51:08]

#

Ihmiset omistavat sivuillaan myös graafisia kävijälaskureita. Siis semmoisia missä numeron näyttää kuva. Tämä ei ole sellainen. Mutta melkein. Tämä on nimittäin skripti, joka näyttää sille annetun numeron kuvana. Kuvan se kokoaa siten, että eräässä kuvatiedostossa on 10 yhtä pitkää merkkiä, jotka ovat numerot 0-9. HUOM! Fontin täytyy olla tasalevyinen (siis kirjaimet yhtä leveitä). Niistä se sitten leikkaa ja liimaa sopivan kuvan.

Tekniset tiedot:
Tuotetun kuvan tyyppi: PNG
Käytetyn kuvan tyyppi: PNG

Käyttö:
pistä <IMG>-tagin SRC-arvoksi grafcnt.php ja lisää siihen GET-metodilla parametrejä. Siis esim. <IMG SRC="grafcnt.php?luku=15&kuva=kuva.png"> tuottaisi kuvan, jossa on luku 15 ja joka perustuu kuvaan kuva.png.

Parametrit:
Siis näitä lisätään kuten yllä selostin (epäselvästi)
luku: se luku, joka näytetään
len: kuinka monta numeroa kuvassa näytetään vähintää esim. jos luku on 15 ja len on 3, niin tulee 015, mutta jos luku on 1942 ja len on 3, näytetään 1942.
kuva: kuvatiedoston, josta kuva muodostetaan nimi. Jos tätä ei anneta, käytetään oletuksena tiedostoa laskuri.png. Jos sitä ei ole, niin katso alta.
oma: aseta arvoksi 1, niin käytetään PHP:n fonttia 2 tekstin tulostamiseen. Näin käy myös silloin, jos kuvatiedostoa ei löydy.

Lisäksi sisältää esimerkkiskriptin cnt.php, joka laskee sivun lataukset. Skripti käytössä: http://dsword.se8.org/grafcnt/

grafcnt.php

<?php
	$luku = $_GET['luku'];
	if ($luku == "") { $luku = 0; }		// jos luku on nolla, se tosiaan ON nolla
	if (isset($_GET['len'])) {			// jos on annettu pituus, niin sitä käytetään
		$len = $_GET['len'];
		if ($len > strlen($luku)) {
			$luku = str_repeat("0", $len - strlen($luku)) . $luku;
		}
	}

	// puretaan luku merkkeihin
	for ($i = 0; $i < strlen($luku); $i++) {
		$lt[$i] = substr($luku,$i,1);
	}

	$kuva = $_GET['kuva'];

	// jos kuvan nimeä ei ole määritelty, käytetään oletusasetusta "laskuri.png"
	if ( $kuva == "" ) { $kuva = "laskuri.png"; }

	// jos kuva on olemassa eikä haluta käyttää PHP:n omaa fonttia, käytetään kuvaa, muuten
	// käytetään PHP:n omaa fonttia
	if (is_file($kuva) and !($_GET['oma'] == 1)) { $pohja = imagecreatefrompng($kuva);  }
	else {
		$pohja = imagecreate(imagefontwidth(2) * 10, imagefontheight(2));
		imagecolorallocate($pohja, 255, 255, 255);
		imagestring($pohja, 2, 0, 0, "0123456789", imagecolorallocate($pohja, 255, 0, 0));
	}


	$w = imagesx($pohja) / 10; // yhden merkin leveys
	$h = imagesy($pohja);      // korkeus

	$ww = count($lt);          // tuotetun kuvan leveys
	$ww = $ww * $w;

	// kerrotaan selaimelle, että käytetään png :a
	header ("Content-type: image/png");

	// tehdään sitten uusi kuva.
	$uusi = imagecreate ($ww, $h);

	// taustaväri on musta
	$tausta  = imagecolorallocate($uusi, 0,0,0);

	// sitten kopioidaan niitten numeroiden kuvat uudelle kuvalle
	$i = 0;
	foreach ($lt as $n) {
		imagecopy($uusi, $pohja, $i * $w, 0, $n * $w, 0, $w, $h);
		$i++;
	}

	// tulostetaan se uusi kuva
	imagepng($uusi);

	// vapautetaan nämä kuvat.
	imagedestroy($pohja);
	imagedestroy($uusi);
?>

cnt.php

Tämä on kovin yksinkertainen, joten en kommentoinut. Käyttö (kuka tätä haluaa muka käyttää):

<?php include_once("cnt.php"); ?>

Ja koodi:

<?php
if (!file_exists("visit.dat")) {
	touch("visit.dat");
	chmod("visit.dat", 0664);
}
$file = file("visit.dat");
$visit = trim($file[0]);

$visit = $visit + 1;

$file = fopen ("visit.dat", "w");
fputs( $file, $visit );
fclose($file);

echo "<IMG SRC=\"grafcnt.php?luku=$visit&len=5\">";

?>

odys [28.05.2003 21:44:05]

#

Ehkä ei hyödyllisin skripti, mutta vinkkejähän nämä ovat. Hyvin kommentoitu ja joku voipi saada tästä ideoita omiin skripteihinsä. Mukavan näköistä koodia jokatapauksessa.

T.M. [29.05.2003 17:18:53]

#

Hienohan tuo on! tosin tiedosto hajoaa jos lataa sivua liian monta kertaa liian lyhyessä ajassa, tähänkään ei varmaan ole mitään ratkaisua, kun kukaan ei sitä oo kertonut... eikä flock() auta!

kala [06.06.2003 17:07:52]

#

Ja miksiköhän flock ei auta?

temu92 [29.05.2005 02:27:45]

#

Tätä mä tarttinkin. Iha jees koodi

Vastaus

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

Tietoa sivustosta