Hi Leute
Ich hab ein Problem. Ich hole mir von einem Server eine Grafikdatei (PNG) und speichere sie auf meinen Server. So verhindere ich, dass jeder benutzer die Datei wiederum auf dem Fremdserver anfordert sondern die datei direkt auf meinem Server zur verfügung steht. Da die Datei aber aktuell sein soll, möchte ich sie alle 8 Sekunden updaten. Was meine Klasse auch prima hinkriegt. Ich bekomme aber beim Zugriff mehrerer Benutzer ab und zu die Fehlermeldung:
Warning: imagecreatefrompng() [function.imagecreatefrompng.php]: gd-png: fatal libpng error: IDAT: CRC error
Warning: imagecreatefrompng() [function.imagecreatefrompng.php]: gd-png error: setjmp returns error condition
Warning: imagecreatefrompng() [function.imagecreatefrompng.php]: 'lhc1.png' is not a valid PNG file
Warning: imagecolorat(): supplied argument is not a valid Image resource
...
Ich nehme an, dass dies mit dem gleichzeitigen lesen während ein anderer Benutzer schreibt zu tun hat... Habe versucht verschiedene prüfungen einzubauen. der fehler kommt jedoch trotzdem noch...
jemand eine ahnung?
hier meine Klasse:
Danke Gilles für deinen Hinweis. Hier also nochmals der PHP Code.
danke.
Das 8) soll 8 ) heissen.
Ich hab ein Problem. Ich hole mir von einem Server eine Grafikdatei (PNG) und speichere sie auf meinen Server. So verhindere ich, dass jeder benutzer die Datei wiederum auf dem Fremdserver anfordert sondern die datei direkt auf meinem Server zur verfügung steht. Da die Datei aber aktuell sein soll, möchte ich sie alle 8 Sekunden updaten. Was meine Klasse auch prima hinkriegt. Ich bekomme aber beim Zugriff mehrerer Benutzer ab und zu die Fehlermeldung:
Warning: imagecreatefrompng() [function.imagecreatefrompng.php]: gd-png: fatal libpng error: IDAT: CRC error
Warning: imagecreatefrompng() [function.imagecreatefrompng.php]: gd-png error: setjmp returns error condition
Warning: imagecreatefrompng() [function.imagecreatefrompng.php]: 'lhc1.png' is not a valid PNG file
Warning: imagecolorat(): supplied argument is not a valid Image resource
...
Ich nehme an, dass dies mit dem gleichzeitigen lesen während ein anderer Benutzer schreibt zu tun hat... Habe versucht verschiedene prüfungen einzubauen. der fehler kommt jedoch trotzdem noch...
jemand eine ahnung?
hier meine Klasse:
Danke Gilles für deinen Hinweis. Hier also nochmals der PHP Code.
PHP:
<?php
class CernGraph {
// Anlegen der Instanz
private static $instance = NULL;
private static $URL = 'http://vistar-capture.web.cern.ch/vistar-capture/';
// Konstruktor private, damit die Klasse nur aus sich selbst heraus instanziiert werden kann.
private function __construct() {}
// Diese statische Methode gibt die Instanz zurueck.
public static function getInstance() {
if (self::$instance === NULL) {
self::$instance = new self;
}
return self::$instance;
}
public function getCernGraph($filename){
}
public function getFile($filename)
{
$diff = (time()-filemtime($filename));
//echo "diff:$diff<br/>";
if($diff>8){
//echo 'grösser 8<br/>';
self::updateFile('lhc1.png');
}
if (is_readable($filename)) {
try {
return ImageCreateFromPNG($filename);
} catch (Exception $e){
sleep(1);
return self::getFile($filename);
}
} else {
sleep(1);
return self::getFile($filename);
}
}
private function updateFile($filename)
{
if(!is_writable($filename)){
return;
}
//echo "start update file<br/>";
$url = self::$URL.$filename;
//echo "updateFile:url:$url<br/>";
$file = explode("/", $url);
ob_start();
$fp = fopen($url, "r");
fpassthru($fp);
fclose($fp);
$file = ob_get_contents();
ob_end_clean();
$savepath = ''; //Speicherpfad anpassen, Ordnerrechte nicht vergessen!!
if (file_exists($savepath.$filename))
unlink($savepath.$filename);
$fp = fopen($savepath.$filename, "a");
fwrite($fp, $file);
fclose($fp);
//echo "end update file<br/>";
}
// Klonen per 'clone()' von außen verbieten.
private function __clone() {}
}
?>
danke.
Das 8) soll 8 ) heissen.
Zuletzt bearbeitet von einem Moderator: