>  기사  >  백엔드 개발  >  동시에 동일한 파일에 쓰는 여러 프로세스를 구현하는 PHP용 두 가지 솔루션 공유

동시에 동일한 파일에 쓰는 여러 프로세스를 구현하는 PHP용 두 가지 솔루션 공유

黄舟
黄舟원래의
2017-03-30 09:54:263387검색

테스트 포인트: 함수 이해

fopen: 파일 열기 또는 URL

参数1:文件地址或者URL  
参数2:mode 参数指定了所要求到该流的访问类型  
    'r' 只读方式打开,将文件指针指向文件头。  
    'r+'    读写方式打开,将文件指针指向文件头。  
    'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。  
    'w+'    读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。  
    'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。  
    'a+'    读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

fwrite: 파일 쓰기

参数1:文件名文件系统指针  
参数2: 要写入的内容 string类型  
返回值: 写入成功返回写入的字符数,失败返回false

flock: 경량 권고 파일 잠금

参数1:文件系统指针,是典型地由 fopen() 创建的 resource(资源)。  
参数2:模式  
    LOCK_SH取得共享锁定(读取的程序)。  
    LOCK_EX 取得独占锁定(写入的程序。  
    LOCK_UN 释放锁定(无论共享或独占)。  
    如果不希望 flock() 在锁定时堵塞,则是 LOCK_NB(Windows 上还不支持)。  
  
返回值:成功时返回 TRUE, 或者在失败时返回 FALSE。

fclose: 열린 파일 포인터 닫기

参数1:文件名  
参数2:成功时返回 TRUE, 或者在失败时返回 FALSE。

옵션 1

function writeData($filepath, $data)   
{   
    $fp = fopen($filepath,'a');    
    do{   
        usleep(100);   
    }while (!flock($fp, LOCK_EX));  //LOCK_EX 取得独占锁定(写入的程序)进行排它型锁定 获取锁 有锁就写入,没锁就得  
    $res = fwrite($fp, $data."\n");   
    flock($fp, LOCK_UN);    //LOCK_UN 释放锁定(无论共享或独占)。  
    fclose($fp);    
    return $res;   
}

옵션 2(직접 표시하는 방법)

function write_file($filename, $content)  
{  
    $lock = $filename . '.lck';  
    $write_length = 0;  
    while(true) {  
        if( file_exists($lock) ) {  
            usleep(100);  
        } else {  
            touch($lock);  
            $write_length = file_put_contents($filename, $content, FILE_APPEND);  
            break;  
        }  
    }  
    if( file_exists($lock) ) {  
        unlink($lock);  
    }  
    return $write_length;  
}

위 내용은 동시에 동일한 파일에 쓰는 여러 프로세스를 구현하는 PHP용 두 가지 솔루션 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.