Adakah php tahu tentang kunci fail? Apa gunanya?

青灯夜游
Lepaskan: 2023-03-11 22:38:02
asal
3696 orang telah melayarinya

Dalam artikel sebelumnya, kami memperkenalkan cara menggunakan PHP untuk mendapatkan fail dalam direktori yang ditentukan (tidak termasuk subdirektori Jika anda memerlukannya, sila baca "Bagaimanakah PHP mengetahui fail yang terdapat dalam direktori yang ditentukan" . Kali ini kami akan memperkenalkan kunci fail kepada anda, lihat fungsi kunci fail, dan cara menambah kunci fail dan melepaskan kunci fail.

Dalam artikel sebelumnya "

operasi fail php: cara mengosongkan fail dan menambah semula data" kami memperkenalkan kaedah menulis data ke fail Dalam artikel itu, kami a pengguna tunggal pada masa yang sama Manipulasi fail supaya tiada masalah. Walau bagaimanapun, jika dalam persekitaran rangkaian, berbilang pengguna pelanggan mengakses fail yang sama pada pelayan pada masa yang sama, maka program akan mengalami ralat dan fail tersebut mungkin rosak.

Contohnya:


  • Seorang pengguna sedang menulis data pada fail (data belum selesai lagi pada masa ini, pengguna lain juga sedang menulis). data ke fail ini. Menulis data ke dalam fail akan menyebabkan kekeliruan dalam penulisan data; . Maka data yang diperolehi oleh pengguna tidak lengkap dan data yang tidak lengkap akan diperolehi.

  • Untuk menyelesaikan masalah ini, PHP menyediakan fungsi flock() - mekanisme kunci fail yang boleh mengunci atau melepaskan fail.

    Apabila menulis ke fail menggunakan PHP, fail itu dikunci buat sementara waktu; Ini mengelakkan rasuah data semasa akses serentak ke fail yang sama.
Mari kita lihat contoh berikut:

Analisis kod di atas:


Mula-mula gunakan fungsi fopen() untuk membuka fail. Kemudian gunakan penyataan

untuk menambah kunci eksklusif "LOCK_EX" pada fail dan tetapkan "LOCK_NB" untuk mengelak daripada menyekat proses lain apabila dikunci dan terus mengembalikan kandungan ke dalam yang lain. Kemudian anda boleh menggunakan fungsi fwrite() untuk melaksanakan operasi menulis dan menulis masa semasa.
<?php
header("Content-Type: text/html;charset=utf-8");    //设置字符编码
$file = "test.txt";
$handle = fopen($file,&#39;w+&#39;); //打开文件
if(flock($handle, LOCK_EX|LOCK_NB)){  //给文件上锁
    fwrite($handle, &#39;现在是:&#39;.date(&#39;Y-m-d H:i:s&#39;, time()));  //写入数据
    flock($handle, LOCK_UN);  //释放文件锁
}else{
    echo "string";
}
fclose($handle);//关闭文件
readfile($file);//读取文件内容
?>
Salin selepas log masuk

Selepas fail dikendalikan, anda perlu menggunakan fungsi fclose() untuk menutup fail, akhirnya, gunakan fungsi readfile() untuk membaca kandungan fail. Oleh itu, hasil output ialah:

flock($handle, LOCK_EX|LOCK_NB)

Mari kita lihat secara ringkas fungsi flock(). Fungsi

Adakah php tahu tentang kunci fail? Apa gunanya? menerima 2 parameter yang diperlukan

(fail buka yang perlu dikunci/dikunci) dan

(jenis kunci) dan parameter yang ditinggalkan

(apabila nilai ditetapkan Apabila 1 atau benar, proses lain boleh disekat apabila fail dikunci).

flock($file,$lock,$block)Parameter $lock digunakan untuk menetapkan jenis kunci fail Anda boleh menetapkan satu atau lebih nilai berikut (berbilang nilai perlu dipisahkan dengan $file): $lock<.>$block

- Kunci kongsi (program membaca). Benarkan proses lain mengakses fail. |

  • - Kunci eksklusif (program ditulis). Halang proses lain daripada mengakses fail. LOCK_SH

  • - Mengeluarkan kunci kongsi atau eksklusif LOCK_EX

  • - Mengelakkan menyekat proses lain sekiranya berlaku kunci. LOCK_UN

  • Itu sahaja jika anda ingin tahu apa-apa lagi, anda boleh klik di sini. → →

    Pengendalian asas fail PHPLOCK_NB

Disyorkan: Ringkasan soalan temuduga PHP (koleksi)
》《

Tutorial video php

Atas ialah kandungan terperinci Adakah php tahu tentang kunci fail? Apa gunanya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan