0

ページにヒット カウンターを配置しました。テキスト ファイルを読み取り、ファイル内の数値をインクリメントし、ページの後半で、インクリメントされた値を出力します。

$hitsFile   = "hits/exps/stats.txt";
$hits       = file($hitsFile);
$hits[0]++;
$fp = fopen($hitsFile , "w");
flock($fh, LOCK_EX);
fwrite($fp , $hits[0]);
fclose($fp);

私の問題は、ページをリロードすると、コードがヒット数を増やしてしまうことです。私はそれをしたくありません。セッションを使用してそれを修正することを考えましたが、セッションを使用すると、ヒットを再度増やすために、サイトを終了して再度アクセスする必要があります。私もそれはしたくない。

ページをリロードしたときではなく、ページに再度アクセスしたときにインクリメントしたい。

たとえば、ホームと連絡先の 2 ページの Web サイトがあり、連絡先ページにヒット カウンターがあるとします。連絡先ページをリロード (更新) した場合にヒット カウンターを増やしたくありませんが、連絡先ページを離れてホームページにアクセスし、後で連絡先ページに再度アクセスした場合は、増加させたいと思います。

要するに、ページのリロード時に増加させたくありません。それを行う方法はありますか?

4

4 に答える 4

2

各ページで、セッションにページ名を書き込む必要があります。
次のようにします。

$_SESSION['page'] = 'contact';

ヒット数をカウントする必要があるページでは、このセッション キーを確認する必要があります。
たとえば、「連絡先」ページにいた場合、$_SESSION['page'] == 'contact'.
「ホームページ」にアクセスすると、次のようになります。

$page = $_SESSION['page'];
if($page != 'homepage')
{
    //increment your hits counter
    $_SESSION['page'] = 'homepage';
}
于 2014-08-09T19:31:28.777 に答える
1

私はこの方法を提案します、私の好みです、ルートにこれらのフォルダーを作成します:cntlog ...次に、cntフォルダー内に次のファイルcnt.phpを入れてshowcnt.php...

cnt.php

<?php
  ##############################################################################
  # Php Counter With Advanced Technology For The Prevention Of Reloading Pages #
  # Version: 1.4 - Date: 13.11.2014 - Created By Alessandro Marinuzzi [Alecos] #
  ##############################################################################
  function cnt($file) {
    session_start();
    global $pagecnt;
    $reloaded = isset($_SERVER['HTTP_CACHE_CONTROL']) && $_SERVER['HTTP_CACHE_CONTROL'] === 'max-age=0';
    $thispage = basename($_SERVER['SCRIPT_FILENAME']);
    if (!isset($_SESSION['first_go'])) {
      $_SESSION['first_go'] = 1;
      $first_go = TRUE;
    } else {
      $first_go = FALSE;
    }
    if (!isset($_SESSION['thispage'])) {
      $_SESSION['thispage'] = $thispage;
    }
    if ($_SESSION['thispage'] != $thispage) {
      $_SESSION['thispage'] = $thispage;
      $new_page = TRUE;
    } else {
      $new_page = FALSE;
    }
    $pagecnt = rtrim(file_get_contents($file));
    if ((!$reloaded) && ($new_page == TRUE) || ($first_go == TRUE)) {
      $fd = fopen($file, 'w+');
      flock($fd, LOCK_EX);
      fwrite($fd, ++$pagecnt);
      flock($fd, LOCK_UN);
      fclose($fd);
    }
  }
?>

showcnt.php

<?php
  ##############################################################################
  # Show Counter Results - v.1.4 - 13.11.2014 By Alessandro Marinuzzi [Alecos] #
  ##############################################################################
  function gfxcnt($file) {
    global $number;
    $number = rtrim(file_get_contents($file));
    $lenght = strlen($number);
    $gfxcnt = "";
    for ($i = 0; $i < $lenght; $i++) {
      $gfxcnt .= $number[$i];
    }
    $gfxind = "<span class=\"counter\"><span class=\"number\">$gfxcnt</span></span>";
    echo $gfxind;
  }
?>

それでは、index.php または他の php ページを編集して、最初に次のコードを挿入します。

<?php session_start(); include("cnt/cnt.php"); cnt("log/index.txt"); include("cnt/showcnt.php"); ?>

それでは、index.php またはその他の php ページを編集し、次のコードを使用してカウンター ファイルを読み取ります。

<?php gfxcnt("log/index.txt"); ?>

それだけです。私の答えがお役に立てば幸いです:)私のカウンターは複数のphpページを読み書きできます...

ソース: 私のブログ ( https://www.alecos.it/new/101/101.php )

于 2015-03-17T10:23:35.410 に答える
0
  1. 現在の URL が に保存されていない場合にのみ、ヒット カウントを更新します$_SESSION['url']
  2. ヒット カウントを更新したら、現在の URL を に保存します$_SESSION['url']
于 2014-08-09T19:30:54.153 に答える
0

先頭に追加session_start();します。

if を次のように変更します。

if (!isset($_SESSION['lastpage']) || $_SESSION['lastpage'] != $_SERVER['QUERY_STRING') {
   $hits[0]++;
}

$_SESSION['lastpage'] = $_SERVER['QUERY_STRING'];

これにより、カウンターをインクリメントしたい場合、基本的に誰かが別のページに移動するように強制されます。

于 2014-08-09T19:31:09.720 に答える