SPiNMedlem sedan mars 20007 896 inlägg Hur skriver man för att få in datumet? i ASP är det juh Date(), eller ännu bättre är om det finns en motsats till Now()!
Tack på förhand!
PS. Jag försöker executa ett script på mitt PWS, med <!-- #exec cgi="script.pl" --> Men det går inte, det står att jag inte har execute-behörigheter... hur ändrar jag det? jag har provat på en del sätt, men inget av dom funkade... :l
------------------
SPiN, bjowik99@it-gymnasiet.nu
[Redigerat av SPiN den 27 maj 2000]
[Redigerat av SPiN den 27 maj 2000]
RobbanMedlem sedan dec. 19992 555 inlägg
Hur skriver man för att få in datumet?
http://www.perl.com/pub/doc/manual/html/pod/perlfunc/localtime.html
Jag försöker executa ett script på mitt PWS, med <!-- #exec cgi="script.pl" --> ...
Under förutsättning att det är en felskrivning i ditt inlägg (skall vara <!--#exec cgi="script.pl" -->, d.v.s. utan mellanslag mellan <-- och #) så kan det vara så att SSI-direktivet exec är spärrat på servern. Var har du din sida? Fungerar övrig SSI (inkludering av filer)?
------------------
Robban < robban@lipogram.com >
SPiNMedlem sedan mars 20007 896 inlägg Japp, jag har kunnat inkludera filer anars på PWS... kan inte prova om <!--#exec... funkar just nu, för mitt PWS är uppfuckat... får testa i morrn. Om det är problemet :)
hur sätter man execute-rättigheter på en mapp eller fil i PWS??? om det kan bero på det...
------------------
SPiN, bjowik99@it-gymnasiet.nu
SPiNMedlem sedan mars 20007 896 inlägg Okey, nu kan jag executa scriptet, men mitt andra script som jag har på sidan funkar inte... Man ska kunna skicka inlägg till en .shtml - sida, där <!--#exec cgi="script.pl" --> ligger. Nu funkar som sagt executningen, men inte det andra scriptet som fungerade innan!??!
så här ser det ut... :
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
if ($allow_html != 1) {
$value =~ s/<([^>]|\n)*>//g;
}
$FORM{$name} = $value;
}
&ingemessage unless $FORM{'message'};
&ingesender unless $FORM{'sender'};
open(MYFILE, ">>check.shtml") | | die $!;
print MYFILE "<font face='verdana' size=1><b>$FORM{'sender'}</b><br>\n";
print MYFILE "$FORM{'message'}</font><br>\n\n";
close(MYFILE);
sub ingemessage
{
print "content-type:text/html\n";
print "<font face='verdana' size=3 color='darkblue'><b>Du har inte fyllt i något meddelande, gå tillbaka och gör det!</b></font>\n\n";
}
sub ingesender
{
print "content-type:text/html\n";
print "<font face='verdana' size=3 color='darkblue'><b>Du har inte fyllt i något namn, gå tillbaka och gör det!</b></font>\n\n";
}
det scriptet ska juh skicka info till check.shtml, där executningen ligger... (som fungerar). Men det kommer inte upp något på sidan!!
Vad är fel eg?
------------------
SPiN, bjowik99@it-gymnasiet.nu
RobbanMedlem sedan dec. 19992 555 inlägg Några felmedelanden?
------------------
Robban < robban@lipogram.com >
[Redigerat av Robban den 29 maj 2000]
SPiNMedlem sedan mars 20007 896 inlägg Japp, detta:
CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:
Sen kommer det inga fler. Men nu när jag har tagit bort räknaren funkar scriptet på PWS... men inte på internet, jag har mitt konto på VirtualAve.net om det spelar nån roll...
jag har också ändrat koden, den ser ut så här nu:
#!usr/bin/perl
#--VARiABLER
$url = "/home/aceyace/skrivin.html";
$datum = localtime(time);
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.|\n)*-->//g;
if ($allow_html != 1) {
$value =~ s/<([^>]|\n)*>//g;
}
$FORM{$name} = $value;
}
&no_comments unless $FORM{'msg'};
&no_name unless $FORM{'namn'};
open(MYFILE, ">>$url");
print MYFILE "<font class='gbSender'><b><u>$FORM{'namn'}</u></b> - <i>$datum</i></font><br>\n";
print MYFILE "<font class='gbMess'>$FORM{'msg'}</font><br> <br>\n\n";
close(MYFILE);
print "<html><head><title>Inget meddelande</title><link rel=stylesheet href='stajl.css' type='text/css'></head>\n";
print "<body><a href='guestb.html'>Läs gästbok</a>\n";
print "</body></html>";
sub no_comments {
print "Content-type: text/html\n\n";
print "<html><head><title>Inget meddelande</title></head>\n";
print "<body><h1>Du har inte fyllt i något meddelande... Gå tillbaka och fyll i.</h1>\n";
exit;
}
sub no_name {
print "Content-type: text/html\n\n";
print "<html><head><title>Inget namn</title></head>\n";
print "<body><h1>Du har inte fyllt i ditt namn... gå tillbaka och fyll i.</h1>\n";
exit;
}
------------------
SPiN, bjowik99@it-gymnasiet.nu
[Redigerat av SPiN den 29 maj 2000]
RobbanMedlem sedan dec. 19992 555 inlägg Efter att du skrivit till filen skriver du ju ut en sida till webläsaren. Men i den utskriften saknas content-type vad jag kan se?
Alltså, innan du skriver ut någonting:
print "Content-type: text/html\n\n";
------------------
Robban < robban@lipogram.com >
SPiNMedlem sedan mars 20007 896 inlägg tack så mycket :)
...de va klantigt att missa det :r
nu till en ny fråga:
Kan man välja var man vill lägga in den nya koden på en HTML-sida? Med open(FIL, ">>fil.html"); så skrivs juh det nya längst ned i fil.html... går det att välja var på sidan man vill placera det?
------------------
SPiN, bjowik99@it-gymnasiet.nu
[Redigerat av SPiN den 29 maj 2000]
RobbanMedlem sedan dec. 19992 555 inlägg Nja, det går i.o.f.s. delvis men det kan vara svårt att använda praktiskt. Du kan med funktionen seek flytta filpekaren och skriva över det som står där. Svårt (om ens möjligt) att använda praktiskt om det t.ex. gäller en gästbok.
Det vanliga är annars följande (finns några alternativ) ...
Säg att du vill stoppa in en ny rad mellan rad 2 och rad 3. Läs först in filen i en array. Sedan öppnar du filen för skrivning, och skriver tillbaka innehållet rad för rad. Dock gör du ett uppehåll efter att du skrivit dit rad 2 och skriver in den nya raden innan du fortsätter. Sedan skriver du in resten av raderna tills arrayen är tom.
Kolla gärna igenom andra gästboksscript då de flesta arbetar enligt den här principen. Om filen är väldigt stor kan scriptet sluka väldigt mycket minne om du läser in hela filen i den, så då kan man använda en temporär fil i stället. D.v.s. öppna fil 1 för läsning och fil 2 (den temporära) för skrivning. Läs in rad för rad ur fil 1 och skriv ut samma rad till fil 2 direkt. När du kommer till stället där du vill infoga en rad petar du bara in den i fil 2 innan du fortsätter att flytta över rader från fil 1. När överflyttnineg och infogningen är klar byter du namn på fil 2 så att den blir den nya fil 1.
Valde medvetet att inte presentera några färdiga lösningar här. Man lär sig mer på att ta fram den själv. ;)
------------------
Robban < robban@lipogram.com >
SPiNMedlem sedan mars 20007 896 inlägg Okey, bra att jag fick lösa det själv :)
roligare så också juh...
jag löste det så här:
...
open(FILE1, "<$TextFileUrl");
@fileOneArray = <FILE1>;
close(FILE1);
open(FILE2, ">$TextFileUrl");
print FILE2 $FORM{'name'}
print FILE2 $FORM{'mess'};
print FILE2 "@fileOneArray";
close(FILE2);
open(FILE3, "<$TextFileUrl");
@fileThreeArray = <FILE3>;
close(FILE3);
open(FILE4, ">$HTMLfil");
print FILE4 "@fileThreeArray";
close(FILE4);
...
Men jag tycker att det borde sluka minne om filerna blir stora... Finns det något lättare sätt som inte tar för mcyket minne, om det här nu är ett segt script?
[Redigerat av SPiN den 31 maj 2000]
emissionMedlem sedan dec. 19996 721 inlägg Du kan spara en temporär kopia av filen, och skriva tillbaka den, med samma uppehåll som förut. Då ligger bara en rad åt gången i minnet, men man får mer disk-jobb.
SPiNMedlem sedan mars 20007 896 inlägg Hmm förstår inte riktigt hur du menar... skulle du kunna förklara lite mer ingående?
------------------
SPiN, bjowik99@it-gymnasiet.nu
emissionMedlem sedan dec. 19996 721 inlägg För det första en liten kort analys av ditt skript.
open(FILE1, "<$TextFileUrl");
@fileOneArray = <FILE1>;
close(FILE1);
open(FILE2, ">$TextFileUrl");
print FILE2 $FORM{'name'}
print FILE2 $FORM{'mess'};
print FILE2 "@fileOneArray";
close(FILE2);
open(FILE3, "<$TextFileUrl");
@fileThreeArray = <FILE3>;
close(FILE3);
open(FILE4, ">$HTMLfil");
print FILE4 "@fileThreeArray";
close(FILE4);
Du läser in filen, sparar om den med nya värden längst upp, läser in den igen och sparar ut den till en annan fil. Du kan, med andra ord, spara ut till båda filerna, redan i steg två. Varför du vill ha två likadana filer kan jag inte förstå. :)
Nåväl, så här menade jag.
open(FILE1, "<$TextFileUrl");
open(FILE2, ">$TempFileUrl");
while($line=<FILE1> ){
print FILE2 $line;
}
close(FILE2);
close(FILE1);
open(FILE1, ">$TextFileUrl");
open(FILE2, "<$TempFileUrl");
print FILE1 $FORM{'name'}
print FILE1 $FORM{'mess'};
while($line=<FILE2> ){
print FILE1 $line;
}
unlink $TempFileUrl;
SPiNMedlem sedan mars 20007 896 inlägg Okey, nu hänger jag med hur du menade :)
Anledningen till att jag inte skrev till HTMLfil direkt var att det inte funkade... Jag provade det, men då blev koden helt fel... Det var säkert jag som gjorde nåt galet, men ja orkade inte hålla på o prova en massa nya grejjer... :l
Skiljer sej våra skript mycket från varann i tanke på hastighet att skriva t.ex. ett inlägg till en gästbok?
------------------
SPiN, bjowik99@it-gymnasiet.nu