function genTokenNo()
{
static $i=0;
$i=$i+1;
return str_pad($i, 5, '0', STR_PAD_LEFT);
}
当我在其他文件中调用此函数时,函数不会返回唯一值(递增值)。此外,当我在同一个文件(函数的位置)中回显此函数时,它工作正常。 我知道静态变量范围的概念,因为我已经尝试过将$ i替换为$ _SESSION [' i'],但没有预期的结果。 提前谢谢。
答案 0 :(得分:2)
请注意,$i
的值不会保留。因此,无论何时向服务器运行新请求,都会重新加载脚本并将$i
重置为0
。
要在每个用户的会话中保留变量,请使用$SESSION['i']
,但正如您已经尝试过的,每个会话都是唯一的,而不是全局的。
要使用fopen
/ flock
/ fread
/ fwrite
/ fclose
函数,您需要在磁盘上存储全球唯一编号。
答案 1 :(得分:0)
对于单个请求,它应该可以正常工作 -
function genTokenNo()
{
static $i=0;
$i=$i+1;
return str_pad($i, 5, '0', STR_PAD_LEFT);
}
echo genTokenNo() . ' - ' . genTokenNo() . ' - ' . genTokenNo();
<强>输出强>
00001 - 00002 - 00003
但是如果您多次请求,则每次请求都会重置该值,并且每次响应都相同。我建议将值存储在数据库或某个文件中。在这种情况下使用seesion
wolud不可靠。
答案 2 :(得分:0)
您的结构如下所示:
<强> file1.php 强>
function genTokenNo()
{
static $i=0;
$i=$i+1;
return str_pad($i, 5, '0', STR_PAD_LEFT);
}
<强> file2.php 强>
include('file1.php');
//^^^^^^^^^^^^^^^^^^^ Include file before call that function.
echo genTokenNo(); //00001
echo "<br />";
echo genTokenNo(); //00002
echo "<br />";
echo genTokenNo(); //00003
echo "<br />";
echo genTokenNo(); //00004
答案 3 :(得分:0)
<强> file1.php 强>
<?php
function genTokenNo()
{
static $i=0;
$i=$i+1;
return str_pad($i, 5, '0', STR_PAD_LEFT);
}
?>
<强> file2.php 强>
<?php
include('file1.php');
$sql = "INSERT INTO table SET TokenNo='".genTokenNo()."' ";
mysql_query($sql);
?>
答案 4 :(得分:-1)
当函数存在时,则丢失静态变量的值
if(isset($_SESSION['i']))
$_SESSION['i']++;
else
$_SESSION['i']=0;