1
카운터에 문제가 있습니다. |로 분리 된 두 변수를 계산해야하지만 때로는 카운터가 변수의 값을 증가시키지 않습니다.flock()을 사용한 PHP 카운터 문제
numeri.txt (카운터) : 나는 올바른 값으로 카운터를 설정
$filename="numeri.txt";
$fp=fopen($filename,"r");
if(!flock($fp,LOCK_SH))
{
while(true)
{
usleep(100000);
if(flock($fp,LOCK_SH))
{
break;
}
}
}
$contents=fread($fp,filesize($filename));
flock($fp,LOCK_UN);
fclose($fp);
$fp=fopen($filename,'a');
if(!flock($fp,LOCK_EX))
{
while(true)
{
usleep(100000);
if(flock($fp,LOCK_EX))
{
break;
}
}
}
ftruncate($fp,0);
$contents=explode("|",$contents);
$clicks=$contents[0];
$impressions=$contents[1]+1;
fwrite($fp,$clicks."|".$impressions);
flock($fp,LOCK_UN);
fclose($fp);
하지만 3-4 후 일 카운터 :
5240|593389
이것은 PHP 스크립트입니다 약 50 회의 노출 수를 계산하지 않았습니다 ("|"뒤에 오는 숫자)
코드 수정 방법은 무엇입니까?
fopen과 flock 모두에서 usleep() 함수를 사용해야합니까? – Megadv
둘 다 실패 할 수 있으므로 예. 이상적으로는 카운터가 반복적으로 멈추는 것이 좋습니다. – Robbie
나는 그것을했다. 그러나 지금, 8 시간 후에 그것은 2 개의 가치를 더 센다. 왜? – Megadv