Fråga
Jag har satt ihop ett PHP script som hämtar senaste blogginlägg ifrån en databas och skriver in dem i en xml fil för prenumeration. Saken är dock den att jag inte vet hur jag ska göra för att filen ska lagra fler än ett (det senaste) blogginlägget. Jag vill alltså ha ett script som hämtar ett inlägg och lägger in den i xml filen utan att ta bort allt som finns och lägger in det igen.
Hur gör jag något sådant? Hoppas du förstår hur jag menar.
PHP scriptet ser du nedan.
<?php
$opendb = mysql_connect(”localhost”, ”namn”, ”làsen”)
or die(”Kunde inte ansluta till MySQL:<br />” . mysql_error());
echo ”Ansluten till MySQL<br />”;
mysql_select_db(”databas”)
or die(”Kunde inte ansluta till databasen:<br />” . mysql_error());
echo ”Ansluten till databasen”;
$getentries = mysql_query(”SELECT * FROM blogentries ORDER BY date DESC”);
$entry_id = mysql_result($getentries, $i, ”id”);
$entry_date = mysql_result($getentries, $i, ”date”);
$entry_title = mysql_result($getentries, $i, ”title”);
$entry_content = mysql_result($getentries, $i, ”content”);
$fp = fopen (”../rss.xml”, ”w”);
fwrite ($fp, ”<?xml version=’1.0′ encoding=’UTF-8′ ?><rss version=’2.0′ ><channel>”);
fwrite ($fp, ”<title>HOLMEN-BLOGG RSS-FEED</title>”);
fwrite ($fp, ”<link>http://www.holmen-blogg.com/</link>”);
fwrite ($fp, ”<description>HOLMEN Blogg som RSS feed.</description>”);
fwrite ($fp, ”<language>sv-se</language>”);
fwrite ($fp, ”<pubDate>Wed, 02 Oct 2002 08:00:00 EST</pubDate>”);
fwrite ($fp, ”<docs>http://www.holmen-blogg.com/rss.xml</docs>”);
fwrite ($fp, ”<item>”);
fwrite ($fp, ”<title>$entry_title</title>”);
fwrite ($fp, ”<description>$entry_content</description>”);
fwrite ($fp,
”<link>http://www.holmen-blogg.com/?action=blogg§ion=entry&id=$entry_id</link>”);
fwrite ($fp,
”<guid>http://www.holmen-blogg.com/?action=blogg§ion=entry&id=$entry_id</guid>”);
fwrite ($fp, ”</item>”);
fwrite ($fp, ”</channel></rss>”);
fclose ($fp);
mysql_close($opendb);
echo ’RSSen ‰r uppdaterad!’
?>
Svar
Hej Daniel, vi tolkar det som om ditt script skall generera ett enda stort XML-dokument innehållande alla inlägg. Vi skulle då vilja rekommendera dig att iterera över alla resultat som kommer ut via din sql-sats, din egen kod använder sig enbart av första svaret.
(Vårt förslag innebär även snabbare access från databasen, då databaser kan optimera sin sökning om den vet vad som behövs. Utöver det kommer nu databasen undvika oanvänd temporär data. Vilket möjliggörs genom att ”id,date,title,content” används istället för en asterix i SQL-satsen.)
Andra saker att tänka på är,
Dina antal inlägg kommer växa, använd gärna LIMIT 20 i din SQL-sats för att minska antal svar.
Uppdatera gärna <pubDate> med datum från senaste inlägg.
Om du hellre vill fylla på en existerande fil så skall du öppna filen så här istället, $fp = fopen (”../rss.xml”, ”a”);
Nedan följer vårt kodförslag,