Till Startsidan
JavaScript.nu / Perl-kurs / Spara och hämta filer

LÄR DIG ATT PROGRAMMERA PERL
Spara och hämta filer

En viktig funktion i Perl är funktionen att hämta och lagra information. Låt oss säga att du gör en gästbok, då måste ditt script ha möjlighet att spara inläggen någonstans på servern så att även nästa besökare ska kunna läsa informationen.
I Perl så hämtar och lagrar man data till filer med samma funktion - open:
open(ett_namn,"filen.txt");        # Läsa filen
open(ett_namn,">filen.txt");       # Skriva över filen med ny data
open(ett_namn,">>filen.txt");      # Lägga till ny data
Om du vill att en subrutin ska anropas om filen inte kunde läsas av scriptet eller om man inte kunde skriva till filen så går även detta. Detta script visar hur:
$filnamnet="filen.txt";		# Om vi använder en variabel så behöver vi inte
				# skriva om filen.txt varje gång det ska användas
				# i scriptet. Dessutom, om vi senare vill byta filen.txt mot en
				# annan fil så ändrar vi endast här, inte på alla ställen i scriptet

sub fel
{
print "Content-type:text/html\n\n";
print "$filnamnet kunde inte öppnas";
}

open(ett_namn,"$filnamnet") || &fel;   #Om något går på tok anropas subrutinen fel
Vi ska nu göra ett script som hämtar en fil från servern och skickar den till besökaren.
#!/usr/bin/perl

print "Content-type:text/html\n\n";
$filen="en_fil.txt";			# Denna fil ska hämtas
open (htmlfil,"$filen") || &fel;	# Öppnar filen för läsning, om detta misslyckas anropas subrutinen fel
@alla_rader=<htmlfil>;			# @alla_rader skapas. Värdena är var rad i filen en_fil.txt
foreach $rad (@alla_rader)		# Går igenom alla värden i @alla_rader
{
	print $rad;			# Skriver ut en_fil.txt, rad för rad
}
close(htmlfil);				# Stänger filen en_fil.txt

sub fel
{
print "Tyvärr kunde inte <A HREF=\"$filen\">$filen</A> hämtas.";
}
Nu ska vi göra ett än mer avancerat script, nämligen ett script som skapar en fil med en viss information och som sedan skickar iväg besökaren till sidan.
#!/usr/bin/perl
$filen="hemsida.html";						# Filen namn, om man vill ändra ändrar man bara här
open (minfil,">$filen") || &skapades_inte;			# Öppnar filen (i vårt fall skapas filen) och skriver över data
print minfil "<HTML><HEAD><TITLE>$filen</TITLE></HEAD>";	# Information skrivs till filen på detta sätt
print minfil <<STOP;						# Eller på detta sätt... Allt fram till STOP lagras, även radbytena

<BODY>

<H1>$filen skapades av ett Perl-script</H1>
<P>

Hejsan hoppsan....
</BODY>
</HTML>

STOP
#Ovan finns "STOP". Om denna kommentar skrivs på raden ovan får vi fel.
close(minfil);							# Filen stängs

print "Location: $filen\n\n";					# Skickar iväg besökaren till $filen (i vårt fall hemsida.html)

sub skapades_inte						# Om filen inte skapas körs denna subrutin
{
print "Content-type:text/html\n\n";
print "Det gick inte att skapa $filen.";
}
Nu har du lärt dig såväl att ta emot data från formulär som lagra denna i filer. Du kan nu alltså skapa alla former av gästböcker, anslagstavlor, röstningsscript etc. Användaren fyller i data i några fält som skickas till ett script som lagrar denna i en fil. Ett annat script kan sedan läsa av den fil som man sparat data till och visa denna för besökaren. Även om du nu tycker det fortfarande är svårt så beror det på att du precis har lärt dig detta, testa med att göra några script själv och du kommer att se att det är mycket lätt att skapa, spara och hämta filer.

Nu när du läst detta kapitel kanske du undrar vad som menas med att scriptet inte lyckas hämta eller spara en fil. Exempel på fel kan vara att scriptet försöker läsa en fil som inte finns eller att scriptet försöker skriva till en fil den inte har rättighet att skriva till.
Att förstå sig på detta med rättigheter kan till en början vara svårt, fast efter ett tag kommer man att lära sig även detta.
De filer som ska få rättighet att skriva till servern måste få tillstånd att göra det. Detta tillstånd kan du ge en fil då du CHMOD:ar den. Bilden nedan visar hur detta görs i WS_FTP95.
CHMOD-ändring i WS_FTP95
Ytterligare ett sätt att CHMOD:a en fil är att göra som bilden nedan visar. I fältet skriver du då chmod XXX filnamn.pl, där XXX är den rättighetskod du vill ge filen (t.ex: 777).
CHMOD-ändring i WS_FTP95
Hur fungerar denna rättighetskod? Jo, den består av tre siffror, den första för Owner, den andra för Group och den sista för Other. Du kan ge varje grupp olika rättigheter: läs-, skriv- och exekveringsrättigheter. Nedan ser du vad varje siffra ger för rättighet:

  1. Exekvera
  2. Skriva
  3. Skriva & exekvera (1+2)
  4. Läsa
  5. Läsa & exekvera (4+1)
  6. Läsa & skriva (4+2)
  7. Läsa, skriva & exekvera (4+2+1)
Du undrar nu säkert vad Owner, Group och Other är. Owner, även kallat User, är du själv när du laddar upp dina script. Group är de som är med i samma grupp som dig. De som har möjlighet att FTP:a sig in i servern räknas som Group. De som besöker din hemsida som vanligt med sin webbläsare är Other, även kallat World.

Kom dock ihåg, vissa servrar ger automatiskt en viss lämplig rättighet åt filerna på servern, andra tillåter dig inte ens att sätta rättigheterna på vissa sätt. På många servrar har filerna från början rätt att såväl läsa och skriva till filerna, därför bör du innan du försöker att CHMOD:a filerna testa och se om filerna från början är rätt inställda eller inte (t.ex. genom ett script som skriver något till en fil och sedan läser av det. Om det gick så är allt OK, annars behöver du CHMOD:a scriptet).
Om du måste CHMOD:a scriptet kanske du till en början vill ge scriptet både läs och skrivrättigheter, då kan det få 666. Om du senare vill specificera exaktare vad det ska få göra så kan du göra det genom att ge filen en annan rättighet.


[Perl guiden] - [Till kapitel 8]






Copyright © Omid Rouhani 1997-2022; Alla rättigheter reserverade.
Guider: [ HTML guide ] - [ JavaScript guide ] - [ DHTML guide ] - [ Perl guide ] - [ Sitemap ]