Számláló készítése III.

Már van két ilyen témájú cikk a tutorial.hu oldalon (Egyszerű oldalszámláló PHP-val (írta: Lyzu)) és “Egyszerű számláló készítése weblapunkra” (Írta: BlackY)), de mindkettőnek van egy közös hibája: szövegesek. A BlackY Scriptek kategóriában található counter.zip ezt a hibát küszöböli ki…

A programnak szüksége van az ún GD (képmanipuláló) könyvtár meglétére, ami ingyenes tárhelyeken kérdéses, így ezeken működése nem garantált!

A program működése röviden összefoglalva annyi, hogy egy külső fileból (counter.txt az alapbeállítás) kiveszi az addig történt oldalehívások számát, és hozzá ad egyet, majd egy a megadott méretű képet létrehoz és a számjegyenkből “összerakja” a végleges képet… A programban a következő beállításokat változtathatjuk meg:

1
2
3
4
5
$counterfile = 'counter.txt';
$digits = '8';
$imagedir = 'images';
$filewidth = '150';
$fileheight = '30';

A $counterfile változó megmondja, hogy melyik fájlban van a számláló… A $digits változó a megjelenített számjegyeket adja meg. Amennyiben az addig elért látogatottságunk kevesebből áll, akkor “feltölti” 0-kal… (Az elején, természetesen :D ) Az $imagedir változó annak a könyvtárnak a nevét adja meg, ahol a számjegyeket tartalmazó képek vannak. Ezekről annyit, hogy 0-tól 9-ig kell lennie a nevüknek és png típusúnak kell lenniük. A $filewidth és $fileheight a megjelenített végső kép szélességét és magasságát adja meg, ám ettől eltérhet a végleges az egészszámra való kerekítések miatt!
(Lásd.: 150:8=18,75. Ez 19-re lesz kerekítve és visszaszorozva 8-al (19*8=152))

A használata nagyon egyszerű, töltsük fel a fileokat a szerverre (például egy counter mappába) és utánna oda, ahove szeretnénk egy számlálót helyezni a következőt írjuk be:

1
<img src="counter/counter.php" />

(Feltételezve, hogy a counter mappába tettük!)
Ezután az oldalunkat megtekintve már egy szuper high-tect számláló fog minket fogadni… :)

letöltés: counter.zip

Szerző: BlackY

13 HOZZÁSZÓLÁS

  1. Szia Harder!

    Nekem valamiért nem jól működik, mert amikor 1-el növexik a látogatottság, akkor nem a végére írja az új számot, hanem az első karaktert írja mindig át.
    Tehát ha 4 jegyű számot kell kiírnia, akkor a kiírásban az első szám, a négyjegyű szám utolsó karaktere, és a a számláló végén írt 3 szám pedig a négyjegyű szám első 3 karaktere…
    Hű hát ez nem lett egy egyszerű mondat :)

    Tudsz segíteni abban, mi lehet a gond?

    Köszi: Graffy

  2. Graffy: megnéztem és rájöttem, hogy mi a hiba (persze csak ha tőlem is elfogadod a választ :P)

    találsz a counter.php-ban egy ilyen sort:

    39
    
    foreach($numbers as $number)

    módosítani kell erre:

    39
    
    foreach($numbers as $key => $number)

    valamint van egy ilyen sort

    43
    
    ImageCopyResized($image, $incl_image, key($numbers)*$numberwidth, 0, 0, 0, $numberwidth, $fileheight, $width, $height);

    amit erre kell módosítani:

    43
    
    ImageCopyResized($image, $incl_image, $key*$numberwidth, 0, 0, 0, $numberwidth, $fileheight, $width, $height);

    Maga a hiba onnan eredt, hogy valami miatt a key függvénynek rossz volt a visszatérési értéke (0 helyett az első értéke 1 volt, és a $numbers tömb 7-es indexű elemét NULL indexűnek dobta vissza :S).

  3. Valamint az előző üziből kimaradt, viszont ez a sor az átalakítás után már teljesen felesleges, így kitörölheted:

    44
    
    next($numbers);

    További szép napot és jó php-zást :)

  4. Szia Harder!

    Én nekem olyan problémám van, hogy amikor feltöltöm az oldalta számlálóval az ATW oldalára akkor tökéletesen működik és növekszik a számláló. Viszont amikor feltöltöm a vásárolt Domain címre/serverre akkor valamiért nem növekszik hanem minidg ugyan azt a számot adja vissza, mintha nem mentené el ‘és nem is menti’ a counter.txt-be az adatokat.

  5. Ákos: a szerveren a counter.txt fájlnak milyen attribútumai vannak? Általában 644-es szokott lenni, ami csak olvasási jogot jelent, de írni nem lehet, ezért érdemes 777-es jogot beállítani.

    Ha véletlen nem menne az attribútum beállítás, akkor ezt kukkold meg: http://www.tutorial.hu/chmod-beallitasai/

  6. Köszönöm szépen a segítséget erről még nem is halottam :D. De mostmár ennyivel okosabb lettem.

    Még egyszer köszönöm.

  7. sziasztok!
    bocsi, de elég kezdővagyok, és sajnos nem találom a megoldást a következő problémámra:
    nem tudom mozgatni a számlálót. :((
    hol és mit kell átírni ahhoz hogy változtatni tudjam a számláló helyét az oldalamon?

    u.i.:nagyon jól működik a számláló! köszönöm!

  8. sziasztok!
    A Freewebes szerveren működik a BlackY féle számláló? Én ugyan is feltettem, de nem jelenik meg a kép
    Köszi
    Soma

  9. ez mind szép és mind jó…de ha php vel includolom a tartalmat hogy az oldal ne töltöődjön be mindig (ezzel:

    akkor ha másik menüre kattintok akkor is görgeti eggyel a számlálót.
    a számláló:
    <?php
    $filename = ‘latogatas_szamlalo/counter.txt’;
    // Megnyitjuk a file-t és kiszedjük belole az eddigi értéket
    if(!$fileopened = @fopen($filename, ‘r’)) {
    // Valamiért nem sikerült megnyitni a filet (rosssz az atríbuma), akkor hagyjuk az egészet :)
    exit();
    }
    $counter = @fgets($fileopened,1024);
    // Hozzáadunk egyet, és kiírjuk az eredményt a weboldalra
    $counter++;
    // Újra megnyitjuk a filet és beleírjuk az új eredményt
    if(!$fileopened = @fopen($filename, ‘w’)) {
    // Ha nem sikerült megnyitni (nincs írásjog), akkor kiírjuk az eredményt, és hagyjuk az egészet :)
    exit();
    }
    @fwrite($fileopened, $counter);
    @fclose($fileopened);

    szal erre tudtok megoldást??

  10. Tisztelt Lapszerkesztő!
    Engem egy weblap számláló érdekelne, ki is másoltam a counter.php fájlt,
    A számsort át alakítottam, ami nekem tetszik, images könyvtárban, a
    counter.txt fájl 0-ról indúlt, jól működik, kszönöm. Csak az a baj, hogy tizen-től a számok nem egymás mellett vannak. Pl. 15 igy mutat: 500000001
    Elküldöm a web-kódot.

    <?PHP
    $counterfile = "counter.txt";
    $digits = "9";
    $imagedir = "images";
    $filewidth = "150";
    $fileheight = "25";
     
    //error_reporting(0);
    $counter = fopen($counterfile, 'r');
    $now = fread($counter, filesize($counterfile));
    fclose($counter);
     
    $now++;
     
    $counter = fopen($counterfile, 'w');
    fwrite($counter, $now);
    fclose($counter);
     
    if(strlen($now) < $digits)
    {
    while(strlen($now) $digits)
    {
    $digits = strlen($now);
    }
     
    $numberwidth = intval($filewidth / $digits);
     
    $image = imagecreate($numberwidth * $digits, $fileheight);
     
    $numbers = preg_split(//’, $now, -1, PREG_SPLIT_NO_EMPTY);
    foreach($numbers as $number)
    {
    list($width, $height) = GetImageSize($imagedir ./. $number ..png’);
    $incl_image = imagecreatefrompng($imagedir ./. $number ..png’);
    ImageCopyResized($image, $incl_image, key($numbers)*$numberwidth, 0, 0, 0, $numberwidth, $fileheight, $width, $height);
    next($numbers);
    imagedestroy($incl_image);
    }
     
    header(‘Pragma: no-cache’);
    header(‘Content-type: image/png’);
    imagepng($image);
    imagedestroy($image);
    ?>

    Ha lenne szives igazítani rajta, szívesen megköszönném.
    Tisztelettel: Admin Lap.

  11. Kedves Admin Lap.

    Jó régi ez a kód, kicsit felújítva és a felesleges dolgok rövidítve:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    
    <?PHP
    $counterfile = 'counter.txt';
    $digits = '8';
    $imagedir = 'images';
    $filewidth = '150';
    $fileheight = '30';
     
    // ***************** NO USER EDITABLE PARTS BELOW *********************
     
    $now = file_get_contents($counterfile);
    file_put_contents($counterfile, ++$now);
     
    $now = str_pad($now, $digits, '0', STR_PAD_LEFT);
    $numberwidth = intval($filewidth / $digits);
    $image = imagecreate($numberwidth * $digits, $fileheight);
    $numbers = preg_split('//', $now, -1, PREG_SPLIT_NO_EMPTY);
     
    foreach($numbers as $index => $number) {
    	$incl_image = imagecreatefrompng($imagedir . '/' . $number . '.png');
    	$width = imagesx($incl_image);
    	$height = imagesy($incl_image);
    	imagecopyresized($image, $incl_image, $index*$numberwidth, 0, 0, 0, $numberwidth, $fileheight, $width, $height);
    	imagedestroy($incl_image);
    }
    header('Pragma: no-cache');
    header('Content-type: image/png');
    imagepng($image);
    imagedestroy($image);

HOZZÁSZÓLOK A CIKKHEZ

Kérjük, írja be véleményét!
írja be ide nevét