header() laedt seite offenbar 2x
Dieter Raber
- php
0 wahsaga0 Dieter Raber0 wahsaga
Hallo,
Ich habe hier ein PHP Script, das geht etwa so (gekuerzt):
// vorher etwas Code, um eine Bildreferenz zu erzeugen
if ($im !== false)
{
header('Content-Type: image/gif');
// alternativ getestet: header('Content-Type: image/gif', false);
imagegif($im);
imagedestroy($im);
}
// $ado = Adodb Objekt
$ado -> Execute(UPDATE newsletter_tracker SET counter = (counter + 1));
Beide Teile fuer sich genommen funktionieren klaglos, in der Kombination wird der Counter aber um 2 hochgezaehlt, also offenbar die Query 2x ausgefuehrt.
System: PHP 5.0.5 / MySQL 4.1.14-nt / Apache/2.0.54 / WinXP Pro, alle Updates
Hat jemand eine Idee, was da schieflaeuft?
Gruß und danke,
Dieter
hi,
Beide Teile fuer sich genommen funktionieren klaglos, in der Kombination wird der Counter aber um 2 hochgezaehlt, also offenbar die Query 2x ausgefuehrt.
Nicht so schnell mit der Schlussfolgerung - vielleicht wird die Ressource ja auch doppelt angefordert?
System: PHP 5.0.5 / MySQL 4.1.14-nt / Apache/2.0.54 / WinXP Pro, alle Updates
Welcher Browser?
Über den Firefox habe ich schon des öfteren gelesen, dass er Ressourcen doppelt anfordert.
Blick ins Accesslog sollte klären helfen, ob dies der Fall ist.
gruß,
wahsaga
Hallo wahsaga,
Du hattest absolut recht mit deiner Vermutung, Firefox fordert 2x an, die anderen alle nur einmal.
Der Code verfolgt den Zweck, bei einem Newsletter herauszufinden, wieviele geoeffnet wurden. Die Unzulaenglichkeiten sind mir klar. Es wird also ein PHP-Script in einem <img> geladen, das einen Counter hochzaehlt. Ich vermute, dass es dem Server wurscht ist, ob er mit einem Browser oder einem Emailclient redet. Demnach koennte ich also zB. eine Session nutzen, in der irgendwas empty() sein muss, damit das Hochzaehlen ausgefuehrt wird, sehe ich das richtig?
Gruß,
Dieter
hi,
Der Code verfolgt den Zweck, bei einem Newsletter herauszufinden, wieviele geoeffnet wurden. Die Unzulaenglichkeiten sind mir klar. Es wird also ein PHP-Script in einem <img> geladen, das einen Counter hochzaehlt. Ich vermute, dass es dem Server wurscht ist, ob er mit einem Browser oder einem Emailclient redet.
Ja, ist ihm wurscht, geht ihn auch nichts an :-)
Demnach koennte ich also zB. eine Session nutzen, in der irgendwas empty() sein muss, damit das Hochzaehlen ausgefuehrt wird, sehe ich das richtig?
Ja, wobei ich den normalen Session-Mechanismus hier für eher ungeeignet halte (Übermittlung der SID, Session-Lebensdauer - bei E-Mail alles etwas ungünstiger als bei einer "normalen" Seitenanforderung).
Vielleicht wäre es einfacher, wenn du in jeder E-Mail eine eindeutige ID vergibst (z.B. per uniqid()), diese an die Bildadresse anhängst - und dann beim Zählen diese IDs serverseitig speicherst, und nur weiter hochzählst, wenn die ID noch nicht gezählt wurde.
Da wären dann noch weitere Ferkeleien denkbar - z.B. die IDs gleich mit in den Benutzerdaten abzulegen, so dass auch noch nachvollzogen werden kann, _wer_ den Newsletter gelesen hat, etc.
gruß,
wahsaga
Hallo wahsaga,
Vielleicht wäre es einfacher, wenn du in jeder E-Mail eine eindeutige ID vergibst[...]
Ok, da kann ich was basteln
Da wären dann noch weitere Ferkeleien denkbar
Klar, muss ich aber nicht haben *oink*
Vielen Dank fuer Deine Hilfe.
Gruß,
Dieter