我必须写一个文件来增加一个值,但有时(当文件连续打开两次时)它只增加一个而不是两个。
这是连续执行两次的脚本的一部分:
include "changevar.php";//declare the changevar function
include $file;//get user's impressions
changevar("impressions",$impressions+1,$file,1);//increase the impressions by 1
这是changevar.php
文件:
<?
function changevar($varname,$newval,$filename,$type)
{
while(!$fp=fopen($filename,"c+"))
{
usleep(100000);
}
while(!flock($fp,LOCK_EX))
{
usleep(100000);
}
$contents=fread($fp,filesize($filename));
ftruncate($fp,0);
rewind($fp);
eval(substr(substr($contents,2),0,-2));
$$varname=$newval;
if($type==0)//avoid reading this, in this case $type equals to 1
{
$u=str_replace("\"","\\\"",$u);
$p=str_replace("\"","\\\"",$p);
$t=str_replace("\"","\\\"",$t);
$d=str_replace("\"","\\\"",$d);
$text="<?\$o=$o;\$u=\"$u\";\$c=$c;\$m=$m;\$p=\"$p\";\$C=$C;\$id=\"$id\";\$t=\"$t\";\$d=\"$d\";\$O=$O;?>";
}
else//true, $type equals to 1
{
$text="<?\$impressions=$impressions;\$clickunici=$clickunici;\$clicknulli=$clicknulli;\$creditiguadagnati=$creditiguadagnati;\$creditiacquistati=$creditiacquistati;\$creditiutilizzati=$creditiutilizzati;?>";
}
fwrite($fp,$text);
fflush($fp);
flock($fp,LOCK_UN);
fclose($fp);
}
?>
正如我刚才所说,脚本运行良好,除非它连续执行两次。
我认为问题出在$contents=fread($fp,filesize($filename));
,因为它在写入文件之前会读取文件。
我已经使用了该flock
功能,但它并没有解决这个问题。
那么,我该如何修复代码呢?