12.3.5 文件的锁定机制

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>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容