【发布时间】:2013-05-23 10:26:11
【问题描述】:
我在使用 PHP flock() 函数时遇到问题。我需要编写两个不同的变量($O 和 $o),但通常它不会写入第二个变量($o),可能是因为该文件连续写入两次。
代码如下:
include_once "changevar.php";
changevar("O",$seguimedia,$filename,0);
changevar("o",$offerta,$filename,0);
$seguimedia、$filename 和 $offerta 设置正确。
changevar.php:
function changevar($varname,$newval,$filename,$type)
{
while(!$fp=fopen($filename,"c+"))
{
usleep(100000);
}
while(!flock($fp,LOCK_EX))
{
usleep(100000);
}
while(!include($filename))
{
usleep(100000);
}
ftruncate($fp,0);
rewind($fp);
$$varname=$newval;
if($type==0)
{
foreach(array("u","p","t","d") as $v){$$v=str_replace("\\","\\\\",$$v);}
$text="<?\$o=$o;\$u=\"$u\";\$c=$c;\$m=$m;\$p=\"$p\";\$C=$C;\$id=\"$id\";\$t=\"$t\";\$d=\"$d\";\$O=$O;?>";
}
else
{
$text="<?\$impressions=$impressions;\$clickunici=$clickunici;\$clicknulli=$clicknulli;\$creditiguadagnati=$creditiguadagnati;\$creditiacquistati=$creditiacquistati;\$creditiutilizzati=$creditiutilizzati;?>";
}
fwrite($fp,$text);
flock($fp,LOCK_UN);
fclose($fp);
}
PHP flock() 是避免此类问题的好方法吗?
我需要使用哪种语言/功能?
【问题讨论】:
-
我不知道您的目标是什么,但是编写和重新读取 php 文件并不是一个好的解决方案,不仅因为大量的 i/o 流量。可能有更快更好的解决方案,memcache、sqlite、mongodb,甚至ini/csv文件都更好处理