Frank S.: PHP Newbie / Fehlermeldung beim einbinden von PHP-Code

Beitrag lesen

Das ist natuerlich recht allgemein. Genau wie deine Fehlerbeschreibung.

Hier mal der Quellcode:

  
<html>  
 <head>  
  <title>PHP-Test</title>  
 </head>  
 <body>  
 <?php  ### visitcount04.php ### 12.07.2009 ###  
  
# zählt die Requests und merkt sich die IP der Requestoren für die Dauer der  
# COUNTER_LOCKTIME. In dieser Zeit wird ein erneuter Request derselen IP  
# nicht gezählt. Ein erneuter Request wird auch nach Ablauf von COUNTER_LOCKTIME  
# nicht gezählt, wenn zwischendurch kein Request mit einer abweichenden IP  
# eingetroffen ist.  
#  
# Hinweis:  
# IPs als Grundlage für die Client-Erkennung zu benutzen ist keine saubere  
# Methode. Durch NAT, Proxies und automatische Lastverteilungen, sowie  
# Anonymisierungsdienste können die IPs nicht einem bestimmten Client zugeordnet  
# werden. Für die Funktionsweise dieses Zählers ist die Genauigkeit aber  
# hinreichend.  
  
  
define('COUNTER_LOCKTIME', 3600);  
  
## Counterfile entweder als '.htcounter.dat' oder außerhalb der Document_Root  
#$counterfile = rtrim($_SERVER['DOCUMENT_ROOT'],'/').'/../data/counter.dat';  
$counterfile = '.htcounter.dat';  
  
## Counterfile anlegen, wenn nicht vorhanden.  
touch($counterfile);  
  
#------------------------------------------------------------------------------  
function visitcount($filename, $time, $retrigger = true, $clean = true)  
{  
  
    $fh = fopen($filename, 'rb+');  
  
    if (!$fh) return false;  
    if (!flock($fh, LOCK_EX))  
    {  
        fclose($fh);  
        return false;  
    }  
  
    $userabort = ignore_user_abort("1");  
  
    ## Defaults für das Array  
  
    $_data = array();  
    $_data['time'] = array();  
    $_data['time'][$_SERVER['REMOTE_ADDR']]  = $time;  
    $_data['count'] = 1;  
    $_data['lastIP'] = $_SERVER['REMOTE_ADDR'];  
  
  
    $filesize = filesize($filename);  
  
    if ($filesize > 0)  
    {  
        $filedata = fread($fh, $filesize);  
  
        if (false === ($_data = unserialize($filedata))  
             or !isset($_data['time'], $_data['count'], $_data['lastIP']))  
        {  
            $_data = array();  
            $_data['time'] = array();  
            $_data['time'][$_SERVER['REMOTE_ADDR']]  = $time;  
            $_data['count'] = 1;  
            $_data['lastIP'] = $_SERVER['REMOTE_ADDR'];  
        }  
        else  
        {  
            ## Nur berücksichtigen, wenn die Requestor-IP noch  
            ## nicht in der Liste der letzten Requests steht  
  
            if (!isset($_data['time'][$_SERVER['REMOTE_ADDR']]))  
            {  
  
                ## IP in Liste eintragen  
  
                $_data['time'][$_SERVER['REMOTE_ADDR']] = $time;  
  
                ## nur zählen, wenn zwischendurch ein Request  
                ## von einer anderen IP eingetroffen ist  
  
                if ($_data['lastIP'] != $_SERVER['REMOTE_ADDR'])   #  
                {  
                    $_data['count']++;  
                }  
            }  
            elseif ($_data['time'][$_SERVER['REMOTE_ADDR']] + COUNTER_LOCKTIME < $time)  
            {  
                $_data['time'][$_SERVER['REMOTE_ADDR']] = $time;  
  
                if ($_data['lastIP'] != $_SERVER['REMOTE_ADDR'])  
                {  
                    $_data['count']++;  
                }  
            }  
            elseif ($retrigger)  
            {  
                $_data['time'][$_SERVER['REMOTE_ADDR']] = $time;  
            }  
            else  
            {  
                ## ignore visit  
            }  
  
            if ($clean)  
            {  
                foreach ($_data['time'] as $ip => $lasttime)  
                {  
                    if($time - $lasttime > COUNTER_LOCKTIME)  
                    {  
                        unset($_data['time'][$ip]);  
                    }  
                }  
            }  
        }  
    }  
  
    $useronline = count($_data['time']);  
    $filedata = serialize($_data);  
    fseek($fh, 0, SEEK_SET);  
    fwrite($fh, $filedata);  
    ftruncate($fh, strlen($filedata));  
    fclose($fh);  
  
    ignore_user_abort("$userabort");  
  
    $_result = array('visitors'=>$_data['count'], 'useronline'=>$useronline);  
  
    return $_result;  
  
}  
#------------------------------------------------------------------------------  
  
function writetext($text, $font)  
{  
    // content-type für das Bild setzen  
    header("Content-type: image/gif");  
  
    // Das leere Bild im Speicher erzeugen  
    $im = imagecreatetruecolor(200, 20);  
  
    // Ein paar Farben festlegen  
    $white = imagecolorallocate($im, 255, 255, 255);  
    $grey  = imagecolorallocate($im, 128, 128, 128);  
    $black = imagecolorallocate($im, 0, 0, 0  );  
    $blue  = imagecolorallocate($im, 0, 0, 255);  
    $red   = imagecolorallocate($im, 255, 0, 0);  
  
    // Das leere Bild mit rotem Hintertgrund füllen  
    imagefilledrectangle($im, 0, 0, 199, 19, $red);  
  
    // Das rote Bild innen weiß füllen  
    imagefilledrectangle($im, 1, 1, 198, 18, $white);  
  
    // Einen Schatten hinter den Text legen  
    imagettftext($im, 13, 0, 10, 17, $grey, $font, $text);  
  
    // Den Text ins Bild einsetzen  
    imagettftext($im, 13, 0, 9, 16, $blue, $font, $text);  
  
    // Das Bild ausgeben. imagegif() erzeugt einen schärferen Text als imagejpeg()  
    imagegif($im);  
    imagedestroy($im);  
}  
  
#==============================================================================  
# php main  
#==============================================================================  
  
  
$font = './ARIAL.TTF';  
#$font = 'C:/WINNT/Fonts/GLACIERN.TTF';  
  
  
if (false !== ($_result = visitcount($counterfile, time() )))  
{  
   $text = "Online:{$_result['useronline']}  Visits:{$_result['visitors']}";  
}  
else  
{  
   $text = "bitworks Deutschland";  
}  
  
if (!isset($_GET['noshow']))  
{  
    writetext($text, $font);  
}  
else  
{  
    header("Content-type: image/gif");  
    readfile('1pix.gif');  
}  
  
?>  
  
 </body>  
</html>