Read and write to a file while keeping lock

前端 未结 3 670
半阙折子戏
半阙折子戏 2020-12-03 22:10

I am making a simple page load counter by storing the current count in a file. This is how I want to do this:

  1. Lock the file (flock)
  2. Read the current c
相关标签:
3条回答
  • 2020-12-03 22:20

    I believe you can achieve this using flock. Open a pointer to your file, flock it, read the data, write the data, then close (close automatically unlocks).

    http://php.net/flock

    0 讨论(0)
  • 2020-12-03 22:27

    As said, you could use FLock. A simple example would be:

    //Open the File Stream
    $handle = fopen("file.txt","r+");
    
    //Lock File, error if unable to lock
    if(flock($handle, LOCK_EX)) {
        $count = fread($handle, filesize("file.txt"));    //Get Current Hit Count
        $count = $count + 1;    //Increment Hit Count by 1
        ftruncate($handle, 0);    //Truncate the file to 0
        rewind($handle);           //Set write pointer to beginning of file
        fwrite($handle, $count);    //Write the new Hit Count
        flock($handle, LOCK_UN);    //Unlock File
    } else {
        echo "Could not Lock File!";
    }
    
    //Close Stream
    fclose($handle);
    
    0 讨论(0)
  • 2020-12-03 22:39

    Yes, you have to use rewind before ftruncate. Otherwise, the old content of the file is only refilled with zeros.

    The working sequence is:

        fopen
        flock LOCK_EX
        fread filesize
        rewind
        ftruncate 0
        fwrite 
        flock LOCK_UN
        fclose
    
    0 讨论(0)
提交回复
热议问题