Php Don';你有时不能处理并发的问题吗?

Php Don';你有时不能处理并发的问题吗?,php,linux,Php,Linux,我的密码是: $b_data_proxy = $dn." ".$cv." ".$dom_name." ".$record_ttl." ".substr($now,0,strlen($now)-1).$more_ip_address;<br> $b_ftemp = fopen("$fdoc_spool/temp_b", 'a+');<br> fwrite($b_ftemp, $b

我的密码是:

$b_data_proxy = $dn." ".$cv." ".$dom_name." ".$record_ttl." ".substr($now,0,strlen($now)-1).$more_ip_address;<br>
                        $b_ftemp = fopen("$fdoc_spool/temp_b", 'a+');<br>
                        fwrite($b_ftemp, $b_data_proxy."\n");<br>
                        fclose($b_ftemp);
$b_data_proxy=$dn.“$cv.”$dom_name.“$record_ttl.”。substr($now,0,strlen($now)-1)。$more_ip_address
$b_ftemp=fopen($fdoc_spool/temp_b“,'a+)
fwrite($b_ftemp,$b_data_proxy.\n”)
fclose($b_ftemp);
如您所见,当一个用户访问页面时,这是正确的。 但是两个用户同时访问该页面。他们将撰写 temp_b的相同文件。我不想使用不同的临时名称

$b_data_proxy = $dn." ".$cv." ".$dom_name." ".$record_ttl." ".substr($now,0,strlen($now)-1).$more_ip_address;<br>
                        $b_ftemp = fopen("$fdoc_spool/temp_b", 'a+');<br>
                        fwrite($b_ftemp, $b_data_proxy."\n");<br>
                        fclose($b_ftemp);
这可能是个问题,他们会在同一时间写同一个文件。 但是$b_数据_代理的大小小于4kB。 所以我想知道我是否应该处理这个并发事件? 因为大小小于4KB

$b_data_proxy = $dn." ".$cv." ".$dom_name." ".$record_ttl." ".substr($now,0,strlen($now)-1).$more_ip_address;<br>
                        $b_ftemp = fopen("$fdoc_spool/temp_b", 'a+');<br>
                        fwrite($b_ftemp, $b_data_proxy."\n");<br>
                        fclose($b_ftemp);
我的系统信息: Linux YF-2321 2.6.18-194.el5#1 SMP 4月2日星期五14:58:14美国东部夏令时2010年x86_64 x86_64 x86_64 GNU/Linux

$b_data_proxy = $dn." ".$cv." ".$dom_name." ".$record_ttl." ".substr($now,0,strlen($now)-1).$more_ip_address;<br>
                        $b_ftemp = fopen("$fdoc_spool/temp_b", 'a+');<br>
                        fwrite($b_ftemp, $b_data_proxy."\n");<br>
                        fclose($b_ftemp);

谢谢。

如果您担心他们同时写入同一文件,那么只需使用每个用户独有的临时文件进行写入即可。然后删除主文件并将临时文件重命名为主文件的名称。最后一个移动文件的人将始终获胜。使用此方法,您的文件将永远不会处于损坏状态,并且您不必使用文件锁定/并发技术。

使用memcache之类的工具锁定文件或使用数据库

$b_data_proxy = $dn." ".$cv." ".$dom_name." ".$record_ttl." ".substr($now,0,strlen($now)-1).$more_ip_address;<br>
                        $b_ftemp = fopen("$fdoc_spool/temp_b", 'a+');<br>
                        fwrite($b_ftemp, $b_data_proxy."\n");<br>
                        fclose($b_ftemp);
if( file_not_locked )


    //create lock
    //open file 
    //do stuff
    //close file
    //free lock

使用不同的访问文件可能最有意义:$fdoc_spool.'/temp_b_..uniqid()谢谢,实际上我将信息存储在同一个文件中。因此文件名不能不同。谢谢。如果我锁定了文件,就会有竞争条件。那么如何处理它呢?解除锁定可能会让一些用户等待很长时间。谢谢。不同的名字是一个好方法。我想知道4kB是一个安全的大小,linux内核可以保护这个写操作不受其他进程的影响。移动操作将始终以该名称生成一个完整的文件,因为您首先要用唯一的名称写入临时文件。