1
2
3
4
5
6
7
8
9
Din uppgift
2.3.6 Skrivning till filen
Det är förhållandevis enkelt att läsa filer. Hela
Internet går ju ut på att läsa filer och visa dessa.
Att skriva är dock lite mer komplicerat.
Kopiera all kod som fiinns i rutan nedan och sätt in i en ny
fil som du kallar filtest.php. Prova detta program genom att
surfa till detta program på din hemsideskatalog.
<?php
$teststräng = "en liten teststräng";
# Öppna en fil för skrivning
# skapa den vid behov
$filen = fopen ( "testa.txt", "w+" );
# gick det?
if ( $filen )
{
# lås filen så att andra kan läsa men inte skriva
flock( $filen, 1 );
# skriv till filen
fputs ( $filen, $teststräng );
# tag bort låsningen
flock( $filen, 3 );
# stäng filen
fclose ( $filen );
echo "Har skrivit till filen";
}
else
{
echo "Det sket sig!";
}
?>
Om detta program fungerar är allt frid och fröjd, men troligtvis
får du följande resultat istället (... kommer att ersättas
av din hemkatalogs path):
Warning: fopen("testa.txt", "w+") - Permission denied in
...\tt2.php on line 5
Det sket sig!
Om du fick ett felmeddelande i stil med ovanstående beror detta
på att php-programmet inte har rätt att skriva till denna
fil. Gör i så fall följande:
- Linux som server
Skapa filen testa.txt i din php katalog. Du kan fast
använda valfri editor och skapa en fil med minst ett tecken i.
Kontakta serven med ett SSH program.
Om du använder shell (där du skriver kommandon) så
skriver du följande:
cd public_html
cd php
chmod 777 testa.txt
Om du använder SSH's filebrowserfönster kan du högerklicka
på filen testa.txt och välja Properties.
Se till att dessa är 777
- Windows som server
Skapa filen testa.txt i php katalogen
Högerklicka på filen och välj Properties, Secutity
Se till att användaren IUSR_datornnamn har modify
rättigheter (om din dator heter KALLE finns det således
en användare med namnet IUSR_KALLE. Det är detta konto som
används för anonyma surfarklienter)
(Bägge operativsystemen kräver således att filen finns
för att man skall kunna ändra på dess rättigheter.
En bättre idé kan vara att sätta alla filer som skall
kunna ändras till en underkatalog, och därefter se till att
hela katalogen har modifieringsrättigheter.)
Efter att ha gjort ovanstående ändringar i filskyddet för
testa.txt kan du prova filtest.php igen. Förhoppningsvis
fungerar det nu.
Du kan även prova följande ändringar. Prova programmet
flera gånger genom att klicka på refresh i din browser.
Tag sedan en titt på vad filen testa.txt innehåller.
<?php
$teststräng = "en liten teststräng";
# Öppna en fil för skrivning
# skapa den vid behov
$filen = fopen ( "testa.txt", "a");
# gick det?
if ( $filen )
{
# lås filen så att andra kan läsa men inte skriva
flock( $filen, 1 );
# skriv till filen
fputs ( $filen, $teststräng . "\r\n");
# tag bort låsningen
flock( $filen, 3 );
# stäng filen
fclose ( $filen );
echo "Har skrivit till filen";
}
else
{
echo "Det sket sig!";
}
?>
Modifiera din gästboksfil
Se till att guestbook.txt har skrivrättigheter satt på
samma sätt som du satte skrivrättigheter för filen testa.txt.
Vill du veta vad 766 egentligen betyder så ta en titt på
sidan filerna_fil.php. Dessutom kan det
vara skäl att se hur fopen fungerar på sidan filerna_fil3.php
Modifiera din guestbook.php
<html> <head> <title>En gästbok</title> </head> <body> <form> <table border="1"> <tr><td>Namn:</td><td> <input type="text" name="vem"> </td></tr> <tr><td>Elpost:</td><td> <input type="text" name="elpost"> </td></tr> <tr><td>Ärende:</td><td> <input type="text" name="arende"> </td></tr> <tr><td>Text:</td> <td> <textarea name="texten" rows="5" cols="40"></textarea> </td></tr> <tr><td> </td><td> <input type="submit" name="knapp" value=" Skriv "> </td></tr> </table> </form> <?php function beakta_alla_dumheter( $text ) { $text = strip_tags( $text ); $text = strip_tags( $text ); $text = nl2br( $text ); $text = str_replace( "\r", "", $text ); $text = str_replace( "\n", "", $text ); $text = str_replace( "\\\"", "\"", $text ); $text = str_replace( "|", "", $text ); return $text; } if ( isset( $_REQUEST[ "knapp" ] ) ) { $vem = $_REQUEST[ "vem" ]; $elpost = $_REQUEST[ "elpost" ]; $ärende = $_REQUEST[ "arende" ]; $texten = $_REQUEST[ "texten" ]; $datum = date("Y.m.d H:i"); $vem = beakta_alla_dumheter( $vem ); $ärende = beakta_alla_dumheter( $ärende ); $elpost = beakta_alla_dumheter( $elpost ); $texten = beakta_alla_dumheter( $texten ); $allt = $datum . "|" . $vem . "|" . $elpost . "|" . $ärende . "|" . $texten ;
# ändrat lite på echo för att visa tydligare vad som skett echo "Du klickade på Skriv och följande kommer att sättas i filen<br>"; echo htmlentities ($allt); # öppna guestbook.txt för "append" = tillägg $filen = fopen ( "guestbook.txt", "a"); # gick det? /* förhindrar skrivning i detta exempel på grund av att det missbrukats if ( $filen ) { # lås filen så att andra kan läsa men inte skriva flock( $filen, 1 ); # skriv till filen \n är för att notepad skall fputs ( $filen, $allt . "\n"); # tag bort låsningen flock( $filen, 3 ); # stäng filen fclose ( $filen ); } */ }
# all PHP kod som tidigare
# ... ?> </body> </html>
|