Php 每次调用或打开页面时的增量变量?

Php 每次调用或打开页面时的增量变量?,php,html,Php,Html,PHP文件 <!doctype html> <html> <head> <title>Index</title> </head> <form action="newquestion.php" method="post"> Question <input type="text" name="question"> <input type="submit"> </form> <

PHP文件

<!doctype html>
<html>
<head>
<title>Index</title>
</head>
<form action="newquestion.php" method="post">
Question <input type="text" name="question">
<input type="submit">
</form>
<body>
</body>
</html>
我是PHP新手。每次调用newquestion.php时,这不会使$q增加1吗?如果不是,如何在每次调用或打开此pagenewquestion.php时递增此变量?

否,因为每次调用该页面时$q重置为1。您需要某种持久性策略数据库、写入文本文件等,以便跟踪页面视图

将此功能整合到一个类中也是一个好主意,这个类可以跨代码库使用。例如:

<?php

static $q = 1;

echo $q;

$q++;

?>
然后在newquestion.php中

class VisiterCounter {

    public static function incrementPageVisits($page){

        /*! 
         * Beyond the scope of this question, but would
         * probably involve updating a DB table or
         * writing to a text file
         */
        echo "incrementing count for ", $page;
    }

}
或者,如果您的前端控制器处理web应用程序中的所有请求:

VisiterCounter::incrementPageVisits('newquestion.php');

它不会像你想的那样工作。PHP代码每次从开始到结束都会执行,这意味着从一次运行到下一次运行都不会保留任何变量

为了解决这个问题,您可以使用会话变量这是一种特殊类型的变量,它将在其中保留一个值,您可以为站点的每个访问者保留该值。但是,这将对每位访客单独起作用


如果你想增加所有用户的值,你打开第一个,它显示为1,我打开第二个,它显示为2,依此类推,你需要将其存储在数据库中,好的选项,将其写入文本文件不是一个很好的选择,也不是一种保存它的其他方法。

将$q初始化放在任何初始页面中,然后增加值。

加载此页面时,页面中的每个php脚本都会执行。所以每次脚本被逐行执行时。您无法按正在尝试的进程计算页面加载数

您可以执行以下过程之一:

1您可以将其保存到数据库中,每次加载时都可以执行查询以增加计数值。 2您可以按如下方式进行会话:

VisiterCounter::incrementPageVisits($_SERVER['REQUEST_URI']);

或者在会话中增加变量。这样,您至少可以看到一个用户调用页面的频率。

简单的方法是使用会话或基于COOKIE的持久性方法

使用会话示例:

在首选页面的第一行中输入以下代码:

会议开始

检查此用户的会话是否已创建和记录,如果已创建和记录,则将q会话变量的值增加一个,并显示它

如果不是,则使用值1初始化q会话变量,存储并显示

session_start();
if(isset($_SESSION['view']))
{
 $_SESSION['view']=$_SESSION['view']+1;
}
else
{
 $_SESSION['view']=1;
}
使用COOKIE示例:

对于COOKIE,您不能使用$_COOKIE[index]=value来设置COOKIE的值,您必须使用setcookie$_COOKIE[索引]仅用于读取COOKIE值(如果存在)

会话仍然使用cookie,但仅用于标识该用户是该会话的所有者,只有在您提供一种方法让用户这样做的情况下,用户才能直接更改会话的值

使用COOKIE,用户将看到一个名为q的COOKIE及其值,并且可以通过简单的javascript代码、浏览器工具(如Google Chrome Developer Console工具)或任何浏览器扩展来轻松更改值编辑此COOKIE,这是一个Google Chrome扩展,列出网页的所有COOKIE、值和参数

请记住,任何session_start调用每个页面只需要一个,或者setcookie调用必须在任何缓冲区输出之前进行,例如,而不仅仅是echo、print。因为这两个调用都会生成HTTP头集Cookie,并且HTTP头必须在内容体之前发送,所以在缓冲区刷新后调用此方法将引发异常


上面的两个示例是每用户计数。如果需要按应用程序或每页计数,则必须实现自定义计数器系统,使用文件系统将数据存储在页面浏览/页面请求中,或使用数据库跟踪个人请求,包括日期、ip地址、页面url、页面名称、,其他任何内容。

代码的问题是,每次访问页面时,首先将变量设置为1。您必须使用$\u会话。但是,使用会话变量的问题是,如果您试图从不同的PC或不同的系统增加变量的值,会话将无法工作。为此,最好是在数据库中插入值。

您需要将计数器存储在PHP脚本之外。如果您想记住诸如页面浏览量之类的内容,则每次调用页面时都需要将$q存储到数据库或简单文件中。。
 if(!isset($_SESSION["q"]) //check if the array index "q" exists
   $_SESSION["q"] = 1; //index "q" dosen't exists, so create it with inital value (in this case: 1)
 else 
   $_SESSION["q"]++; //index "q" exists, so increment in one its value.

 $q = $_SESSION["q"]; //here you have the final value of "q" already incremented or with default value 1.
 //doSomethingWith($q);
$q = 0; //Initialize variable q with value 0
if(isset($_COOKIE["q"])) //check if the cookie "q" exists
   $q = $_COOKIE["q"]; //if so, override the q value 0 with the value in the cookie
$q++; //increment in one the q value.
setcookie("q",$q); //send a HTTP response header to the browser saving the cookie with new value

//doSomethingWith($q);
//here you have the final value of "q" already incremented or with value 1 like in session.