Avatar billede funkylezzz Praktikant
24. januar 2011 - 12:13 Der er 15 kommentarer og
1 løsning

Kan man skrive til sitemap.xml fra php?

Hej jeg har et en side hvor brugeren kan oprette en phpfil.
Min ide er at når brugeren opretter en fil så opdatere mit sitemap af sig selv.
Hvordan vil sådan en kode se ud.
Avatar billede oomalkeoo Nybegynder
24. januar 2011 - 12:17 #1
Det kommer lidt an på hvordan du ønsker det, det er jo op til dig at vælge. Hvordan ser din sitemap.xml ud?
Avatar billede repox Seniormester
24. januar 2011 - 12:30 #2
Du kan jo også lade PHP lave dit sitemap i stedet for? (jeg antager det er til google)
Avatar billede oomalkeoo Nybegynder
24. januar 2011 - 12:34 #3
repox: netop det jeg tænkte på :)
Avatar billede BufferUnderrun Nybegynder
24. januar 2011 - 12:48 #4
Da dit sitemap er XML, kan du nemt opdatere det fra PHP ved brug af DOMDocument.

Med dette komponent kan du indlæse dit sitemap.xml, tilføje en node (den nye URL til PHP-filen), og gemme det igen med .saveXML().

Her er manualen og et par eksempler: http://www.php.net/manual/en/domdocument.savexml.php
Avatar billede repox Seniormester
24. januar 2011 - 12:48 #5
#3
Jeg bruger XMLWriter til sådan noget - http://php.net/xmlwriter

Du kan nemt lave et sitemap genereret af PHP f.eks. således, så:
<?php

    header("Content-Type: text/xml; charset=UTF-8");

  // sitemap generering med PHP
 
 
    $xml = new XmlWriter();
    $xml->openMemory();
    $xml->startDocument("1.0", "UTF-8");
   
    $xml->startElement("urlset");
    $xml->writeAttribute("xmlns", "http://www.sitemaps.org/schemas/sitemap/0.9");
   
        //din løkke her
        $xml->startElement("url");
            $xml->writeElement("loc", "http://example.org");
        $xml->endElement(); //url
       
    $xml->endElement(); //urlset       

    echo $xml->outputMemory(true);

?>
Avatar billede repox Seniormester
24. januar 2011 - 12:51 #6
#4
Det var da et værre molbo-arbejde - når PHP i er fin stand til at generere PHP'en selv, hvorfor så ikke lade PHP præsentere det også?
Avatar billede BufferUnderrun Nybegynder
24. januar 2011 - 12:59 #7
#6
Det er vel en smagssag. Hvis den skal genereres af PHP ved hver eneste request, skal du enten gemme sitemap i en DB eller scanne filstrukturen hver gang. Dette stiller yderligere overvejelser ang. caching, da disse operationer er "dyre" så snart man har et større sitemap.
Avatar billede repox Seniormester
24. januar 2011 - 13:06 #8
#6
Jeg har nu ingen problemer med den eksisterende grænse på et sitemap målt med den ydeevne min MySQL database kan præstere i en optimeret forespørgsel.

Hvis jeg skal scanne hele min filstruktur igennem, så har du naturligvis en pointe.
Avatar billede funkylezzz Praktikant
24. januar 2011 - 13:37 #9
Hmm jeg er total skod til det her.
Hvor i dette script skal jeg indsætte det kodeværk.
Der må gerne følge forklaring med.



<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Test</title>
</head>

<body>
<?
$opret=$_GET['opret'];
$filnavn=$_GET['navn'];

$filnavn.='.php';
$indhold ='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>den nye side som brugeren opretter</title>
</head>
<body>
Tekst på den nye side som brugeren opretter
</body>
</html>';

if ($opret) {
    if (!file_exists($filnavn)) {
        $fil = fopen($filnavn, "x");
        fputs($fil, $indhold); 
    {
        $filnavn=$_GET['navn'];echo "$filnavn er nu oprettet i vores system";
       
    }
    } else {
        $filnavn=$_GET['navn'];echo "$filnavn findes allerede i vores system";
       
    }
}

?>

<form action="<?=$PHP_SELF;?>" method="GET">
<input type="text" name="navn" style="width: 256px" value="*****">
<br>
<input type="submit" name="opret" value="Opret">
</form>


</body>

</html>
Avatar billede funkylezzz Praktikant
24. januar 2011 - 13:38 #10
Ja det er til google
Avatar billede funkylezzz Praktikant
24. januar 2011 - 13:59 #11
jeg vil gerne tilføje disse ting til sitemap.txt

<url>
        <loc></loc>
        <lastmod></lastmod>
        <changefreq></changefreq>
        <priority></priority>
    </url>
    </urlset>
Avatar billede funkylezzz Praktikant
24. januar 2011 - 14:07 #12
fejl.
ikke sitemap.txt men sitemap.xml
Avatar billede repox Seniormester
24. januar 2011 - 19:17 #13
Det er jo nogle lidt anderledes præmisser der er på bordet i den forbindelse - umiddelbart lyder det til du vil opdatere dit sitemap når en PHP fil bliver oprettet? Så kan jeg bedre anbefale dig at bruge SimpleXML.

Din sitemap.xml fil skal naturligvis være skrivbar og skal som minimum indeholde dataene:
<?xml version="1.0" encoding="UTF-8"?>
<urlset />

Så kan du tilføje URL'er således:

    $data = file_get_contents("sitemap.xml");
   
    $xml = new SimpleXMLElement($data);
   
    $url = $xml->addChild("url");
    $url->addChild("loc", "http://example.org/2");
   
    file_put_contents("sitemap.xml", $xml->asXML());
Avatar billede funkylezzz Praktikant
24. januar 2011 - 22:56 #14
Hehe nu virker det.
Der manglede et par gåseøjne mellem de sidste 2 parenteser:
$url->addChild("loc", "http://example.org/ (...)");
Men jeg siger nu tak til alle alligevel.
Repox point til dig.
Avatar billede repox Seniormester
25. januar 2011 - 01:53 #15
Jeg ved virkelig ikke hvad der sker for det der med (...) i URL'er man skriver? Det er noget nyt fra eksperten.dk's side og det åd mine gåseøjne.. Men jeg er glad for du fik det til at virke.
Avatar billede funkylezzz Praktikant
25. januar 2011 - 07:16 #16
da jeg er total ringe til php er det en god lektie med sådan en fejl.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester