Home >Backend Development >PHP Problem >Questions and answers about file locking in PHP file processing
In the previous article "How to delete a directory in PHP (detailed examples)", the relevant knowledge of deleting directories in PHP was introduced in detail. Deleting a non-empty directory is slightly more complicated. In this article, we will take a look at the relevant knowledge of file locking in PHP. I hope it will be helpful to everyone!
In previous articles we have learned a lot about file processing related knowledge, such as writing files, reading files, etc. One of them is called file lock . The understanding of file locking may be a bit abstract, because the file locking mechanism generally has no effect when opening a file.
What exactly is a file lock? What is he used for? Why do we use file locks? How do we use it? With these questions, let us take a look at the relevant knowledge of file locks.
What is a file lock?
The first question is, simply put, file lock is a file protection mechanism. It can be understood that when you are reading or writing this file, there is already a file. A protection mechanism for the file when operating on the file, for example to prevent another operation on the file while it is being operated.
The purpose of file lock
If a file has a file lock, when I use this file, only I can access the file To operate, unless the file lock is released, others will not be able to interfere with my operations on the file. Only one person can be allowed to operate at the same time to prevent data errors.
If there is no file lock and multiple people operate the same file, it is very likely to cause data errors or asymmetry, so it is necessary to use file locks. This is what files are used for and why file locks are used.
How to use file lock: flock()
Function
Next let’s take a look at how to use this PHP File lock, first we need to know that we can lock the file through the flock() function after opening the file.
flock()
The basic syntax format of the function is as follows:
flock(resource $handle, int $operation[, int &$wouldblock])
What needs to be noted is:
Parameter$handle
represents the pointer of the file system, which is the file resource created through fopen()
; the parameter $operation
represents the file Lock type; the parameter $wouldblock
is an optional parameter, which means it can be set to 1
or true
, so that the file will block when it is locked. Block other processes.
Let’s introduce the type of parameter $operation:
LOCK_EX
represents a write lock , that is, it is in a write-lock state when writing. Others cannot write or read. They can only be restored after unlocking.
LOCK_SH
represents a shared lock. It is understood that others can only read, but cannot write. Reply after unlocking.
LOCK_UN
represents the release of the above two states. That is, unlocked.
LOCK_NB
means that after reading or writing, when the file is locked, notification access will be returned immediately The file is locked.
Next let’s take a look at an example. The example is as follows:
<?php header("Content-Type: text/html;charset=utf-8"); //设置字符编码 $file = "test.txt"; $handle = fopen($file,'w+'); //打开文件 if(flock($handle, LOCK_EX|LOCK_NB)){ //给文件上锁 fwrite($handle, '被锁住了'); //写入数据 flock($handle, LOCK_UN); //释放文件锁 }else{ echo "锁失败了"; } fclose($handle);//关闭文件 readfile($file);//读取文件内容 ?>
Output result:
# Data is written in ##test.txt: #From the above example, we have completed the file lock operation on the file. After the operation is completed, use the fclose() function to close the file; then read the file contents through the readfile() function. What needs to be noted is: When we use the flock() function, the file is locked. If we want the file to be unlocked automatically, we only need to call the fclose() function. When we write code, it is better to add an unlock statement after using the file lock. If you are interested, you can click on "PHP Video Tutorial" to learn more about PHP knowledge.
The above is the detailed content of Questions and answers about file locking in PHP file processing. For more information, please follow other related articles on the PHP Chinese website!