美文网首页
12.3.5 文件的锁定机制

12.3.5 文件的锁定机制

作者: 曹渊说创业 | 来源:发表于2016-12-22 08:46 被阅读93次

12.3.5 文件的锁定机制

flock -- 轻便的咨询文件锁定
语法: bool flock ( int handle, int operation [, int &wouldblock] )
PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法。
handle 必须是一个已经打开的文件指针。
operation 可以是以下值之一:
要取得共享锁定(读取程序),将 operation 设为 LOCK_SH。
要取得独占锁定(写入程序),将 operation 设为 LOCK_EX。
要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN。
如果你不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB。
如果成功则返回 TRUE,失败则返回 FALSE。

message.php

<?php
    header("Content-Type:text/html;charset=utf8");
    $filename = "message.txt";

    //如果用户提交了, 就写入文件, 按一定格式写入
    if(isset($_POST['dosubmit'])) {
        //字段的分隔使用||, 行的分隔使用[n]
        $mess = "{$_POST['username']}||".time()."||{$_POST['title']}||{$_POST['content']}[n]";

        writemessage($filename, $mess);

    }



    if(file_exists($filename)) {
        readmessage($filename);
    }


    function writemessage($filename, $mess) {
        $fp = fopen($filename, "a");

        if(flock($fp, LOCK_EX+LOCK_NB)) {

            fwrite($fp, $mess);

            flock($fp, LOCK_UN+LOCK_NB);

        } else {
            echo "写入锁定失败!";
        }
    
        fclose($fp);
    }

    function readmessage($filename) {
    //  $mess = file_get_contents($filename);

        $mess = "";

        $fp = fopen($filename, "r");


        flock($fp, LOCK_SH+LOCK_NB);  //读锁定

        while(!feof($fp)) {
            $mess.=fread($fp, 1024);
        }

        flock($fp, LOCK_UN+LOCK_NB);  //释放

        $mess = rtrim($mess, "[n]");

        $arrmess = explode("[n]", $mess);

        foreach($arrmess as $m) {
            list($username, $dt ,$title, $content) = explode("||", $m);

            echo "<b>{$username}</b>, ".date("Y-m-d H:i").": <i>{$title}</i>, <u>{$content}</u><br><hr><br>";
        }

        fclose($fp);

    }


?>



<form action="message.php" method="post">
    用户: <input type="text" name="username" value="" /><br>
    标题:<input type="text" name="title" value="" /><br>
    内容:<textarea  name="content" cols="40" rows="4"></textarea><br>
    <input type="submit" name="dosubmit" value="留言" /><br>
</form>

相关文章

  • 12.3.5 文件的锁定机制

    12.3.5 文件的锁定机制 flock -- 轻便的咨询文件锁定语法: bool flock ( int han...

  • php文件的锁定机制

    记事本新建一个1.txt文件写入 today is a goog day;$fp = fopen("1.txt",...

  • MySQL -- 锁机制

    表锁 行锁 页锁 表锁:表级别的锁定是MySQL各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点:实现逻辑非...

  • 文件锁定

    Java中NIO的文件锁定在很大程度上依赖操作系统的实现。并非所有的操作系统都支持共享锁(shared locks...

  • 关于Ubuntu中Could not get lock /var

    删除锁定文件 首先运行下面的命令来移除 /var/lib/dpkg/ 文件夹下的锁定文件: $ sudo rm /...

  • MySQL数据库存储引擎

    1.概念:MySQL中的数据用各种不同技术存储文件中,这些技术使用不同的存储机制,索引技巧,锁定水平,并且最终提供...

  • 理解DeFi Yield Farming:以PancakeSwa

    由于SB的锁定机制,所以用图片展示。

  • 安装nginx

    锁定文件与解锁文件 锁定关键系统文件,防止被提权篡改lsattr与chattr命令,chattr命令可以更改名称,...

  • win8 技巧收集

    1. win8对所有文件默认"解除锁定"“解除锁定”的目标一般都是word/ppt/excel文件,其他文件没有发...

  • MySQL分表

    mysql中有一种机制是表锁定和行锁定,为什么要出现这种机制,是为了保证数据的完整 性,如果有二个sql都要修改同...

网友评论

      本文标题:12.3.5 文件的锁定机制

      本文链接:https://www.haomeiwen.com/subject/fuucvttx.html