12.3.5 文件的鎖定機(jī)制

12.3.5 文件的鎖定機(jī)制

flock -- 輕便的咨詢文件鎖定
語法: bool flock ( int handle, int operation [, int &wouldblock] )
PHP 支持以咨詢方式(也就是說所有訪問程序必須使用同一方式鎖定, 否則它不會工作)鎖定全部文件的一種輕便方法。
handle 必須是一個已經(jīng)打開的文件指針。
operation 可以是以下值之一:
要取得共享鎖定(讀取程序),將 operation 設(shè)為 LOCK_SH。
要取得獨(dú)占鎖定(寫入程序),將 operation 設(shè)為 LOCK_EX。
要釋放鎖定(無論共享或獨(dú)占),將 operation 設(shè)為 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>
    標(biāo)題:<input type="text" name="title" value="" /><br>
    內(nèi)容:<textarea  name="content" cols="40" rows="4"></textarea><br>
    <input type="submit" name="dosubmit" value="留言" /><br>
</form>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容