如何使用php方法分隔和设置计数器数字?

时间:2013-09-07 14:53:42

标签: php hitcounter

我正在使用此PHP代码来获取并显示我网站的访问者数量(点击计数器)。 目前它被设置为在一个块中显示该数字,即 - 我想在其自己的html标签中显示每个数字,以便以不同方式设置每个数字的样式。

我在$ allHits var上尝试过explode和substr,但是没有得到好的结果。 任何想法?

<?

/*----------------------------

-------- ++ simPHP ++ --------
A simple PHP hit counter.

Description:
   simPHP counts both regular and unique views on multiple
   webpages. The stats can be displayed on any PHP-enabled
   webpage. You MUST have read/write permissions on files.

Script by Ajay: ajay@scyberia.org
http://scyberia.org

----------------------------*/



/*----------CONFIG----------*/

// NOTE: If you change any config after using simphp,
// remove the old files.

// Relative URL of text file that holds hit info:
$lf_name = "hits.txt";

// Save new log file each month
//   0 = No
//   1 = Yes
$monthly = 1;

// Path to store old files:
// Default for June, 2012:
//   oldfiles/6-12.txt
$monthly_path = "oldfiles";

// Count unique hits or all hits:
//   0 = All hits
//   1 = Unique hits
//   2 = Both
$type = 2;

// Text to display
// before all hits.
$beforeAllText = "Site Visitors: ";

// Before unique hits.
$beforeUniqueText = "Unique Visits: ";

// Display hits on this page:
//   0 = No
//   1 = Yes
$display = 1;

// Only change this if you are recording both values.
// Separator for unique and all hits display - use HTML tags! (line break is default)
$separator = "<br \>";

// Default would output:
//   Visits: 10
//   Unique Visits: 10
/*--------------------------*/






/*--------BEGIN CODE--------*/

$log_file = dirname(__FILE__) . '/' . $lf_name;

//Check for "?display=true" in URL.
if ($_GET['display'] == "true") {
    //Show include() info.
    die("<pre>&#60;? include(\"" . dirname(__FILE__) . '/' . basename(__FILE__) . "\"); ?&#62;</pre>");
} else {
    //Visit or IP.
    $uIP = $_SERVER['REMOTE_ADDR'];

    //Check for "hits.txt" file.
    if (file_exists($log_file)) {
        //Check if today is first day of month
        if (date('j') == 10) {
            //Ensure that monthly dir exists
            if (!file_exists($monthly_path)) {
                mkdir($monthly_path);
            }

            //Check if prev month log file exists already
            $prev_name = $monthly_path . '/' . date("n-Y", strtotime("-1 month"));
            if (!file_exists($prev_name)) {
                //If not, move/rename current file
                copy($log_file, $prev_name);

                //Create new $toWrite based on CONFIG
                //Write file according to CONFIG above.
                if ($type == 0) {
                    $toWrite = "1";
                    $info = $beforeAllText . "1";
                } else if ($type == 1) {
                    $toWrite = "1;" . $uIP . ",";
                    $info = $beforeUniqueText . "1";
                } else if ($type == 2) {
                    $toWrite = "1;1;" . $uIP . ",";
                    $info = $beforeAllText . "1" . $separator . $beforeUniqueText . "1";
                }
                goto write_logfile;
            }
        } 

        //Get contents of "hits.txt" file.
        $log = file_get_contents($log_file);

        //Get type from CONFIG above.
        if ($type == 0) {

            //Create info to write to log file and info to show.
            $toWrite = intval($log) + 1;
            $info = $beforeAllText . $toWrite;

        } else if ($type == 1) {

            //Separate log file into hits and IPs.
            $hits = reset(explode(";", $log));
            $IPs = end(explode(";", $log));
            $IPArray = explode(",", $IPs);

            //Check for visitor IP in list of IPs.
            if (array_search($uIP, $IPArray, true) === false) {
                //If doesnt' exist increase hits and include IP.
                $hits = intval($hits) + 1;
                $toWrite = $hits . ";" . $IPs . $uIP . ",";
            } else {
                //Otherwise nothing.
                $toWrite = $log;
            }
            //Info to show.
            $info = $beforeUniqueText . $hits;

        } else if ($type == 2) {

            //Position of separators.
            $c1Pos = strpos($log, ";");
            $c2Pos = strrpos($log, ";");

            //Separate log file into regular hits, unique hits, and IPs.
            $pieces = explode(";", $log);
            $allHits = $pieces[0];
            $uniqueHits = $pieces[1];
            $IPs = $pieces[2];
            $IPArray = explode(",", $IPs);

            //Increase regular hits.
            $allHits = intval($allHits) + 1;

            //Search for visitor IP in list of IPs.
            if (array_search($uIP, $IPArray, true) === false) {
                //Increase ONLY unique hits and append IP.
                $uniqueHits = intval($uniqueHits) + 1;
                $toWrite = $allHits . ";" . $uniqueHits . ";" . $IPs . $uIP . ",";
            } else {
                //Else just include regular hits.
                $toWrite = $allHits . ";" . $uniqueHits . ";" . $IPs;
            }
            //Info to show.
            $info = $beforeAllText . $allHits . $separator . $beforeUniqueText . $uniqueHits;
        }
    } else {
        //If "hits.txt" doesn't exist, create it.
        $fp = fopen($log_file ,"w");
        fclose($fp);

        //Write file according to CONFIG above.
        if ($type == 0) {
            $toWrite = "1";
            $info = $beforeAllText . "1";
        } else if ($type == 1) {
            $toWrite = "1;" . $uIP . ",";
            $info = $beforeUniqueText . "1";
        } else if ($type == 2) {
            $toWrite = "1;1;" . $uIP . ",";
            $info = $beforeAllText . "1" . $separator . $beforeUniqueText . "1";
        }
    }

    write_logfile:
    //Put $toWrite in log file
    file_put_contents($log_file, $toWrite);

    //Display info if is set in CONFIG.
    if ($display == 1) {

    }
}

使用foreach循环工作,如下所示:

$array_allHits = explode(" ",$allHits);
foreach ($array_allHits as $display_digits) {
        echo $display_digits[0];

}

2 个答案:

答案 0 :(得分:0)

你可以使用for循环。

for ($i = 0; $i < strlen((string) $allHits); $i++) {
    echo '<span>' . $allHits[$i] . '</span>';
}

以上代码将为点击计数中的每个数字输出<span>{number}</span>。 它将循环遍历字符串中的每个字符,类似于如何处理数组索引。

答案 1 :(得分:0)

$totalHits = 125655;
foreach(str_split((string)$totalHits) as $key => $val) {
    echo "<span class='position_{$key}'>{$val}</span>";
}

在你的css中添加样式如下:

.position_0 {
    color: red;
}
.position_1 {
    color: blue;
}
.position_2 {
    color: yellow;
}