Filhantering
Vi börjar med lite läsa och skriva till en befintlig fil
Det första som krävs är man har tillåtelse att sätta om rättigheterna på specifika filer på sitt konto på servern. Det har vi lyckligtvis på labbservern och görs enklast med FileZilla, högerklicka på filen och välj "File Attributes", ställ om "group" och "public" rättigheterna till att både read och write är tillåtet (dvs filen får ett värde på 666).Detta innebär som sagt att filen måste finnas innan vi kan börja arbeta mot den.
Exemplen nedan är antagligen inte så mycket att orda om utan man förstår antagligen rätt lätt vad de gör.
kör: file_read.php
koden:
| <html> <head> <title>file reading</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> |
En viktig grej: vi kan bara göra en sak itaget, vill vi läsa så
öppnar vi filen i läs-läge och innan vi kan göra något
annat så måste vi stänga den och öppna den i nästa
läge för att kunna fortsätta. T ex som exempel file_write_read_1.php
som öppnar en befintlig fil och rensar och sen skriver vi, sen stönger
vi filen, öppnar igen för att skriva i filen där den slutar (görs
med appand-kommandot), stänger filen och slutligen så öppnar
vi den för att läsa.
Innan vi kommer igång så visar vi på tre kommandon för
att testa en fil.
kör: file_write_read_1.php
koden:
| <html> <head> <title>file write read 1</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> print "Nu ser innehållet på filen, $filename, ut så
här:<br>"; print "<hr>Skriver till mer info till $filename<br>"; print "Nu ser innehållet på filen, $filename, ut så
här:<br>"; |
Det enda nya i sista exemplet är hur man plockar ut ett värde och omvandlar det till tal för att kunna utföra en beräkning.
kör t ex: file_write_read_2.php
koden:
| <html> <head> <title>file write read 2</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <?php $filename = "test2.txt"; $fp = fopen($filename, "w") or die("kan inte öppna filen $filename"); fwrite($fp, "1\n"); for ($i=2;$i<10;$i++) { fputs($fp, $i."\n"); } fputs($fp, "$i"); fclose($fp); $summa=0; $fp = fopen($filename, "r") or die("kan inte öppna filen $filename"); while (!feof($fp)) { $line = fgets($fp, 1024); $summa += (int)$line; print "+ ".(int)$line." ger summa= $summa<br>"; } fclose($fp); ?> </body> </html> |
Nu är det ju så att om det är flera som ska kunna skriva i en fil, så kan det ju lätt bli så att man krockar där och är inne och kladdar samtidigt i filen. Det är ju inte så bra så därför finns det finnesser som låser filen så länge en är inne i den och skriver. När den är klar så får nästa komma in, tills det är ledigt får de snällt stå och vänta.
Med följande kod kan detta åstadkommas (mer info på internet):
<?php
$fp = fopen("lock.txt", "w+");
if (flock($fp, LOCK_EX)) { // do an exclusive lock
fwrite($fp, "Write something here\n");
flock($fp, LOCK_UN); // release the lock
} else {
echo "Couldn't lock the file !";
}
fclose($fp);
?>
Filhantering uppladdning av fil, borttagning av fil och skapande av fil
Först så visar jag ett exempel för uppladdning av filer, där
det dessutom går att plocka bort filerna. För att kunna ha någorlunda
koll så skapar vi här en separat mapp som filerna ska hamna i. Detta
för att den mapp vi skapa måste ha läs, skriv och kör rättigheter.
Det krävs här att man har tillåtelse att sätta om rättigheterna
på sitt konto på servern. Det har vi lyckligtvis på labbservern
och vi gör det enkelt med FileZilla, högerklicka på mappen och
välj "File Attributes", ställ om "group" och "public"
rättigheterna så att read, write och execute är tillåtet
(dvs mappen får ett värde på 777).
Jag har valt att ha ett lösenordsskydd på denna tillämpning
så den inte ligger öppen för hela internet att tanka upp skräp
och fylla mitt konto.
kör: filemanager.php
(för att kunna köra följande exempel behöver du ett lösenord
som du får av din lärare, lösenordet borttaget i koden)
koden:
<html> <?php
|
Ok, vi ska väl se hur man kan skapa en fil från scratch också.
Det gör vi med touch( ); . Observera att filen skapa nu i en mapp
med fullständiga rättigheter, därav behöver vi inte ställa
in något speciellt på filen. Men skulle det behövas så
finns funktionen chmod( ); .
T ex:
// sätt skrivrättigheter
för övriga, annars kan vi inte skriva i den
chmod("/somedir/somefile", 0666); //värdet skriv oktalt (säkrast)
kör t ex: file_create_write.php
koden:
| <html> <head> <title>file create write</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> </head> <body> <?php echo "<form action=\"".$_SERVER['PHP_SELF']."\" method=\"post\">"; echo 'Filnamn (med .htm eller .txt): <input type="text" name="fil" size="10"><br>'; echo 'Lite text att skriva i filen: <input type="text" name="text" size="20"><br>'; echo '<input type="submit" value="Skapa fil"><br />'; echo "</form>"; if (isset($_POST[fil])) { //skapa filen touch("filer/$_POST[fil]"); print "<br><hr>Skriver till $_POST[fil]<br>"; $fp = fopen("filer/$_POST[fil]", "w") or die("kan inte öppna filen $_POST[fil]"); fwrite($fp, "$_POST[text]\n"); fclose($fp); print "<br>Nu ser innehållet på filen, $_POST[fil], ut så här:<br>"; $fp = fopen("filer/$_POST[fil]", "r") or die("kan inte öppna filen $_POST[fil]"); while (!feof($fp)) { $line = fgets($fp, 1024); print "$line<br>"; } fclose($fp); } ?> </body> </html> |
Mer info hittar du på internet.
Lycka till!