PHP实现多个进程同时写入同一个文件的两种方案分享

黄舟
发布: 2017-03-30 09:54:26
原创
3710人浏览过

考点:对函数的理解

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 : 关闭一个打开的文件指针

ViiTor实时翻译
ViiTor实时翻译

AI实时多语言翻译专家!强大的语音识别、AR翻译功能。

ViiTor实时翻译 116
查看详情 ViiTor实时翻译

立即学习PHP免费学习笔记(深入)”;

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

方案一

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;   
}
登录后复制

方案二(自己做标记的方法)

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中文网其它相关文章!

相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号