Dieter Raber: header() laedt seite offenbar 2x

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

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

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. 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

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

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. 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