Jag har hämtat ner en enkelt php-gästbok från http://internetworld.idg.se/tjanster/webbskolan/ för att försöka lära mig lite php. Båda problemen verkar hänga ihop. Det första tyder på att filens storlek inte kan kollas. Ok, låter rimligt att problemen hänger ihop. Åh... Nu gick det upp ett ljus vad gäller felmeddelandet om length... Till funktionen fread() skickas i skriptet längden av filen guestbook.txt. Men den filen är ju tom så därför blir längden noll. Detta gör att fread() skriver ut felmeddelandet eftersom den kräver att längdparametern är större än noll. Åhh, du är en befriare! Nu kan jag lägga allt strul som jag haft med det här bakom mig :) Din extract-rad var hela skillnaden, lite förändring men ack så viktig. Tack så mycket!Problem med min php-gästbok
Jag får den dock inte att fungera. Jag har två problem.
1. Jag får ett felmeddelande som ser ut såhär: Warning: fread(): Length parameter must be greater than 0. in /home/atlantis/svph00/svph0005/public_html/guestbook.php on line 41
Jag har prövat med att skriva in något på första raden i guestbook.txt varpå den här raden försvinner, men det ska väl inte behövas?
2) Det riktiga problemet är dock att php-filen inte kan skriva till min textfil. Jag har satt rättigheterna till 755 och även 777 för att vara riktigt säker. Men min textfil förblir tom och det kommer inte upp någonting på hemsidan. Eftersom jag använder min hemsida som jag fått från Universitetet blev jag lite misstänksam på om dom stödde php. Så jag kollade upp detta men dom stödjer php.
Systemadm skriver dock följande: Pga säkerhetsproblem kan systemkommandon typ system(), exec() m fl endast använda kommandon som finns i biblioteket /opt/phpsec (för närvarande tomt). Observera även att PHP struntar i den path man anger till systemkommandona. Den tittar enbart på programmets namn och söker det i /opt/phpsec.
Kan ni se om min php innehåller något systemkommando eftersom jag har dålig koll på detta själv?
Är exempelvis print() ett systemkommando? I sådana fall kan det kanske förklara saken. Vad tror ni? Ligger det något fel i koden månne?
<HTML>
<HEAD>
<TITLE>Skriv i min fina gästbok</TITLE>
</HEAD>
<BODY BGCOLOR="#FFFFCC">
<H1>Välkommen till min gästbok</H1>
<HR>
<!-- Allt här ovan kan du lätt redigera så att det passar din
hemsida - nu börjar php-koden -->
<?php
$filename = "guestbook.txt";
// se till att filnamnet här ovan stämmer med den textfil du gjort
if ($name) {
$message = str_replace("<", "<", $message);
$message = str_replace(">", ">", $message);
$message = str_replace("\n", "<br>\n", $message);
// Se till att http:// finns i url:en.
if (!(substr($url, 0, 7) == "http://"))
$url = "http://" . $url;
// Öppna filen i "append"-läge
if ($fd = (fopen($filename, "a"))) {
// Skriv i filen
fwrite($fd, "Från: <b>$name</b><br>\n");
fwrite($fd, "E-post: $email<br>\n");
fwrite($fd, "URL: $url<p>\n");
fwrite($fd, $message);
fwrite($fd, "\n<hr>\n");
fclose($fd);
} else {
print("<B>ERROR: cannot open $filename for writing\n");
}
}
// Öppna filen i "read"-läge
if ($fd = (fopen($filename, "r"))) {
$contents = fread ($fd, filesize ($filename));
fclose ($fd);
// Skriv ut filen i html-dokumentet
print($contents);
} else {
print("<B>ERROR: cannot open $filename for reading\n");
}
// se till att filnamnet nedan är korrekt.
?>
<FORM ACTION="guestbook.php" METHOD="POST">
<TABLE>
<TR>
<TD>Namn: </TD>
<TD>
<INPUT type=text size=50 name=name>
</TD>
</TR>
<TR>
<TD>E-post: </TD>
<TD>
<INPUT type=text size=50 name=email>
</TD>
</TR>
<TR>
<TD>URL: </TD>
<TD>
<INPUT type=text size=50 name=url>
</TD>
</TR>
</TABLE>
<TEXTAREA NAME="message" ROWS="15" COLS="80" STYLE="width:100%">
</TEXTAREA>
<P>
<INPUT type=submit VALUE="Lägg till!">
</FORM>
</BODY>
</HTML>Sv: Problem med min php-gästbok
Ligger guestbook.txt i samma katalog som du har skriptet?
Pröva även att lägga in följande kod i ditt skript:
<?php echo getcwd(); ?>
Vad skrivs ut?
För övrigt rekommenderas PHPportalen för PHP-relaterade problem.Sv:Problem med min php-gästbok
Ja, filerna ligger i samma katalog. Jag prövade lägga in din kod och då skrev den ut en textrad med min serverplats, på hemsidansidan, dvs:
/home/atlantis/svph00/svph0005/public_html
Några förslag för att gå vidare?Sv: Problem med min php-gästbok
Du borde kunna slippa felmeddelandet genom att ändra till$contents = @fread ($fd, filesize ($filename));
Då har vi den andra frågan kvar...
Och nu tror jag att jag kom på problemet på den också... Skriptet är skrivet med utgångspunkt att register_globals är aktiverat, men på skolan är det inte aktiverat (vilket iofs är bra). Enklast att få igång skriptet borde då vara att i början av skriptet lägga till<?php
extract($_POST);
?>
Sv:Problem med min php-gästbok