Script ausführen und speichern

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.
Benutzeravatar
sts
Mitglied
Beiträge: 345
Registriert: 04.04.2004 18:45

Script ausführen und speichern

Beitrag von sts »

Hallo,

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:

Code: Alles auswählen

<?php
 copy("rss-feed-auslesen.php" , "feed.rss");
?>
Nur wird hier das Script kopiert und nicht ausgeführt -> anschließend gespeichert.
Hat jemand eine Idee?
Zuletzt geändert von sts am 19.12.2007 12:30, insgesamt 1-mal geändert.
PHPBB3 Fan
PHPBB3 SEO Skin||
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

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.
Benutzeravatar
sts
Mitglied
Beiträge: 345
Registriert: 04.04.2004 18:45

Beitrag von sts »

Hm,

ich habe da mal etwas gebastelt:

Code: Alles auswählen

<?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?
PHPBB3 Fan
PHPBB3 SEO Skin||
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

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.
Seether
Mitglied
Beiträge: 1446
Registriert: 10.10.2002 23:42

Beitrag von Seether »

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.
Benutzeravatar
sts
Mitglied
Beiträge: 345
Registriert: 04.04.2004 18:45

Beitrag von sts »

@Seether

der heise feed ist nur zum Testen.

@gn#36
Das Minuszeichen ist ein Operator
Hiermit hast du vollkommen recht gehabt. Der Fehler ist nun nicht mehr vorhanden.

Zum 2 Test habe ich nun alle Rechte (testhalber) auf 777 gesetzt (Datein/Verzeichnis).
Das dumme ist die nächste 500 Fehlermeldung:
Premature end of script headers: test.php
Scriptzeit max 60 Sek /Memorylimit 30MB
PHPBB3 Fan
PHPBB3 SEO Skin||
Benutzeravatar
sts
Mitglied
Beiträge: 345
Registriert: 04.04.2004 18:45

Beitrag von sts »

push
PHPBB3 Fan
PHPBB3 SEO Skin||
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

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.
Benutzeravatar
sts
Mitglied
Beiträge: 345
Registriert: 04.04.2004 18:45

Beitrag von sts »

Natürlich

Code: Alles auswählen

 <?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";
}
?>
PHPBB3 Fan
PHPBB3 SEO Skin||
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

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

Zurück zu „Coding & Technik“