Norbert: Statistik per PHP als img

Ich habe PHP zur Verfügung und möchte ein Logfile wegschreiben. Nachdem alle Seiten in htm geschrieben sind, kommen keine vollen .php - Files infrage.

www.onestat.com u. a. bieten Statistiken an. Die zu loggenden Daten werden in einem Javascript erzeugt und einem img übergeben. Im Falle von www.onestat.com wird eine .aspx-Datei aufgerufen. Wie kann eine externe php-Datei ein Image (auch wenn es blank ist) zurückliefern?

<script type="text/javascript">
<!--
function OneStat_Pageview()
{
    var d=document;
    var sid="312914";
    var CONTENTSECTION="";
    var osp_URL=d.URL;
    var osp_Title=d.title;
    var t=new Date();
    var p="http"+(d.URL.indexOf('https:')==0?'s':'')+"://stat.onestat.com/stat.aspx?tagver=2&sid="+sid;
    d.write(p);
    p+="&url="+escape(osp_URL);
    p+="&ti="+escape(osp_Title);
    p+="&section="+escape(CONTENTSECTION);
    p+="&rf="+escape(parent==self?document.referrer:top.document.referrer);
    p+="&tz="+escape(t.getTimezoneOffset());
    p+="&ch="+escape(t.getHours());
    p+="&js=1";
    p+="&ul="+escape(navigator.appName=="Netscape"?navigator.language:navigator.userLanguage);
    if(typeof(screen)=="object"){
       p+="&sr="+screen.width+"x"+screen.height;p+="&cd="+screen.colorDepth;
       p+="&jo="+(navigator.javaEnabled()?"Yes":"No");
    }
    d.write('<a href="http://www.onestat.com/aspx/login.aspx?sid='+sid+'" target=_blank>
    <img id="ONESTAT_TAG" border="0" src="'+p+'" alt="This site tracked by OneStat.com. Get your own free site counter."></'+'a>');
}

OneStat_Pageview();
//-->
</script>

  1. Hallo,
    In dem du mit dem PHP einen IMG-Header erzeugst und dann binäre Daten ausgibst (die du z.b. vorher aus einer Bilddatei einliest):

    Beispiel:
    $img = "/home/bilder/test.gif";

    $size = filesize($img);
    header("Content-Length: $size");
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false);
    header("Content-Type: image/gif");
    header("Content-Transfer-Encoding: binary");

    $fd = fopen($img, "r");
    if (!$fd) {logg ("Cannot open Image $img");}
    else {
       while ($data = fread($fd, 1024)) {
          echo $data;
       }
       fclose($fd);
      flush();
    }

    (ohne Gewähr, evtl. muss man noch was tun, damit die Daten wirklich binär gelesen werden)