Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Tiedostojen kopiointilaskuri

Sivun loppuun

trinit [08.11.2002 13:40:15]

#

Yksinkertainen PHP-skripti joka tallentaa tiedostojen kopiointitilastot tiedostoon josta ne voidaan lukea ja näyttää myöhemmin sivulla

kopioi.php

<?php

    $id = $_GET['file'];

    if (!file_exists("kopioinnit.dat"))
    {
        $ff = fopen("kopioinnit.dat", "w"); fclose($ff);
        chmod("kopioinnit.dat", 0777);
    }

    $fcon = file("kopioinnit.dat");
    $found = false;

    for ($i = 0; $i < count($fcon); $i++)
    {
        $tmp = explode(":", trim($fcon[$i]));

        if (trim($tmp[0]) == $id)       // tiedostolla on tilastotietoja
        {
            $cnt = trim($tmp[1]);
            $cnt++;
            $tmp[1] = $cnt;             // lisätään yksi kopiointi

            $fcon[$i] = $tmp[0] . ":" . $tmp[1];
            $found = true;

            break;
        }
    }

    if (!$found)
    {
        $ff = fopen("kopioinnit.dat", "w");
            for ($i = 0; $i < count($fcon); $i++)
            {
                fwrite($ff, trim($fcon[$i]) . chr(13) . chr(10));
            }
            fwrite($ff, trim($id) . ":" . "1" . chr(13) . chr(10));
        fclose($ff);
        chmod("kopioinnit.dat", 0777);
    }
    else
    {
        $ff = fopen("kopioinnit.dat", "w");

        for ($i = 0; $i < count($fcon); $i++)
        {
            fwrite($ff, trim($fcon[$i]) . chr(13) . chr(10));
        }

        fclose($ff);
        chmod("kopioinnit.dat", 0777);
    }

    unset($fcon);

    echo '<HTML>\n';
    echo '<HEAD>\n';
    echo '<META HTTP-EQUIV="Refresh" content="0; URL=' . $id . '">\n';
    echo '<TITLE>Aloitetaan kopiointi...</title>\n';
    echo '</head>\n';
    echo '<BODY>\n';
    echo 'Jos kopiointi ei käynnisty automaattisesti, kopioi tiedosto <a href="' . $id . '">' . $id . '</a><br><br>\n';
    echo '<a href="index.php">Takaisin etusivulle</a>\n';
    echo '</body>\n';
    echo '</html>\n';

?>

Kopiointitilaston lukufunktio

<?php
    function LueKopioinnit($id)
    {
        if (!file_exists("kopioinnit.dat"))
        {
            echo "0";
            return;
        }
        else
        {
            $fcon = file("kopioinnit.dat");

            for ($i = 0; $i < count($fcon); $i++)
            {
                $tmp = explode(":", trim($fcon[$i]));

                if (trim($tmp[0]) == $id)       // tiedostolla on tilastotietoja
                {
                    echo $tmp[1];
                    return;
                }
            }

            echo "0";     // ei löytynyt
            return;
        }

    }
?>

Käyttöesimerkit

<!-- Kopiointitilastoja voidaan lukea esimerkiksi näin: -->

Tämä tiedosto on kopioitu <?php LueKopioinnit("tiedosto.zip"); ?> kertaa

<!-- Jotta tilastot päivittyisivät, tiedostoihin johtavat linkit tehdään alla olevan esimerkin mukaisesti: -->

Tästä voit kopioida <a href="kopioi.php?file=tiedosto.zip">tiedosto.zip</a> tiedoston

kopioinnit.dat

Sisältää kopiointilastot jokaiselle tiedostolle tässä muodossa:

tiedosto1.zip:1
tiedosto2.zip:4

Siis tiedostox.zip on kopioidun tiedoston nimi ja 1 kopiointimäärä. Tiedostojen nimiä ei tarvitse lisätä tähän tiedostoon itse vaan skripti lisää tiedostonimen ja kopiointimäärän automaattisesti – edes tätä tiedostoa ei tarvitse luoda valmiiksi, koska sekin luodaan tarvittaessa automaattisesti.

Antti Laaksonen [09.11.2002 17:23:09]

#

Toimiva ja käyttökelpoinen skripti

thefox [09.11.2002 19:53:53]

#

Selkeää koodia, asialliset selostukset ja käytännöllinen skripti.
Onkohan tuossa rivityksessä jotain vikaa kun tuo "tilastotietoja" tulee uudelle riville näin pistäen skriptin toimimattomaksi?

trinit [10.11.2002 10:56:29]

#

Näyttäisi siltä, että rivit on katkaistu 70 merkin kohdalta jolloin mm. nuo kommentissa olevat rivit jakautuvat kahdelle riville - samoin kuin muutkin yli 70 merkkiä olevat rivit. Kun lähetin vinkin, niin siinä nimenomaan oli pitkiä rivejä.

No, ne jotka käyttävät tätä vinkkiä: korjatkaa väärin jakautuvat rivit niin, että ne ovat samalla rivillä!

tuobbi-89 [10.11.2002 20:03:37]

#

Olenkin tuollaista kaipaillut. :)

T.M. [11.11.2002 18:40:46]

#

"Yksinkertainen PHP-skripti joka ..." joo'o.. yksinkertainen...

T.M. [11.11.2002 19:22:41]

#

***Kopiointitilaston lukufunktio

mihin tiedostoon toi laitetaan???? ei näytä wörrkkivän

T.M. [11.11.2002 19:29:24]

#

Warning: chmod failed: Operation not permitted in /mbnet/w/winuus/kopy/kopioi.php on line 52
\n\n\n\n\n\nJos kopiointi ei käynnisty automaattisesti, kopioi tiedosto

trinit [11.11.2002 20:02:47]

#

Kopiointitilastojen lukufunktio pistetään sille sivulle jossa niitä tilastoja halutaan näyttää. Esim. omalla kotisivullani (http://trinit.cjb.net) olen sijoittanut sen index.php sivun alkuun koska etusivulla näytetään kopiointitilastoja. Katso mallia tekstitiedostosta http://www.saunalahti.fi/~trinit/index.txt . Siinä on siis index.php:n lähdekoodi.

Anon [11.11.2002 20:07:12]

#

chmod 777, hahahaha! eikä taida edes lukituksia hoitaa kunnolla? NAPS, ja viritys RIKKI kun tulee läjä osumia!!

trinit [11.11.2002 20:12:06]

#

anon, tämän skriptin tarkoitus ei ollutkaan olla täydellinen lukituksia myöten vaan _yksinkertainen_ koodivinkki. Sitä saa ja pitää parannella ja muokata omiin tarkoituksiin sopivaksi...

Antti Laaksonen [11.11.2002 20:24:12]

#

CHMOD-777:ssa ei ole yhtään mitään vikaa, niin kauan kuin tiedostoissa ei ole mitään tärkeää tietoa. Lukitukset voi lisätä itse, jos niitä pitää tärkeinä, eihän ole tarkoitus, että skriptit saadaan suoraan valmiina nenän eteen ;)

tArzAn [13.11.2002 17:10:58]

#

Mitä järkeä on väärin toimivien esimerkkein levittämisessä, eikös vinkkien tarkoituksena olisi opettaa kuinka asiat tehdään oikein eikä kuinka asiat tehdään väärin? Sen tarkemmin tuota vinkkiä tarkastelematta lukitukset ovat kuitenkin hyvin tärkeitä esim. tuollaisissa webbilaskureissa ym.

Lisäksi todellisuudessa kaikki tiedostot ovat tärkeitä, sillä muutenhan ne voi vaikka tuhota milloin vain? Ei liene mukavaa jos joku toinen samalla koneella majaileva käy kirjoittamassa "echo owned > /path/kopioinnit.dat".

trinit [29.11.2002 18:57:00]

#

Korjatkaa seuraava rivi jos käytätte tätä vinkkiä:

chmod("ZIP/kopioinnit.dat", 0777);

rivi muotoon:

chmod("kopioinnit.dat", 0777);

Kyseinen rivi löytyy kopioi.php tiedostosta viimeisen else-lausekkeen sisältä

trinit [12.03.2003 15:42:25]

#

Em. muutokset kopioi.php tiedostoon on nyt tehty itse koodiin joten koodin pitäisi olla heti käyttövalmis

makeuu [12.10.2003 14:49:56]

#

Miks mulla tulee :: Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING, expecting ']' in /mbnet/m/munkansio/muntiedosto.php on line 57 :: Kansioiden nimet otettu pois Feikillä!!

makeuu [12.10.2003 14:50:40]

#

Ja tuo rivi 57 on:

echo '<HTML>\n';

trinit [19.10.2003 09:32:22]

#

Parse error viittaisi johonkin puuttuvaan ] -merkkiin tai puolipisteeseen ; Ainakin itse sain yo. vinkin toimimaan samantien joten en keksi muuta neuvoa kuin että kopioit vinkin koodin uudestaan ja kokeilet taas. Jollei toimi niin katsotaan sitten taas uudestaan.

CatZ [29.04.2005 18:40:53]

#

Warning: chmod(): Operation not permitted in /home/.../public_html/.../.../kopioi.php on line 52
\n\n\n\n\n\nJos kopiointi ei käynnisty automaattisesti, kopioi tiedosto xxxxxxxx.MPG

\nBACK\n\n\n

????????????????????????????????????????????????????????????


Sivun alkuun

Vastaus

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

Tietoa sivustosta