gelöschter Benutzer

Sitemap mit PHP erstellen aus Datenbank

am 20.03.2010, 16:35 Uhr eröffnete folgenden Thread
PHP & MySQL    4588 mal gelesen    11 Antwort(en).

Hallo

Was muss ich alles beachten wenn ich aus einer Datenbank eine Sitemap automatisch erstellen möchte?

Gzip Komprimierung und Header der die Datei als application/xml ausweist sende ich schon mit!

xml als Endung funktioniert bei mir nicht ! Gibt es noch andere Möglichkeiten als eine php Endung?

Gibt es sonst noch was zu beachten?

Jetzt kümmere ich mich erst mal noch darum das ich Lastmod in der Sitemap noch angebe!

Gruß
Jörg



gelöschter Benutzer
am 20.03.2010, 16:57 Uhr schrieb

joerg schrieb:

xml als Endung funktioniert bei mir nicht ! Gibt es noch andere Möglichkeiten als eine php Endung?


Warum sollte .xml nicht funktionieren?
Entweder jagst du deine .xml-Datei mit dem PHP-Code drin durch den PHP-Interpreter, oder zu machst ein URL-Rewriting. Beides ist über .htaccess zu lösen.
In beiden Fällen kannst du die "xml" als Endung haben.

XML-Datei mit PHP parsen:
[html]<FilesMatch "^sitemap.xml$">
SetHandler application/x-httpd-php
</FilesMatch>[/html]
Einfach deine .php-Datei in sitemap.xml umbenennen.

URL-Rewriting:
[html]RewriteEngine on
RewriteRule ^(.*)sitemap.xml$ $1sitemap.php[/html]



gelöschter Benutzer
am 20.03.2010, 17:12 Uhr schrieb

Hallo Florian

Danke für die Information!

Das bedeutet dann wohl bei mehreren Dateien das ich jede in der htaccess namentlich angeben muss!

Kann es sein das die geschicktere Möglichkeit ist die xml Datei mit PHP zu parsen?
Was passiert eigentlich wenn ich eine xml Datei mit PHP parse die normal erstellt wurde?

Gruß
Jörg



gelöschter Benutzer
am 20.03.2010, 17:33 Uhr schrieb

joerg schrieb:

Kann es sein das die geschicktere Möglichkeit ist die xml Datei mit PHP zu parsen?


Ich mache es so, aber ob es die geschicktere ist, kann ich nicht sagen.

joerg schrieb:

Was passiert eigentlich wenn ich eine xml Datei mit PHP parse die normal erstellt wurde?


Falls du die shorttags aktiviert hast, bekommst du \'nen Parse Error wegen dem <?xml .. ?>



gelöschter Benutzer
am 20.03.2010, 17:38 Uhr schrieb

Raptor schrieb:

Falls du die shorttags aktiviert hast, bekommst du \'nen Parse Error wegen dem <?xml .. ?>


Deshalb sollte man das auch lassen (die shorttags zu aktivieren und zu schreiben).

Gérard



gelöschter Benutzer
am 20.03.2010, 18:06 Uhr schrieb

Hallo

Der Weg der bei mir nun funktioniert sieht so aus!

[html]
<Files sitemap.xml>
SetHandler x-httpd-php5
</Files>
[/html]

Gruß
Jörg



gelöschter Benutzer
am 20.03.2010, 18:18 Uhr schrieb

Der Vollständigkeit halber: Eine Alternative gibt es noch, man ruft für alle nicht existierenden Dateien eine PHP-Datei auf und übergibt den Namen der Datei als QueryString an die PHP-Datei.
In der PHP-Datei kann man dann anhand des QueryStrings entscheiden, ob man eine Fehlerseite zurückgibt oder z.B. eine XML-Datei erzeugt. Die dazugehörige htaccess sieht so aus:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]


Das ganze macht aber IMHO erst dann Sinn, wenn man mehr als nur ein paar XML-Dateien dynamisch erzeugen will.



gelöschter Benutzer
am 21.03.2010, 01:35 Uhr schrieb

Hallo

So als kleine Bemerkung zum Abschluß. Ich habe jetzt mehrer Abfragen aus der Datenbank gemacht und die als php Dateien abgespeichert!

Dann habe ich daraus einen Sitemap Index erstellt und den in den GWT angemeldet.

Von den 27 einzelnen Sitemaps sind keine Stunde später 9 mit der Anzhal der indexierten Seiten angegeben!

3 von den Sitemaps haben mehr als 100 Einträge davon ist eine mit mehr als 600 auch überprüft worden!.

Gruß
Jörg



gelöschter Benutzer
am 22.03.2010, 13:34 Uhr schrieb

Hallo Jörg

Behandle die xml Datei genau wie eine normale Textdatei oder jede andere x-beliebige Datei.

Mit PHP kannst du Dateien anlegen, öffnen, beschreiben und schließen (speichern).

In einem früheren Thema habe ich da doch jemand geholfen und eine fast fertige Lösung vorgestellt - finde das nur leider nicht mehr, da ich in "Forum->eigene Themen" nicht blättern kann - what ever

Am besten beginnst du so:

$varSitemap = \'<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="gss.xsl"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">
\';

Danach ließt du deine Datenbank aus.. und setzt am besten in einer WHILE folgendes ein..

$varSitemap .= \'<loc><url>

deine-seite.de/thema/\' . $row->id (oder Link) .\'.html

</url></loc>
\';


ganz am Ende nach der Datenbankschleife der Abschluss:

$varSitemap .= \'</urlset>\';


wichtig ist der Punkt vor dem = einer Variable

jetzt hast du eine komplette Sitemap in der Variable $varSitemap
Diese tust du nur noch in einer Datei auf dem Server speichern und nennst diese "sitemap.xml"
Am besten legst du eine an und gibst dieser CHMOD 777 und mittels PHP tust du beim Sitemap erstellen einfach nur "Updaten"
Das mache ich auch nach aller paar Themen mit einem Klick und dann ist das okay

Weiß nicht was ihr mit der HTACCESS da machen wollt, aber die Sitemap kann im Header ganz einfach angegeben werden und gut - so schwer wirds ja wohl nicht sein

Ich helfe gern auch weiter, falls das alles etwas zu schnell war und gehe gern das bis zum fertigen Ergebnis mit DEINER Datenbankabfrage durch, bis bei dir das funktioniert.
Übrigens gibts bei mir im Forum auch paar Spezialisten falls du intensiv mit PHP zu tun hast www.webchars.de

Mfg, Marcus



Edit.. meine Sitemaps (alle) haben rund 28.000 Einträge,.. die Seiten gehen erst noch online..



gelöschter Benutzer
am 22.03.2010, 14:04 Uhr schrieb

Hallo Marcus

Ich bin ja schon fertig damit! Ich habe in dem Fall mein Wiki auf Basis Mediawiki abgefragt!


$suche[1] = \'&\';
$ersetzen[1] = \'%26\';
$suche[2] = \'ä\';
$ersetzen[2] = \'%C3%A4\';
$suche[3] = \'Ü\';
$ersetzen[3] = \'%C3%9C\';
$suche[4] = \'ü\';
$ersetzen[4] = \'%C3%BC\';
$suche[5] = \'ß\';
$ersetzen[5] = \'%C3%9F\';
$suche[6] = \'ö\';
$ersetzen[6] = \'%C3%B6\';
$suche[7] = \'é\';
$ersetzen[7] = \'%C3%A9\';
$suche[8] = \'Ä\';
$ersetzen[8] = \'%C3%84\';
$abfrage = "SELECT page_title , page_touched , page_namespace FROM prefix_page WHERE page_namespace =0 ORDER by page_title ASC";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo \'<url>\';
echo \'<loc>

prskspedia.de/wiki/index.php;


$page = str_replace($suche, $ersetzen, $row->page_title);
echo $page;
echo \'</loc>\';
echo \'<lastmod>\';
echo substr($row->page_touched,0,4);
echo \'-\';
echo substr($row->page_touched,4,2);
echo \'-\';
echo substr($row->page_touched,6,2);
echo \'</lastmod>\';
echo \'<changefreq>monthly</changefreq>\';
echo \'<priority>0.5</priority>\';
echo \'</url>\';
}


Mit page_namespace =0 damit habe ich dann es auf die Artikel Seiten beschränkt!

Gruß
Jörg



gelöschter Benutzer
am 22.03.2010, 14:09 Uhr schrieb

Ah sehr schön

So geht das auch,.. ich nehme zum Umlaute decodieren html Codes, kein ASCII, aber denke das wird den Suchmaschinen sicher nicht jucken ..

Super! Und irgendwann baust du das sicher noch auf deine Menüs aus

Kannst ja mal den Post aktuell halten wieviel von wieviel Seiten dann im index sind laut WMP.. interessiert mich, denn bei mir hat es 4 Monate gedauert bis ein dreiviertel im Index waren - nun kommen bei mir noch rund 26.000 Links nochmal hinzu, mal schauen wie lang das dauert.

Mfg, Marcus




« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5272 Themen und 36104 Beiträge.
Insgesamt sind 496 Mitglieder registriert.