Vraag & Antwoord

Webprogrammeren & scripting

php wil niet naar file schrijven

Anoniem
Jurriaan R
10 antwoorden
  • De bedoeling van dit stukje php is dat het een afbeelding weergeeft met het aantal views, datum, en ip van degene die hem bekijkt.
    omdat het aantal views best snel stijgt als je er niet een soort van filter voor zet, leek het mij wel wat om per ip per dag max 1 view bij het totaal toe te voegen.

    Het aantal views staat in avatar.txt
    de ip adressen in ip.txt
    en de datum in date.txt

    het script kijkt of de datum in date.txt overeenkomt met de huidige datum en voert dan de rest uit. als de data verschillend zijn zet hij de nieuwe datum in date.txt en cleared hij ip.txt

    iedere keer als het script gedraaid word word er gekeken of het ip wat hem geactiveerd heeft al in ip.txt staat. is dit niet het geval zet hij hem erbij en telt 1 op bij de waarde uit avatar.txt
    als hij er al wel instaat laat hij de avatar zien zonder eerst het getal te increasen.

    op het moment gaat het fout bij het loggen van de ip's
    dus, read_ip() en add_ip()
    het kan zijn dat er nog een andere fouten inzitten maar die zijn nog niet aan het licht gekomen bij mij.
    [code:1:97d5751393]
    <?
    #variable declaration part
    $fp = fopen("avatar.txt", "r");
    $nummer = fread($fp, 8);
    fclose($fp);

    $datum = date("d.m.y");

    #function declaration part
    function leeg() {
    $fil = fopen("date.txt", "w");
    fwrite($fil, date("d.m.y"));
    fclose($fil);
    $fil2 = fopen("ip.txt", "w");
    fclose($fil2);
    }

    function add_ip() {
    $fp2 = fopen("ip.txt", "a");
    fwrite($fp2, "$REMOTE_ADDR\n");
    fclose($fp2);
    increase();
    }

    function read_ip() {
    $a = 1;
    $file = file("ip.txt");
    for ($i = 0; $i <= count($file); $i++) {
    if ($file[$i] == $REMOTE_ADDR) {
    $a = 0;
    }
    if ($a == 0) break;
    }
    return $a;
    }

    function increase() {
    $nummer = $nummer + 1;
    $fp = fopen("avatar.txt", "w");
    fwrite($fp, "$nummer");
    fclose($fp);
    }

    #control part
    $datu = file("date.txt");
    if ($datu[0] != date("d.m.y")) {
    leeg();
    }

    if (read_ip()) { add_ip(); }

    #image create part
    header ("Content-type: image/png");
    $im = @imagecreatefrompng ("avatar.png");
    $wit = imagecolorallocate ($im, 255, 255, 255);
    $grijs = imagecolorallocate ($im, 155, 155, 155);

    imageString($im, 2, 10, 65, $datum, $grijs);
    imageString($im, 2, 10, 75, $REMOTE_ADDR, $grijs);
    imageString($im, 2, 10, 85, $nummer, $grijs);

    imagepng ($im);
    imagedestroy($im);
    ?> [/code:1:97d5751393]

    edit: code update
    edit: code update 2
  • Wat gaat er fout dan? Haal die @ eens weg voor die "fopen(…)", nu worden alle foutmeldingen vrolijk onderdrukt en zal je er nooit achterkomen wat er nu echt fout is…
  • edit:

    wazige fout is er uit.. maar het werkt dus niet .. hij schrijft de ip's niet weg naar de file en telt niks op bij de waarde .. maar dat kan dus komen dat de read_ip() functie niet klopt .. alleen zie ik de fout niet …

    klik hier voor script in actie
    text files staan in dezelfde dir dus je kan zo zie wat ie (niet) output
  • Ik denk dat de attributen niet goed staan op de server.
  • [quote:dac7d1462a="Chris de Boden"]Ik denk dat de attributen niet goed staan op de server.[/quote:dac7d1462a]
    dat denk ik niet, ik heb al meerdere scripts gebakken de gebruik maken van externe files.. en die werkten allemaal
  • Ach ja, 't was een suggestie :)
  • Ik zie inderdaad ook niet zo snel waar het aan kan liggen, de code ziet er op zich goed uit. Maar wat gaat er nou precies fout? Toen ik op jouw link klikte kreeg ik een avatar te zien van "Think Stoned" met daarin de volgende tekst:

    09.10.02
    213.84.***.***
    19

    Het bovenste was de datum waarop ik keek, het ip-adres klopte en ik heb de link meerdere keren geopend maar het getal 19 nam niet toe, dus ik heb zo'n flauw vermoeden dat de code gewoon werkt… Toch? Of mis ik nou iets?

    - Basje.
  • jah .. iedereen krijgt er dus 19 bij te zien .. en als je de text files bekijkt zie je dat ip.txt ook nooit veranderd
  • [quote:88a1039abd]
    $datu = file("date.txt");
    [/quote:88a1039abd]

    Ik denk dat het probleem in deze regel zit, want je opent het bestand volgens mij niet.
  • [quote:1926a18fb2="mispunt"][quote:1926a18fb2]
    $datu = file("date.txt");
    [/quote:1926a18fb2]

    Ik denk dat het probleem in deze regel zit, want je opent het bestand volgens mij niet.[/quote:1926a18fb2]
    nee.. want file("filename"); mikt de inhoud van een file in een array .. dat werkt dus helemaal goed ..

    ik heb inmiddels dus het hele script werkend .. dit is het werkende script voor degene die er in geintreseerd is,

    [code:1:1926a18fb2]<?
    #variable declaration part
    error_reporting(E_ALL);
    $ip = $REMOTE_ADDR;
    $fp = fopen("avatar.txt", "r");
    $nummer = fread($fp, 8);
    fclose($fp);

    $datum = date("d.m.y");

    #function declaration part
    function leeg() {
    $fil = fopen("date.txt", "w");
    fwrite($fil, date("d.m.y"));
    fclose($fil);
    $fil2 = fopen("ip.txt", "w");
    fclose($fil2);
    }

    function add_ip() {
    $fp2 = fopen("ip.txt", "a");
    fwrite($fp2, $GLOBALS["ip"]);
    fwrite($fp2, "\n");
    fclose($fp2);
    increase();
    }

    function increase() {
    $GLOBALS["nummer"]++;
    $fp = fopen("avatar.txt", "w");
    fwrite($fp, $GLOBALS["nummer"]);
    fclose($fp);
    }

    #control part
    $datu = file("date.txt");
    if ($datu[0] != date("d.m.y")) {
    leeg();
    }

    $file = file("ip.txt");
    if (sizeof($file) == 0 || !in_array("$REMOTE_ADDR\n", $file)) {
    add_ip();
    }


    #image create part
    header ("Content-type: image/png");
    $im = @imagecreatefrompng ("avatar.png");
    $wit = imagecolorallocate ($im, 255, 255, 255);
    $grijs = imagecolorallocate ($im, 155, 155, 155);

    imageString($im, 2, 10, 65, $datum, $grijs);
    imageString($im, 2, 10, 75, $REMOTE_ADDR, $grijs);
    imageString($im, 2, 10, 85, $nummer, $grijs);

    imagepng ($im);
    imagedestroy($im);
    ?> [/code:1:1926a18fb2]

    zoals een oplettende lezer ziet, de functie read_ip() is er helemaal uit en vervangen door:
    [code:1:1926a18fb2]$file = file("ip.txt");
    if (sizeof($file) == 0 || !in_array("$REMOTE_ADDR\n", $file)) {
    add_ip();
    }[/code:1:1926a18fb2]

    een groot probleem was dus dat hij vars niet kon vinden omdat het global vars waren en die zijn dan binnen functies niet bekende en moet je dus met $GLOBALS["varnaam"] aanroepen.

    hier meer info daarover

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.