1000个进程同时利用file_put_contents的追加FILE_APPEND模式,不会出现写入的数据被覆盖?
<?php
// fork出1000个进程查询,内存大,cpu屌,1000个进程怎么了?
// 我买个CPU不就是为的用它么,你省着干什么?
for ( i = 1 ; i <= 1000; i++ ) {
pid = fork();
// 在子进程里查询
if ( 0 == pid ) {
ret = get_dizhi_by_phone( '手机号' );
// 查询出来后,记录到data.log文件里
file_put_contents( 'data.log', ret, FILE_APPEND );
exit;
}
}
考虑到 “多进程写入同一文件可能会导致数据覆盖” 可能会导致上亿的损失,我决定认真对待一下这个问题,于是我写了下面的代码测试了一波儿:
复制代码
<?php
for ( $i = 1; $i <= 30; $i++ ) {
$pid = pcntl_fork();
if ( 0 == $pid ) {
$my_pid = posix_getpid();
for ( $counter = 1; $counter <= 10000; $counter++ ) {
file_put_contents( "./api.log", "record\r\n", FILE_APPEND );
//file_put_contents( "./api.log", date( 'Y-m-d H:i:s' ).' : '.$str."\r\n", FILE_APPEND|LOCK_EX );
}
exit;
}
}
顺带给看不懂代码的萌新说明一下