joerg
Avatar joerg
Themenersteller
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)

Sitemap mit PHP erstellen aus Datenbank

am 20.03.2010, 16:35 Uhr eröffnete joerg 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


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

Raptor
Avatar Raptor
IT-Student
Content Gott (1013 Beiträge)
am 20.03.2010, 16:57 Uhr schrieb Raptor

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]


Meine Developer-Website mit den Web-Entwickler-Tools.
Meine Web-Entwicklungs-Dienstleistungen

[url="http://www.seitenreport.de/forum/beitraege/seitenreport_verlosungen/wichtig_neue_regel

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 20.03.2010, 17:12 Uhr schrieb joerg

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


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

Raptor
Avatar Raptor
IT-Student
Content Gott (1013 Beiträge)
am 20.03.2010, 17:33 Uhr schrieb Raptor

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 .. ?>


Meine Developer-Website mit den Web-Entwickler-Tools.
Meine Web-Entwicklungs-Dienstleistungen

[url="http://www.seitenreport.de/forum/beitraege/seitenreport_verlosungen/wichtig_neue_regel

gerard
Content Gott (1271 Beiträge)
am 20.03.2010, 17:38 Uhr schrieb gerard

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


http://bretagne-virtuell.de

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 20.03.2010, 18:06 Uhr schrieb joerg

Hallo

Der Weg der bei mir nun funktioniert sieht so aus!

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

Gruß
Jörg


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

UFOMelkor
Avatar UFOMelkor
Student
Content Meister (350 Beiträge)
am 20.03.2010, 18:18 Uhr schrieb UFOMelkor

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.


Naturkosmetik in Bochum

Steppenhahn Ultramarathon-Community

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 21.03.2010, 01:35 Uhr schrieb joerg

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


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

Speedy86
Avatar Speedy86
(Ãœberlebens-) Künstler - nein, Programmierer und Designer
Fortgeschrittener (94 Beiträge)
am 22.03.2010, 13:34 Uhr schrieb Speedy86

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..


http://webmaster-glossar.de

joerg
Avatar joerg
Fachinformatiker Anwendungsentwicklung
Content Gott (1941 Beiträge)
am 22.03.2010, 14:04 Uhr schrieb joerg

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


Zufällige Umleitung zu der Startseite einer meiner Domains
Meine ungewöhnlichen Tools

Speedy86
Avatar Speedy86
(Ãœberlebens-) Künstler - nein, Programmierer und Designer
Fortgeschrittener (94 Beiträge)
am 22.03.2010, 14:09 Uhr schrieb Speedy86

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


http://webmaster-glossar.de



« zurück zu: PHP & MySQL

Das Seitenreport Forum hat aktuell 5274 Themen und 36108 Beiträge.
Insgesamt sind 48346 Mitglieder registriert.