我正在测试一个php练习,但我无法使它正常工作。它是一个计数器,将访问量作为一个简单的整数存储在txt文件中。每次我重新加载页面时,数字都会变成+1。
现在,我希望它只在有新访问时重新加载,所以我第一次尝试sesion_start()。
在课堂上,这个例子运行得很好,但当我试图在家里复制它时,即使我关闭浏览器并再次打开它,数字也不会改变。
这是我的代码(它自然在php标签中):
session_start();
if (!$_SESSION[contador]) {
define('ARCHIVO', 'visitas.txt');
if (file_exists(ARCHIVO)) {
$fp=fopen(ARCHIVO, 'r');
$cant=fread($fp,filesize(ARCHIVO));
fclose($fp);
} else {
$cant=0;
}
$cant++;
$fp=fopen(ARCHIVO, 'w');
fwrite($fp, $cant);
fclose($fp);
$_SESSION[contador]=$cant;
}
echo '<h3>Hay '.$_SESSION[contador].' visitas.</h3>';
contador应该用引号括起来,除非它是某个地方定义的常量??我想是字符串
$_SESSION["contador"]
试试这个。这是不同的,但它至少会有所帮助。本想作为评论发布,但我想要代码格式。
session_start();
if(empty($_SESSION['contador'])){
$_SESSION['contador']=1;
}else{
$_SESSION['contador']++;
}
echo '<h3>Hay '.$_SESSION['contador'].' visitas.</h3>';
首先,@Lenny是正确的$_SESSION['contactor']是所谓的会话变量或分配给$_SESSION数组的变量。所以它必须在引号中。这不是可有可无的。并且不能定义一个常量并在括号内使用该值。
如果您有一个常量,您可以将会话变量设置为该常量。但是,由于您的值是可变的,当您增量添加时,根据定义,它不是恒定的。
此外,刷新您的Web浏览器将使您的会话保持活动状态。因此,如果您真的想测试这一点,请尝试session_destroy();在某个时刻。
以下是该代码的工作方式(无论如何,会话变量的存储):
<?php
session_start();
if(!isset($_SESSION['contador'])) {
define('ARCHIVO', 'visitas.txt');
if(file_exists(ARCHIVO)) {
$fp = fopen(ARCHIVO, 'r');
$cant = fread($fp,filesize(ARCHIVO));
fclose($fp);
} else {
$cant=0;
}
$cant++;
$fp = fopen(ARCHIVO, 'w');
fwrite($fp, $cant);
fclose($fp);
$_SESSION['contador'] = $cant;
}
echo '<h3>Hay ' . $_SESSION['contador'] . ' visitas.</h3>';
?>
注意:你的逻辑不好。您告诉脚本$cant等于txt文件的值,或者等于0。那么你的价值就增加了一。您将在每次加载时执行该任务。您需要修改此代码并完成条件语句。
<?php
session_start();
if(!isset($_SESSION['contador'])) {
define('ARCHIVO', 'visitas.txt');
if(file_exists(ARCHIVO)) {
$fp = fopen(ARCHIVO, 'r');
$cant = fread($fp,filesize(ARCHIVO));
fclose($fp);
} else {
$cant=0;
}
$cant++;
$fp = fopen(ARCHIVO, 'w');
fwrite($fp, $cant);
fclose($fp);
$_SESSION['contador'] = $cant;
} else {
$_SESSION['contador']++;
}
echo '<h3>Hay ' . $_SESSION['contador'] . ' visitas.</h3>';
?>
我希望这能有所帮助。