Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: Pastebin

Sivun loppuun

Juice [07.02.2005 21:11:39]

#

Yksinkertainen pastebin. Tee mielellään alikansio paste, jonne sijoitat koodin tiedostoon index.php.
Jättää sisennykset pre-tagin ansiosta.

EDIT 19.3.2006: Koodia siistimmäksi.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fi">
    <head>
        <title>PasteBin</title>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <!--CSS:llä rivinumerot + koodin muotoilu. Kiitokset ajv:lle.-->
        <style type="text/css">
            div.rivinro {
                float:left;
                margin: 0 0.2em 0 0;
                padding: 0 0.4em 0 0;
                line-height: 1em;
            }
            pre.code {
                line-height: 1em;
                white-space:pre;
            }
            h1 {
                font-size: 1.17em;
                margin: 1em 0;
                padding: 0;
            }
        </style>
    </head>
    <body>
        <h1>PasteBin</h1>
        <?php
            if($_GET['id']){
                #Jos tunnisteella löytyy
                if(file_exists($_GET['id'].'.pastebin')){
                    #Hae tiedosto
                    $txt = file($_GET['id'].'.pastebin');
                } else {
                    #Jos ei löydy
                    die("Tunniste ".$_GET['id']." on virheellinen.");
                }
                #Tulosta paste
                echo '<h2>Paste '.$_GET['id'] . ":</h2>\n\t".'<div class="rivinro">'."\n\t\t";
                #Tulosta rivinumerot
                for($i=1;$i<=count($txt);$i++){
                    echo $i.":<br />";
                }
                echo "\n\t</div>\n\t".'<pre>'."\n";
                #tulosta rivi kerrallaan
                for($i=0; $i<=count($txt);$i++){
                    echo $txt[$i];
                }
                echo "\n\t</pre>";
                #Lukijalle linkki, johon uusi voidaan jättää uusi. Ota pois jos häiritsee.
                echo "\n\t<hr /><a href='index.php'>Lisää omasi!</a>";
            }
            elseif($_POST['paste']){
                #Otetaan pois HTML ja kenoviivat
                $_POST['paste'] = htmlspecialchars($_POST['paste']);
                $_POST['paste'] = stripslashes($_POST['paste']);
                #Uniikki id
                $id = uniqid(rand());
                #Avataan pastebin-filu
                $xfile = fopen($id . '.pastebin', "w");
                #Kirjoitetaan siihen
                fwrite($xfile, $_POST['paste']);
                fclose($xfile);
                #Informoidaan käyttäjää
                echo '<a href="index.php?id='.$id.'">Paste tallennettu tunnisteella '.$id.'</a>';
                #Käydään läpi pastebin-tiedostot
                foreach(glob("*.pastebin") as $pbfilu){
                    #Tilan säästöä.
                    #Jos yli 2 viikkoa vanha, niin poista armotta || vuosi vaihtunut-poikkeustapaus
                    if(date(W,time())-date(W,filemtime($pbfilu)) >= 3 || date(W,time())-date(W,filemtime($pbfilu)) < 0){
                        unlink($pbfilu);
                    }
                }
            #Jos ei haeta eikä laiteta uutta, niin lomaketta peliin
            } else {
                echo '<form action="index.php" method="get">'."\n\t\t";
                echo '<label>Hae tunnisteella: </label></td><td><input type="text" name="id" id="id" /><input type="submit" value="Hae!" />'."\n\t\t";
                echo '</form>';
                echo '<br /><br /><form action="index.php" method="post">'."\n\t\t";
                echo '<textarea cols="60" rows="15" id="paste" name="paste"></textarea>'."\n\t\t";
                echo '<br /><input type="submit" value="Lähetä" />'."\n\t</form>\n";
            }
            ?>
    </body>
</html>

ajv [08.02.2005 20:19:59]

#

Tässä esimerkki, kuinka saa rivinumerot pastebiniin CSS:llä.

Edit: Varoituksen sanana laitappa vielä tuolle h1:lle nuo tyylimääritykset, muuten noiden koodirivien numerointi ei välttämättä natsaa kaikilla selaimilla, sillä eri selaimilla on hieman erilaiset oletusmääritykset eri elementeille. Esim Operalla ei taida näkyä oikein.
Muuten ihan ok pätkä.

Edit: Yllätys yllätys: IE ei ymmärä whitespace: pre;

Juice [08.02.2005 22:49:02]

#

Kiitos ajv ;D

T.M. [11.02.2005 15:17:11]

#

Eikös toi koodi rivity ollenkaan? ajv:n esimerkin mukaisesti näyttää siltä ettei rivity...

Juice [11.02.2005 18:13:28]

#

Rivittyyhän se, nyt ;)

ajv [11.02.2005 20:24:51]

#

T.M. kirjoitti:

Eikös toi koodi rivity ollenkaan? ajv:n esimerkin mukaisesti näyttää siltä ettei rivity...

Juu, kun tein ton koodin, ei ollut IE käytössä. Fixailin vähän, nyt pitäs toimii IE:lläkin.

dera [29.04.2005 17:40:39]

#

Warning: fopen(115169601042724733c9b58.pastebin): failed to open stream: Permission denied in /mbnet/d/dera/pastebin/index.php on line 58

Warning: fwrite(): supplied argument is not a valid stream resource in /mbnet/d/dera/pastebin/index.php on line 60

Warning: fclose(): supplied argument is not a valid stream resource in /mbnet/d/dera/pastebin/index.php on line 61
Paste tallennettu tunnisteella 115169601042724733c9b58

Juice [29.04.2005 18:12:03]

#

No sanoisko CHMOD sulle mitään...
Joten muistakaahan chmodata hakemisto (664 riittänee, jos ei, laittakaa 666), jonne tallennetaan pastet.

dera [09.05.2005 06:49:16]

#

ai prkl unohdin sen kansion CHMOdata ku pitkään mietin että mikäs nyt kusee ;D

rax [03.05.2008 11:50:33]

#

Mikäs kohta tässä määrittelee sen että mihin pastet lähtee?
Ku haluun ne tiettyyn kansioon enkä siihen samaan kansioon missä se pastebin on..

Vai eikö se sitten osaa ottaa niitä?
Siis sitten se ei varmaan osaa tehä sitä index.php?id=2y3788djs9384k3993 osotetta

Juice [04.05.2008 20:30:38]

#

rax kirjoitti:

Mikäs kohta tässä määrittelee sen että mihin pastet lähtee?

Muuta seuraavat funktiokutsut:

#Jos tunnisteella löytyy
                if(file_exists($_GET['id'].'.pastebin')){
                    #Hae tiedosto
                    $txt = file($_GET['id'].'.pastebin');


#Avataan pastebin-filu
                $xfile = fopen($id . '.pastebin', "w");


#Käydään läpi pastebin-tiedostot
                foreach(glob("*.pastebin") as $pbfilu){

Metabolix [10.12.2011 03:23:44]

#

Vinkki kaipaisi vähän siistimistä: date-kutsuissa on määrittelemätön vakio W, aikatarkistus on muutenkin pielessä (ei poista koskaan loppuvuoden pasteja), stripslashes on yleensä nykyään turha ja vaatisi vähintäänkin magic_quotes_gpc-tarkistuksen, htmlspecialchars olisi tyylikkäämpi vasta tulostusvaiheessa, id:tä ei tarkisteta tai käsitellä (XSS-aukko virheilmoituksessa), die ei sovellu XHTML:n sekaan ja (X)HTML-koodi ei ole muutenkaan validia.


Sivun alkuun

Vastaus

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

Tietoa sivustosta