ERLEDIGT
NEIN
NEIN
ANTWORTEN
13
13
ZUGRIFFE
471
471
EMPFEHLEN
-
Hallo liebe Community,
ich habe auf meiner Webseite ein eigenes Script geschrieben zum News verwalten. Dieses habe ich erweitert, um einen RSS Feed zu erzeugen. Mir wird allerdings beim Aufrufen der XML Datei mitgeteilt, dass diese fehlerhaft wäre. Mach ich bei der Erzeugung etwas falsch****?
Hier mein Code:
PHP-Code:<?php
if (isset($_SESSION["user_premium"]) AND $_SESSION["user_premium"] > 0)
{
unlink("rss/rss.xml");
$fp = fopen("rss/rss.xml","w+");
fwrite($fp,"<?xml version=\"1.0\" encoding=\"iso-8859-1\" ?>\n");
$verbindung = mysql_connect($server, $user, $passwort) or die ("Es konnte keine Verbindung zum Server hergestellt werden!");
mysql_select_db($datenbank) or die ("Diese Datenbank existiert nicht!");
fputs($fp,"<rss version=\"2.0\">\n");
fputs($fp," <channel>\n");
fputs($fp," <title>RSS-Feed</title>\n");
fputs($fp," <link>URL</link>\n");
fputs($fp," <discription>Mybetstats News Feed</discription>\n");
fputs($fp," <language>de-DE</language>\n");
$datensatz = mysql_query("SELECT datum FROM news ORDER BY id DESC LIMIT 0,1");
$row = mysql_fetch_assoc($datensatz);
$pubDate = date("D, d M Y H:i:s T", $row['datum']);
fputs($fp," <lastBuildDate>$pubDate</lastBuildDate>\n");
$daten_news = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 0,200");
while ($row = mysql_fetch_assoc($daten_news))
{
$schrift3 = mysql_real_escape_string($row['schrift']);
$autor3 = mysql_real_escape_string($row['autor']);
$id3 = $row['id'];
$text3 = mysql_real_escape_string($row['text']);
fputs($fp," <item>\n");
fputs($fp," <title>$schrift3</title>\n");
fputs($fp," <author>$autor3</author>\n");
fputs($fp," <pubDate>$pubDate3</pubDate>\n");
fputs($fp," <link>http://www.seite.php?id=$id3</link>\n");
fputs($fp," <discription>$text3</discription>\n");
fputs($fp," </item>\n");
}
fputs($fp," </channel>\n");
fputs($fp,"</rss>\n");
fclose($fp);
mysql_close($verbindung);
echo "<p class='success'>RSS Datei erfolgreich aktualisiert!</p>";
}
else
{
echo "Du bist nicht berechtigt dazu oder nicht eingeloggt!";
}
?>
-
28.11.11 16:49 #2
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Schon den Quelltext des XML im Browser anzeigen lassen? Welchen Browser verwendest du zum testen?
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Du kannst es dir ja gerne selbst ansehen: www.mybetstats.de/rss/rss.xml
Ich hab mir die XML runtergeladen und angesehen. Er gibt scheinbar einiges an Sachen richtig aus. Aber irgendwo mag er nicht mehr. Er sagt mir dann, dass er irgendwo Anführungszeichen erwartet hätte, die er aber nicht gefunden hat.
Aus dem Grund hatte ich versucht es mit mysql_escape_string umzuwandeln. Scheint nicht geklappt zu haben?
Im Prinzip habe ich es nur gemacht weil ich den Feed wo anmelden wollte und ich dort die Nachricht bekam, dass es keinen Link zu einem Feed gebe. Dann habe ich es hier aufgerufen und die Fehlermeldung gesehen. (Hab hier allerdings gerade nur nen IE6)
Den im Header habe ich nichts anders als bei meinen anderen Seiten gemacht, die aber funktioniert haben. Dort läuft es allerdings über Wordpress muss ich sagen.Geändert von filament (28.11.11 um 17:03 Uhr) Grund: Was vergessen
-
28.11.11 17:36 #4
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Also bei mir im FF 8.0 siehts prima aus:
Wird als RSS Feed angeboten. Funktioniert 1a! Browserwechsel schon in Betracht gezogen? IE 6.0 is ja nicht grad.... nicht ja?Mybetstats RSS-Feed
Mehr News in Zukunft
Wieder zurück..
Top-Wette des Wochenende, Dynamo Dresden gegen Hansa Rostock
Was ist mybetstats? Wetten analysieren einfach gemacht!
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Naja war auf Arbeit. Hab zu hause mehrere Browser. Aber trotzdem sagt mir der Dienst es gibt keinen feed. Also scheint ja irgendwas nicht zu stimmen oder nicht? Schliesslich erkennt der dienst zwei andere feeds von mir auch? Oder könnte das daran liegen das in Wordpress der Ordner direkt feed heisst?
-
28.11.11 18:28 #6
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Ich hab das grad mal durch den XML-Validator von w3.org geschickt und bin auf den Fehler gestoßen:
<a href=\'http://www.sportwettenvergleich.net/\' target=\'_blank\'>Sportwettenanbieter im Vergleich</a>
Versuch doch mal
- nicht zu maskieren (\ vor dem ' weglassen)
- statt dem Single- (') ein Double-Quote (") zu verwendenGrüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
So nun bin ich zu Hause am Rechner und kann folgendes sagen. Mein Firefox zeigt mir den Feed auch korrekt an. Mein IE9 aber sagt genau das gleiche wie mein IE6 auf Arbeit.
Also ich hab mir das jetzt mal genau angeguckt und einige Änderungen auch in den Texten innerhalb der Datenbank vorgenommen. Hat aber nichts gebracht. Nun habe ich mir die Fehlermeldung mal genau angesehen. Er schreibt mir, dass das Start-Tag nicht mit dem End-Tag zusammen passt. Er scheint hier wohl die HTML Elemente durcheinander zu bringen denn laut Datei kommt <p>Text</p></discription>
-
28.11.11 20:02 #8
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Richtig, ich hab es sowohl mit w3 als auch validome versucht:
Ein großes Problem sehe ich darin, dass das XML nicht formatiert ist, das könntest du so umgehen:Fehler (2)ZeileDateiname:http://www.mybetstats.de/rss/rss.xml2Spalte:21 Fehler
ie Deklaration des Elementes 'rss' kann nicht gefunden werden. Fehlerstelle:<rss version='2.0'>
ZeileDateiname:http://www.mybetstats.de/rss/rss.xml182Spalte:1776 Fehler:Elemententyp "p" muss mit dem passenden Endtag "</p>" geschlossen werden. Fehlerstelle:...heiden, um Ihre Wetten noch genauer analysieren zu können!</discription>
- Lade den kompletten XML-Output in simplexml_load_string()
- Du bekommst ein SimpleXMLElement zurück (vermutlich knallt es dort schon, was aber nicht schlecht wäre)
- Das SimpleXMLElement bietet eine Methode asXml() an, was dir dann das XML schön formatiert zurück geben sollte.
Wahlweise kannst du natürlich auch alles über DOM machen (ist meine persönliche Empfehlung).Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Okay, hab mir die Links mal angeschaut und parallel dazu meine xml so validiert, dass es zumindest erstmal angezeigt wird. Es funktioniert auch bei dem Anbieter und wird jetzt erkannt. Dazu habe ich den Text einfach als String genommen und erstmal die <p> und </p> durch "" ersetzt. Damit treten dann scheinbar keine Probleme mehr auf. Dazu habe ich festgestellt, dass es natürlich description heißen muss und nicht discription. Allerdings ist das noch nicht die schönste Lösung für das Problem.
DOM hört sich für mich an, als wenn ich mich in eine neue Sprache reinfuchsen muss. Das will ich eigentlich vermeiden, dass wäre dann doch zuviel aufwand.
Wenn ich dich richtig verstanden habe, dann nehme ich nun meinen kompletten Inhalt aus der Datenbank mit den XML Befehlen und stecke Sie in einen String.
Nun nehm ich den String und lade ihn mit simplexml_load:PHP-Code:unlink("rss/rss.xml");
$string = "<?xml version='1.0' encoding='iso-8859-1' ?>\n<rss version='2.0'>\n<channel>\n<title>MyBetstats RSS-Feed</title>\n<link>http://www.mybetstats.de</link>\n<description>Mybetstats News Feed</description>\n<language>de-DE</language>\n";
$verbindung = mysql_connect($server, $user, $passwort) or die ("Es konnte keine Verbindung zum Server hergestellt werden!");
mysql_select_db($datenbank) or die ("Diese Datenbank existiert nicht!");
$datensatz = mysql_query("SELECT datum FROM news ORDER BY id DESC LIMIT 0,1");
$row = mysql_fetch_assoc($datensatz);
$pubDate = date("D, d M Y H:i:s T", $row['datum']);
$string.= "<lastBuildDate>$pubDate</lastBuildDate>\n";
$daten_news = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 0,200");
while ($row = mysql_fetch_assoc($daten_news))
{
$string.="<item>\n";
$string.="<title>$row['schrift']</title>\n";
$string.="<author>$row['autor']</author>\n";
$string.="<pubDate>$row['datum']</pubDate>\n";
$string.="<link>http://www.mybetstats.de/kommentare.php?id=$row['id']</link>\n";
$string.="<description>$row['text']</description>\n";
$string.="</item>\n";
}
$string.="</channel>\n";
$string.="</rss>\n";
mysql_close($verbindung);
Danach nehme ich die Variable und mache ein Element daraus und gebe es dann aus?PHP-Code:$xml = simplexml_load_string($string);
Falls richtig verstanden, wie speicher ich das nun in die XML Datei die auf meinem Server liegt? (Denn die Aktualisierung meiner XML geschieht beim Newsposten nicht beim Aufruf, weil ich dem Server die Last nehmen will)PHP-Code:$new_xml = new SimpleXMLElement($xml);
echo $new_xml->asXML();
Geändert von filament (28.11.11 um 21:00 Uhr) Grund: Letzten Satz vergessen ;)
-
28.11.11 21:06 #10
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Die Methode asXML() akzeptiert einen Parameter (default null), der den Dateinamen darstellt, unter dem die Datei gespeichert werden soll.
DOM ist das Document Object Modell, eine Technologie, mit der du immer dann zu tun hast, wenn du im Internet surfst. HTML ist eine Untermenge von XML und XML ist quasi der Quellcode des DOM.
Du kannst durch DOM eine XML-Root definiereren und dort Childs reinhängen. Das ist kein Hexenwerk, erfordert nur Sorgfalt beim Entwickeln. Macht sich aber durch prima Validierungsmöglichkeiten und nicht zu letzt sauberen PHP-Code bemerkbar. Das ist aber deine Entscheidung
Wenn du dich dem noch nicht gewachsen fühlst, ist SimpleXML evtl. erstmal die bessere Wahl.
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Erstmal nochmal für alle vorherigen Posts, danke für deine Hilfe.
Zum Thema:
Ist mein Code wie oben geschrieben denn richtig?
Wie sähe das mit dem Dateinamen aus?
so?PHP-Code:echo $new_xml->asXML(rss/rss.xml);
-
28.11.11 21:51 #12
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Zeichenketten müssen immer als solche ausgewiesen werden:
Code php:1
$new_xml->asXML("rss/rss.xml");
Dann sollte im Verzeichnis rss eine Datei mit dem Namen rss.xml erzeugt werden, die die Inhalt des SimpleXMLElement-Objekts und seiner Kinder hat. Sollte dann direkt über den Browser erreichbar sein.
Im übrigen empfehle ich dir, bei Tests folgende zwei Zeilen in die ersten Zeilen deiner Scripts einzubauen:
Code php:1 2
error_reporting(E_ALL|E_STRICT); ini_set('display_errors', 1);
Dadurch kannst du Fehler und Warnungen sehen und das hilft uns bei der Analyse der Probleme.
EDIT: Zu deinem Code von oben. Eigentlich brauchst du kein neues SimpleXMLElement erzeugen, denn die Funktion simplexml_load_string() gibt schon ein SimpleXMLElement-Objekt zurück, das du direkt verwenden kannst. Du könntest also die Aktion asXML() direkt mit der Variable $xml verwenden.Geändert von saftmeister (28.11.11 um 21:54 Uhr)
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Das heißt ich mache direkt $xml->asXML("rss/rss.xml"); ?
Wie sieht das bei der Funktion mit ChmodRechten aus? Wie muss ich die verteilen? Kann ich vorher bei der Funktion die Datei mit unlink löschen, und die Funktion aufrufen? Sprich wird dann mit Aufruf direkt eine neue Datei erstellt?
-
28.11.11 23:10 #14
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.521
Genau.
Die Zugriffsrechte der neu erstellten Datei (wenn du vorher mit unlink löschst) kann ich nicht vorhersagen, denn das ist System-Konfigurationsabhängig. Wenn du sicher gehen willst, kannst du mit dem Befehl chmod() die Zugriffsrechte in einen definierten Zustand bringen. Beispiel:
Code php:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
// Nur als Hilfe den Pfad in eine Variable speichern $datei = "rss/rss.xml"; // Erst Datei löschen if(!unlink($datei)) { die("Konnte $datei nicht löschen"); } // Dann Datei neu erzeugen $xml->asXML($datei); if(!file_exists($datei)) { die("Konnte XML nicht in $datei schreiben"); } // Dann Zugriffsrechte definieren (Eigentümer=lesen,schreiben; Gruppe=lesen; Sonstige=lesen) if(!chmod($datei, 0644)) { die("Konnte die Zugriffsrechte nicht definieren"); }
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
Ähnliche Themen
-
Variable wird nich richtig ausgegeben/übergeben
Von Captain Subtext im Forum Flash PlattformAntworten: 5Letzter Beitrag: 18.12.07, 09:37 -
Checkbox wird nicht richtig ausgegeben
Von Luke85 im Forum PHPAntworten: 8Letzter Beitrag: 02.11.07, 12:15 -
Array wird "nicht richtig" ausgegeben
Von Gifty43 im Forum PHPAntworten: 4Letzter Beitrag: 29.04.07, 11:23 -
Datei wird nicht richtig
Von okoman im Forum .NET ArchivAntworten: 5Letzter Beitrag: 12.05.05, 17:54 -
Top 10 wird nicht richtig ausgegeben
Von ultrasonic im Forum PHPAntworten: 15Letzter Beitrag: 17.10.03, 12:50





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren