Diashow wird teilweise fehlerhaft wiedergegeben

Diashow wird teilweise fehlerhaft wiedergegeben

am 12.04.2008 16:34:59 von joerg.nieswand

Halli Hallo,

ich habe mit PHP eine Diashow programmiert, die soweit auch
funktioniert. Alle Bilder, die sich im Verzeichnis "dia/1234" befinden,
werden angezeigt. Das funktioniert bei mir problemlos.

Jetzt habe ich aber bei einem Freund und einem Verwandten festgestellt,
das der Bildaufbau dort nicht richtig funktioniert. Die Bilder werden
quasi verstümmelt oder unvollständig wiedergegeben. Wißt Ihr, woran das
liegt und wie ich das Problem lösen kann?

Vielen Dank im voraus für Eure Hilfe :-))


header("Expires: Mon, 10 Jan 1970 01:01:01 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Pragma: no-cache");
$nr=1234;
$vor=$_REQUEST ["vor_x"];
$zur=$_REQUEST ["zur_x"];
$aktuell=$_POST["aktuell"];
$d = dir("dia/".$nr);
while (false !== ($datei = $d->read()))
{
if($datei != "." and $datei != "..")
{
$inhalt[]=$liste.$datei;
}
}
$d->close();
$anzahl=count ($inhalt);
sort ($inhalt);
$maxi=$anzahl;
echo '

';
if ($vor=="" && $zur=="")
{
$aktuell="1";
}
if ($vor!="")
{
$aktuell++;
}
if ($zur!="")
{
$aktuell--;
}
if ($aktuell<1)
{
$aktuell=$maxi;
}
if ($aktuell>$maxi)
{
$aktuell=1;
}
?>














Objekt
echo $nr;
?>


echo '';
?>
>
>
>


echo "Bild ".$aktuell." von ".$maxi;
$bild=$aktuell;
$bild="dia/".$nr."/".$inhalt[$aktuell-1];
$image = getimagesize($bild);
$breite_alt = $image[0];
$hoehe_alt = $image[1];
$p1=$hoehe_alt/288;
$p2=$breite_alt/384;
if ($p1>$p2)
{
$n=$p1;
}
else
{
$n=$p2;
}
$hoehe_neu=$hoehe_alt/$n;
$breite_neu=$breite_alt/$n;
$im1 = imagecreatetruecolor($breite_neu, $hoehe_neu);
$im2 = imagecreatefromjpeg($bild);
imagecopyresampled($im1, $im2, 0, 0, 0, 0, $breite_neu, $hoehe_neu,
$breite_alt, $hoehe_alt);
imagejpeg($im1,"dia/dia.jpg",90);
imagedestroy($im1);
imagedestroy($im2);
?>

style="letter-spacing: 20px">
  name="vor"> 



Re: Diashow wird teilweise fehlerhaft wiedergegeben

am 13.04.2008 23:41:41 von Jacob Hayn

Jörg Nieswand schrieb:
> Halli Hallo,

Hallo Jörg,

Irgendwie ist dein Code nicht so prickelnd und erinnert mich an längst
vergangene Zeiten. Egal, wir haben alle mal klein angefangen. ;)

> ich habe mit PHP eine Diashow programmiert, die soweit auch
> funktioniert. Alle Bilder, die sich im Verzeichnis "dia/1234" befinden,
> werden angezeigt. Das funktioniert bei mir problemlos.
>
> Jetzt habe ich aber bei einem Freund und einem Verwandten festgestellt,
> das der Bildaufbau dort nicht richtig funktioniert. Die Bilder werden
> quasi verstümmelt oder unvollständig wiedergegeben. Wißt Ihr, woran das
> liegt und wie ich das Problem lösen kann?

Um erst mal deine Frage zu beantworten, könnte es an deiner Strategie
liegen, wie du das Bild auslieferst.

Das Bild auf die Festplatte zu schreiben *nachdem* das -Tag an den
Browser geschickt wurde finde ich nicht sonderlich weise und könnte eine
Ursache für das beschriebene Problem sein. Stell dir mal folgendes
Szenario vor:
* User XY schickt Request für Bildseite an den Server.
* Dein Script schickt die Header und das -Tag zurück an den Browser
* Je nach Browser(-einstellung) erfolgt sofort ein weiterer Request für
dia.jpg
* jetzt erst beginnt die relativ "teure" Berechnung der neuen Bildgröße,
das dauert auch seine Zeit
* parallel dazu bedient der Webserver den zweiten Request (dia.jpg)
* parallel dazu ist dein Script durchgelaufen und (über-)schreibt dia.jpg
* ...
Du solltest erkennen, worauf ich hinaus will.

Jetzt stell dir das Szenario mal mit mehreren Usern gleichzeitig vor,
die sich alle unterschiedliche Bilder ansehen wollen. Das gibt ein ganz
schönes Chaos.

Was mir auch noch aufgefallen ist, ist dass du anscheinend ohne
error_reporting programmierst. Das solltest du ändern:
error_reporting(E_ALL | E_STRICT); zeigt dir alle Fehler an, die auftreten.

Zum Beispiel hier
> $vor=$_REQUEST ["vor_x"];
> $zur=$_REQUEST ["zur_x"];
> $aktuell=$_POST["aktuell"];
und hier
> $inhalt[]=$liste.$datei;

Ich habe vor zwei, drei Jahren ein ähnliches Script geschrieben,
allerdings ohne beschriebenes Problem. Ich habe damals auch bei *jedem*
Request per Script ein Thumbnail generiert und selbst die großen Bilder
hatte ich noch einmal mit den image*-Funktionen bearbeitet. Das führte
auf meinem lokalen Entwicklungsserver zu massiven Performanceproblemen,
ganz zu schweigen vom Hosting-Server.

Was ich dir empfehlen kann ist, dass du das Skalieren dem Browser
überlässt und einfach das Originalbild einbindest: src="dia/1234/foo.jpg" ...>. Das sollte bei den
Verbindungsgeschwindigkeiten heutzutage auch bei richtig großen Bildern
kein Problem darstellen.

Oder du lädst die Bilder bereits skalierst auf den Server hoch.

Eine weitere Strategie wäre, die Bilder vom Script nur einmal skalieren
zu lassen und dann mit einem eindeutigen Dateinamen zu speichern. Das
Script prüft dann bei jedem Aufruf ob die Datei bereits existiert und
schreibt nur noch den neuen Dateinamen in das -Tag.

Gruß Jacob

Re: Diashow wird teilweise fehlerhaft wiedergegeben

am 13.04.2008 23:53:49 von Claus Reibenstein

Jacob Hayn schrieb:

> Was ich dir empfehlen kann ist, dass du das Skalieren dem Browser
> überlässt und einfach das Originalbild einbindest:

Mit Verlaub: Das ist eine scheiß Empfehlung! Es gibt schon genügend
Webseiten, die genau diesen Blödsinn machen und damit für reichlich
Traffic und entsprechende Wartezeiten sorgen!

Hast Du noch mehr so tolle Ideen? :-(

Gruß. Claus

Re: Diashow wird teilweise fehlerhaft wiedergegeben

am 14.04.2008 01:27:59 von Jacob Hayn

Claus Reibenstein schrieb:
> Jacob Hayn schrieb:
>
>> Was ich dir empfehlen kann ist, dass du das Skalieren dem Browser
>> überlässt und einfach das Originalbild einbindest:
>
> Mit Verlaub: Das ist eine scheiß Empfehlung! Es gibt schon genügend
> Webseiten, die genau diesen Blödsinn machen und damit für reichlich
> Traffic und entsprechende Wartezeiten sorgen!
>
> Hast Du noch mehr so tolle Ideen? :-(

Hallo Claus,

du hast recht, ich hätte es nicht gerade "empfehlen" und darauf
hinweisen sollen, dass es eher eine Art Hack ist als einen anständige
Lösung. Im Vergleich zur vorherigen Situation fände ich diese Lösung
jedoch besser.

Gruß Jacob

Re: Diashow wird teilweise fehlerhaft wiedergegeben

am 14.04.2008 03:11:29 von joerg.nieswand

Danke für Eure Antworten. Die Diashow selbst wird so gut wie nie
aufgerufen. Daher gibt es auch kaum Probleme mit anderen Benutzern.

Ich habe jetzt einfach mal den HTML Code inkl IMG ans Ende gesetzt. Da
der Fehler bei mir nicht auftritt werde ich in den nächsten Tagen
nachfragen, ob er immer noch existiert. Falls ja, werde ich einfach
Euren Rat befolgen und von den eigentlichen Bildern entsprechende
runterscalierte Bilder erzeugen, die dann angezeigt werden :-))


>
> du hast recht, ich hätte es nicht gerade "empfehlen" und darauf
> hinweisen sollen, dass es eher eine Art Hack ist als einen anständige
> Lösung. Im Vergleich zur vorherigen Situation fände ich diese Lösung
> jedoch besser.
>
> Gruß Jacob