`

【面试题】请写一段 PHP 代码 ,确保多个进程同时写入同一个文件成功

阅读更多

 考点:对函数的理解

 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。
  • 方案一
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;
}

 

 

1
0
分享到:
评论

相关推荐

    前端面试题-手写代码实现

    在前端面试中,手写代码实现是衡量一个开发者技术实力的重要环节。这涉及到对编程基础、算法理解、问题解决能力和代码质量的综合考察。以下将分别解析标题、描述中的知识点,并针对每个文件名提供相关的内容。 标题...

    面试题手写代码(很实用)

    在手写代码环节,面试官可能会让你实现一个简单的类或方法,例如字符串操作、数据结构转换,甚至可能涉及到并发控制或者算法实现。 其次,“dom解析”涉及的是网页文档对象模型,主要用于处理HTML或XML文档。面试中...

    H5前端面试大全-包含大厂面试题_25个md文件分类面试题.rar

    这里将收集我做过的所有的前端面试笔试题,并根据自己的理解提供解答,以及一些关于前端找工作方面的经验等。 前端笔试面试题部分 试题链接 原题概述 标签分类 1.md CSS部分 CSS 2.md HTML部分 HTML 3.md FEX ...

    新浪PHP面试题新浪PHP面试题

    【标签】"新浪PHP面试题"这个标签进一步确认了主题,意味着我们将会看到与新浪公司面试流程相关的PHP技术问题。 根据压缩包子文件的文件名称,我们可以推测其中包含的是张伟(可能是一位面试官或技术专家)在2009年...

    腾讯PHP面试题_腾讯php面试题_

    最新腾讯PHP面试题1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除不需要的对象。 PHP 使用了引用计数 (reference counting) GC 机制。 每个对象都内含一个引用计数器 refcount,每个 reference 连接到对象,...

    73道Java面试题合集-多线程与进程

    以下是对73道Java面试题合集——多线程与进程相关知识点的详细解释。 1. **进程与线程的概念**: - **进程**:是操作系统资源分配的基本单位,拥有独立的内存空间和系统资源,可以并发执行。 - **线程**:是程序...

    「2021」高频前端面试题汇总之手写代码篇.pdf

    "前端面试题汇总之手写代码篇" 本资源主要对前端面试题的常见问题进行了总结和分类,涵盖了 JavaScript 基础知识、手写代码等方面的知识点。下面是对本资源中提到的知识点的详细解释: 1. 手写 Object.create 方法...

    PHP新浪面试题,面试必看。

    如果多个进程同时尝试写入同一个文件,可能会导致数据混乱。为了避免这种情况,可以使用文件锁定(如 flock)来确保同一时间只有一个进程写入文件。 #### 7. 如何验证字符串格式是否正确? 对于字符串格式的验证,...

    笔试面试题的代码.zip

    笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip笔试面试题的代码.zip...

    java面试题之代码纠错

    java面试题中有一种代码纠错问题,现总结了几道代码错误问题

    多线程面试题

    1. **线程的概念**:线程是程序执行的最小单位,一个进程可以有多个线程同时执行任务,提高了程序的运行效率。 2. **Java中的线程创建方式**:Java提供了两种创建线程的方式——继承Thread类和实现Runnable接口。...

    一份就够!史上最全面Python面试题和详解(10个文件)看完啥都会了.zip

    “python面试题搜集(七):史上最全python面试题详解(一).md”和“python面试题搜集(八):史上最全python面试题详解 (二).md”、“python面试题搜集(十):史上最全python面试题详解(四).md”这些文档可能...

    Socket编程面试题

    Socket 编程面试题 TCP 和 UDP 的区别: 1. 连接方式:TCP 提供面向连接的传输,通信前需要建立连接(三次握手机制);UDP 提供无连接的传输,通信前不需要建立连接。 2. 可靠性:TCP 提供可靠的传输(有序、无...

    c++面试题面试题面试题面试题

    根据给定的信息,我们可以整理出一系列与C++相关的面试题及知识点解析,下面将逐一进行详细阐述。 ### C++ 面试题知识点解析 #### 1. 预处理器指令 预处理器是编译器执行的第一步,在实际编译之前处理源代码。预...

    一个大公司的PHP面试题

    例如,要使用 Smarty 显示一个名为 $data 的变量,可以使用以下代码: ``` $smarty = new Smarty(); $smarty->assign('data', $data); $smarty->display('template.tpl'); ``` 八、SQL 语句性能分析 要分析 SQL 语句...

    c#高级程序员面试题(附部分参考答案).pdf,这是一份不错的文件

    C#高级程序员面试题知识点大全 本文档总结了C#高级程序员面试题相关的知识点,涵盖了从.Net编译过程到WebService使用的协议等多个方面。 一、.Net编译过程 * .Net编译过程将代码翻译成Microsoft中间语言(MSIL) ...

    C++面试题点播一

    在文件中提到的第一个面试题,需要分析一个C++程序,并预测其运行结果。此题涉及到C++的构造函数、虚函数和多态的原理。给出的程序示例中,存在一个多态的例子,其中基类A定义了一个虚函数func,并在构造函数中调用...

    面试题面试题面试题34

    Singleton模式确保一个类只有一个实例,并提供全局访问点。C#中,可以通过私有构造函数和静态工厂方法实现Singleton,同时考虑线程安全,可使用`lock`或`Lazy<T>`类。 5. **C#的垃圾回收机制**: C#的垃圾回收是...

Global site tag (gtag.js) - Google Analytics