Hallo zusammen!
Ich habe mich neu hier angemeldet in der Hoffnung, etwas Hilfe zu bekommen bei einem PHP-Problem. Zu meiner PHP-Erfahrung: Ich bin selbst kein erfahrener Programmierer, kann mir aber meine Code-Schnipsel zusammen sammeln und umbauen, wie ich es brauche.
Also, es geht um ein WordPress-Plugin, welches ich im Frühjahr in Auftrag gab. Das Plugin ist ziemlich simpel, und der WordPress-Teil des Codes funktioniert auch super.
Die Aufgabe dieses Skript ist, dass es sich per Knopfdruck aufrufen und lässt und dann einen RSS-Feed einliest.
Wenn Feed-Einträge gefunden werden (erzeugt seit dem letzten Aufruf des Skripts; Zeitstempel wird in Datenbank abgelegt), dann werden diese Einträge einer nach dem anderen in eine Liste in einem WP-Artikel geschrieben.
Alle Feed-Einträge eines Tages erscheinen in einer Liste eines einzigen Artikels. Einträge eines anderen Tags erscheinen in einem anderen Artikel.
Die gute Nachricht: dieses Skript funktionierte einmal einwandfrei.
Die schlechte Nachricht: plötzlich funktioniert das Skript nicht mehr, obwohl ich es nicht angefasst habe.
Gut wiederum ist, dass ich den Fehler vermutlich gut eingekreist habe. Aber ich kann ihn nicht selbst beheben.
So, jetzt gibt es mal etwas Code. Momentan geht es mir um den Teil mit dem Datum:
Das war mir zu sehr ineinander verschachtelt, dass ich den Überblick verliere.
Ich habe es daher in verschiedene Teil-Abschnitte zerlegt:
Ich habe ein wenig gebraucht, um hinter das Konzept dieser verschachtelten Umwandlungen zu steigen:
1) Das Quell-XML des RSS-Feeds enthält einen String, der eine Zeitinformation beinhaltet. Und zwar wie im Beispiel zu sehen inklusive Uhrzeit, Zeitzone etc.
2) strtotime() macht einen Unix-Zeitstempel daraus.
3) date() schreibt diesen wieder zurück in einen String, aber nur noch als Datum ohne Uhrzeit
4) dann kommt das zweite strtotime(), um daraus nun erneut einen Unix-Zeitstempel für dieses Datum (bei 00:00:00 Uhr) zu bekommen. Unabhängig von der Uhrzeit haben nun alle Feedeinträge eines Tages den exakt gleichen Zeitstempel.
Der Fehler ist, dass der Eintrag im Feed sich anscheinend nicht von strtotime() verarbeiten lässt. (die Kommentare oben ensprechen den Ausgaben des Skripts).
Wenn ich mir das Datum anschaue, dann sehe ich auch folgende Ungereimtheiten:
a) "Wed" und "Okt" (eins Englisch, eins Deutsch abgekürzt)
b) Leerzeichen am Ende (vermutlich egal)
c) EDT ist die Sommerzeit an der US-Ostküste. Der Server läuft aber in Deutschland???
Wie bereits gesagt, es funktionierte bis vor 4-6 Wochen noch alles. Irgendwann ist etwas kaputt gegangen. Bei meinem Provider Webhostone gab es Ende September eine Umstellung auf eine höhere Debian-Version. Kann da etwas geändert worden sein, was solche Auswirkungen hat?
Ich bin über jede Idee wirklich froh, da ich nun mit meinem Latein am Ende bin.
Vielen Dank vorab!
Gruß,
Marcus
Ich habe mich neu hier angemeldet in der Hoffnung, etwas Hilfe zu bekommen bei einem PHP-Problem. Zu meiner PHP-Erfahrung: Ich bin selbst kein erfahrener Programmierer, kann mir aber meine Code-Schnipsel zusammen sammeln und umbauen, wie ich es brauche.
Also, es geht um ein WordPress-Plugin, welches ich im Frühjahr in Auftrag gab. Das Plugin ist ziemlich simpel, und der WordPress-Teil des Codes funktioniert auch super.
Die Aufgabe dieses Skript ist, dass es sich per Knopfdruck aufrufen und lässt und dann einen RSS-Feed einliest.
Wenn Feed-Einträge gefunden werden (erzeugt seit dem letzten Aufruf des Skripts; Zeitstempel wird in Datenbank abgelegt), dann werden diese Einträge einer nach dem anderen in eine Liste in einem WP-Artikel geschrieben.
Alle Feed-Einträge eines Tages erscheinen in einer Liste eines einzigen Artikels. Einträge eines anderen Tags erscheinen in einem anderen Artikel.
Die gute Nachricht: dieses Skript funktionierte einmal einwandfrei.
Die schlechte Nachricht: plötzlich funktioniert das Skript nicht mehr, obwohl ich es nicht angefasst habe.
Gut wiederum ist, dass ich den Fehler vermutlich gut eingekreist habe. Aber ich kann ihn nicht selbst beheben.
So, jetzt gibt es mal etwas Code. Momentan geht es mir um den Teil mit dem Datum:
PHP-Code:
$pubDate = strtotime(date('d.m.Y',strtotime($item->pubDate)));
echo "DEBUG: Variable \$item->pubDate = " . $item->pubDate . "<br>";
Ich habe es daher in verschiedene Teil-Abschnitte zerlegt:
PHP-Code:
$feedstring = "Wed, 29 Okt 2014 17:08:16 EDT "; // Beispiel aus dem RSS Feed
echo "Variable \$feedstring = " . $feedstring . "<br>";
$feedstringtotime = strtotime($feedstring);
echo "Variable \$feedstringtotime = " . $feedstringtotime . "<br>"; // leer
$datestring = date('d.m.Y',$feedstringtotime);
echo "Variable \$datestring = " . $datestring . "<br>"; // 01.01.1970
$datestringtotime = strtotime($datestring);
echo "Variable \$datestringtotime = " . $datestringtotime . "<br>"; // 0
1) Das Quell-XML des RSS-Feeds enthält einen String, der eine Zeitinformation beinhaltet. Und zwar wie im Beispiel zu sehen inklusive Uhrzeit, Zeitzone etc.
2) strtotime() macht einen Unix-Zeitstempel daraus.
3) date() schreibt diesen wieder zurück in einen String, aber nur noch als Datum ohne Uhrzeit
4) dann kommt das zweite strtotime(), um daraus nun erneut einen Unix-Zeitstempel für dieses Datum (bei 00:00:00 Uhr) zu bekommen. Unabhängig von der Uhrzeit haben nun alle Feedeinträge eines Tages den exakt gleichen Zeitstempel.
Der Fehler ist, dass der Eintrag im Feed sich anscheinend nicht von strtotime() verarbeiten lässt. (die Kommentare oben ensprechen den Ausgaben des Skripts).
Wenn ich mir das Datum anschaue, dann sehe ich auch folgende Ungereimtheiten:
a) "Wed" und "Okt" (eins Englisch, eins Deutsch abgekürzt)
b) Leerzeichen am Ende (vermutlich egal)
c) EDT ist die Sommerzeit an der US-Ostküste. Der Server läuft aber in Deutschland???
Wie bereits gesagt, es funktionierte bis vor 4-6 Wochen noch alles. Irgendwann ist etwas kaputt gegangen. Bei meinem Provider Webhostone gab es Ende September eine Umstellung auf eine höhere Debian-Version. Kann da etwas geändert worden sein, was solche Auswirkungen hat?
Ich bin über jede Idee wirklich froh, da ich nun mit meinem Latein am Ende bin.
Vielen Dank vorab!
Gruß,
Marcus
Kommentar