PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP problem


Nagelbrett
2003-01-21, 16:29:54
also ich hab ein phpscript, das von gewissen seiten gewisse daten sammelt und dann ausgibt.. dazu muss es allerdings jedesmal wenn jemand das script, also meine seite aufruft, diese gewissen seiten neu downloaden, um die daten auswerten und anzeigen zu können, was jedoch immer ein paar sekunden dauert und aufgrund der größe der gewissen seiten den server ziemlich belastet...

nun hätt ich es gern so, dass mein script nur in einem gewissen zeitabstand (den ich bestimmen kann) neue daten von den websites saugt, und ansonsten zwischengespeicherte werte ausgibt.

kann mir jemand verraten, wie ich das mit php anstellen soll, dass es in bestimmten zeitabständen irgendwie die daten erneuert und sonst nicht? wenn möglich ohne mysql, es kann die daten ja in einer textfile zwischenspeichern, das sollte ja auch irgendwie gehn...

TomPo
2003-01-21, 16:45:22
benutze dafür am besten eine zeitstempel. und solange der stempel + eine gewisse zeit nicht abgelaufen ist, sollen die zwischengespeicherten daten angezeigt werden. ist der stempel + dieses zeitfenster abgelaufen, soll er die server abgrasen und die daten neu erstellen. siehe auch http://www.php.net/manual/de/function.time.php

P.S. ich hoffe, dir reicht diese erklärung. oder wolltest du code haben?

Nagelbrett
2003-01-21, 17:07:09
mh jo, mit dem gedanke hab ich ja auchschon gespielt irgendwie.. aber ich dachte es gäbe vielleicht noch eine andere möglichkeit...

aber eine frage noch: angenommen ich hab die daten in einem zweidimensionalen array, wie speicher ich die dann am besten in eine datei und les sie wieder aus? hier wäre ein bisschen code vllt nicht schlecht.. wie gesagt, es sollte ohne mysql funktionieren...
hab leider noch nicht so die erfahrung mit php ;)

thx schonmal

TomPo
2003-01-21, 18:00:31
ich hatte gehofft, das dir meine erklärung reicht ;)

aber leider muss ich zugeben, das ich überhaupt keine erfahrung mit dateiverwaltung habe. der einfachheit halber würde ich zwei dateien anlegen, eine mit dem timestamp, die andere mit den daten. denkbar ist auch arrayelement für arrayelement getrennt durch ein semikolon auf platte zu schreiben, aber andere hier können dir da sicher besser weiterhelfen. würde mich auch mal interessieren, wie man sowas angeht.

Matthias2x
2003-01-21, 18:18:37
@Nagelbrett,
poste mal bitte ein wenig Beispielcode deines Scriptes, evtl. kann ich dir dann weiterhelfen. Im Prinzip kann mans aber so wie in meinem einfachen Beispiel unten machen, der abzuspeichernde Array ist hier input[] ->

<html>
<head>
<title>Test</title>
</head>
<body bgcolor="#FFFFFF">
<form action="<?php echo $PHP_SELF."?mode=save";?>" method="POST">
<?php
// Name des Speicherfiles
$db_file = 'db.cgi';
// Formular-Daten speichern
if($mode == 'save'){
foreach($_POST[input] as $ip =>$save_value){
if($save_value != 'neuer Eintrag hier'){
$save_line .= $save_value."\n";
}
}
$fd = @fopen($db_file, 'w');
if(@fputs($fd, $save_line)){
echo "<div align='left'><font face='Arial' color='#C00000' size='2'>daten aktualisiert</font></div>\r\n";
} else {
echo "<div align='left'><font face='Arial' color='#C00000' size='2'>daten konnten nicht aktualisiert werden</font></div>\r\n";
}
@fclose($fd);
}
// Datenfile auslesen und enthaltene Daten ins Formular übertragen
$dbf = file($db_file);
while(list($key,$line) = each($dbf)){
echo '<input type="text" name="input[]" value="'.$line.'"><br>'."\r\n";
}
?>
<input type="text" name="input[]" value="neuer Eintrag hier"><br>
<input type="submit" name="go" value="go">
</form>
</body>
</html>

Übrigens hat der Name "db.cgi" für das Speicherfile seinen Zweck. Bei einem richtig konfigurierten Webserver kann man das File nicht per Browser aufrufen bzw. anzeigen lassen, es kommt nur ein Internal Server Error als Meldung.