Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
ich habe diverse RSS feeds dich ich aus einer Datenbank auslese. Die RSS-Feeds sehr gefragt, und der Serverload steigt ins unermessliche. So muss ich diese nun zwischenspeichern und per Chronjob alle 5 Min auffrischen. Meine erste Überlegung war:
Vermutlich wäre es angebrachter entweder mit Output-Buffering und Include (geht aber nicht unbedingt bei allen Skripten) oder mit [php:file] arbeiten, jeweils in Kombination mit [php:fopen], [php:fwrite] und [php:fclose] wobei an file die Datei inklusive URL Pfad übergeben werden müsste, so dass sie Ausgeführt und nicht als Textdatei gelesen wird. Das funktioniert aber nicht unbedingt auf allen Servern.
Wenn es geht würde ich die erste Methode bevorzugen.
[php:ob_start] vor, [php:ob_get_clean] nach dem Include und dann mit fopen usw die ausgelesenen Daten in die Datei schreiben.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
<?php
$quelle = 'http://www.heise.de/newsticker/heise-atom.xml';
$ziel = '/html/test/ziel.rss';
// Sichergehen, dass die Datei existiert und beschreibbar ist
if (is_writable($ziel)) {
// Quellendatei öffnen
if (!$quelle-open = fopen($quelle, "r")) {
print "Kann die Datei $quelle nicht öffnen";
exit;
}
// zieldatei datei öffnen
if (!$ziel-open = fopen($ziel, "r+")) {
print "Kann die Datei $ziel nicht öffnen";
exit;
}
// Schreibe Quelle in Ziel .
if (!fwrite($ziel-open, $quelle-open)) {
print "Kann in die Datei $ziel-open nicht schreiben";
exit;
}
print "Fertig, in Datei $ziel wurde $quelle geschrieben";
fclose($quelle);
fclose($ziel);
} else {
print "Die Datei $ziel ist nicht schreibbar";
}
?>
Leider bekomme ich immer folgende Fehlermeldung:
Parse error: syntax error, unexpected '=' in /var/www/test/html/test/test.php on line 10
Nach der Anleitung müsste es richtig sein. Hast du evt. einen Tip?
Das Minuszeichen ist ein Operator. Der lässt sich nicht in Variablennamen benutzen. Eine Berechnung durchzuführen ohne das Ergebnis zu benutzen ist ok, aber du kannst einer Operation ($quelle - open) keinen Wert zuweisen, da die Operation selbst einen Wert besitzt. Deshalb der Fehler.
Bist du außerdem sicher, dass die Funktion das tut was sie soll?
fwrite erwartet einen Dateihandle (soweit gut) und einen String (du gibst einen weiteren Handle weiter). Du musst die quelle mit implode('', file(...)) öffnen.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Gibt es da nicht mit vielen Feed-Anbietern Probleme? Oft wird ja gesagt, dass den Feed übernehmen muss wie er ist und ihn nicht speichern darf.
Weiß aber nicht wie es mit kurzem zwischenspeichern aussieht. Mal abgesehen davon, dass es schwer nachzuweisen ist.
Kannst du noch mal die aktuelle Version zur Verfügung stellen?
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
<?php
$quelle = 'http://stsboard.de/rdf.php';
$ziel = '/html/test/ziel.rss';
// Sichergehen, dass die Datei existiert und beschreibbar ist
if (is_writable($ziel)) {
// Quellendatei öffnen
if (!$quelleopen = fopen($quelle, "r")) {
print "Kann die Datei $quelle nicht öffnen";
exit;
}
// zieldatei datei öffnen
if (!$zielopen = fopen($ziel, "r+")) {
print "Kann die Datei $ziel nicht öffnen";
exit;
}
// Schreibe Quelle in Ziel .
if (!fwrite($zielopen, $quelle-open)) {
print "Kann in die Datei $zielopen nicht schreiben";
exit;
}
print "Fertig, in Datei $ziel wurde $quelle geschrieben";
fclose($quelle);
fclose($ziel);
} else {
print "Die Datei $ziel ist nicht schreibbar";
}
?>
gn#36 hat geschrieben:
Bist du außerdem sicher, dass die Funktion das tut was sie soll?
fwrite erwartet einen Dateihandle (soweit gut) und einen String (du gibst einen weiteren Handle weiter). Du musst die quelle mit implode('', file(...)) öffnen.
Das solltest du noch ändern.
Premature End of Script Headers bedeutet, der PHP Interpreter hat keine Ausgabe an den Webserver zurückgeliefert oder keinen Content-Type Header. Da eigentlich standardmäßig bei der ersten Ausgabe der default Header geschickt wird dürfte es daran eigentlich nicht liegen. Eine vage Vermutung wäre, dass das Öffnen der URL zu lange braucht und das Skript abgebrochen wird oder sogar dabei abstürzt.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.