簡體   English   中英

PHP的計數器問題

[英]PHP hit counter issue

我有3個php頁面。

Counter.php-我希望此文件顯示Counter 2,Counter 3獲得多少點擊。

<!DOCTYPE html>
<html>
  <head>
    <title>Counter</title>
  </head>
  <body>
    You visited page Counter2
    <?php include 'Counter2.php'; echo $Counter; ?>
    Times.
    You visited page Counter3
    <?php  include 'Counter3.php'; echo $Counter3; ?>
    Times.
  </body>
</html>

Counter2.php-我想計算此頁面的點擊量。

<?php

  session_start();

  if(isset($_SESSION["counter"]))
  {
    $counter = $_SESSION["counter"];
  }
  else
  {
     $counter = 0;
  }
  $_SESSION["counter"] = $counter + 1;

?>

<!DOCTYPE html>
<html>
  <head>
    <title>Counter</title>
  </head>
  <body>
    <?= $counter ?>     
  </body>
</html>

Counter3.php-我想計算此頁面的點擊量。

<?php

  session_start();

  if(isset($_SESSION["counter3"]))
  {
    $counter3 = $_SESSION["counter3"];
  }
  else
  {
    $counter3 = 0;
  }

  $_SESSION["counter3"] = $counter3 + 1;

?>

<!DOCTYPE html>
<html>
  <head>
    <title>Counter</title>
  </head>
  <body>
  You visted this page this many times:
  <?= $counter3 ?>
  </body>
</html>

現在,一切正常,但是,當我包含php文件時, <?php include 'Counter3.php'; echo $Counter3; ?> <?php include 'Counter3.php'; echo $Counter3; ?> <?php include 'Counter3.php'; echo $Counter3; ?>記錄點擊的繼續增大,當我加載Counter.php文件的數量。 我不想要它,我只想Counter.php記錄Counter2和Counter3的點擊次數。 並停止Counter.php增加點擊次數。

您可以使用$_SERVER['REQUEST_URI']向counter2.php和counter3.php添加一個額外的if,如果$_SERVER['REQUEST_URI']指向counter.php,則可以跳過增加計數器的操作

包含頁面會使代碼運行,因此它將增加頁面中的所有計數器。 而是直接使用$_SESSION[]變量。

<?php
  session_start()
?>
<!DOCTYPE html>
<html>
<head>
<title>Counter</title>
</head>
<body>
You visited page Counter2 <?php  echo $_SESSION["counter2"]; ?> Times.
You visited page Counter3 <?php  echo $_SESSION["counter3"]; ?> Times.
</body>
</html>

另外,在PHP中,您可以執行以下操作:

$_SESSION["counter3"] = isset($_SESSION["counter3"]) ? $_SESSION["counter3"] : 0;
//$_SESSION["counter3"] = $_SESSION["counter3"] ?? 0; // only in PHP 7

另外,您不必在每個頁面上都創建此代碼,因為從長遠來看,它可能會變得凌亂。

<?php #counter.php
  if(session_status() == PHP_SESSION_NONE){
    session_start();
  }

  if(isset($_SESSION['counter'][$_SEVER['REQUEST_URI']])){
    $_SESSION['counter'][$_SERVER['REQUEST_URI']] = $_SESSION['counter'][$_SEVER['REQUEST_URI']] + 1
  } else {
    $_SESSION['counter'][$_SERVER['REQUEST_URI']] = 1;
  }

  function countpagetimes(){
    return $_SESSION['counter'][$_SERVER['REQUEST_URI']];
  }
?>

<?php #somepage.php
  include 'counter.php';

  echo 'You visited this page ' . countpagetimes() . ' times'.

?>

有幾個選項可以解決此問題:

  1. 將兩個值都保存在數據庫中,並通過counter.php訪問這些值,而不是包括文件
  2. 使用$_SERVER['REQUEST_URI']讓計數器僅在URI不包含counter.php時遞增。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM