Rumah >php教程 >php手册 >Pengenalan terperinci kepada fail kawanan PHP lock_php asas

Pengenalan terperinci kepada fail kawanan PHP lock_php asas

WBOY
WBOYasal
2016-05-16 09:00:162395semak imbas

kawanan
(PHP 4, PHP 5)

kawanan — penguncian fail nasihat ringan

Penerangan
bool flock ( int $handle , int $operation [, int &$wouldblock ] )
PHP menyokong kaedah ringan untuk mengunci semua fail dengan cara nasihat (iaitu, semua program mengakses mesti dikunci dengan cara yang sama, jika tidak, ia tidak akan berfungsi).

Nota:

flock() akan dikuatkuasakan di bawah Windows.

Hendal operasi flock() mestilah penuding fail terbuka. operasi boleh menjadi salah satu daripada nilai berikut:


Untuk mendapatkan kunci kongsi (program membaca), tetapkan operasi kepada LOCK_SH (tetapkan kepada 1 dalam versi sebelum PHP 4.0.1).
Untuk mendapatkan kunci eksklusif (program penulisan), tetapkan operasi kepada LOCK_EX (tetapkan kepada 2 dalam versi sebelum PHP 4.0.1).
Untuk melepaskan kunci (sama ada dikongsi atau eksklusif), tetapkan operasi kepada LOCK_UN (tetapkan kepada 3 dalam versi sebelum PHP 4.0.1).
Jika anda tidak mahu flock() disekat apabila dikunci, tambah LOCK_NB pada operasi (tetapkan kepada 4 dalam versi sebelum PHP 4.0.1).

flock() membenarkan pelaksanaan model baca/tulis mudah yang boleh digunakan pada mana-mana platform (termasuk kebanyakan derivatif Unix dan juga Windows). Parameter ketiga pilihan ditetapkan kepada TRUE jika kunci akan menyekat (sekiranya kod ralat EWOULDBLOCK). Operasi kunci juga boleh dikeluarkan oleh fclose() (juga dipanggil secara automatik apabila kod selesai pelaksanaan).

Mengembalikan BENAR apabila berjaya, atau SALAH apabila gagal


Contoh #1 kumpulan() Contoh

Salin Kod<.> Kodnya adalah seperti berikut:
$fp = fopen("/tmp/lock.txt", "w+"); 🎜 >if (flock($fp, LOCK_EX)) { // lakukan kunci eksklusif
fwrite($fp, "Tulis sesuatu di sini ");
flock($fp, LOCK_UN); >} lain {
gema "Tidak dapat mengunci fail !";
}
fclose($fp);>


Nota:

Memandangkan flock() memerlukan penuding fail, anda mungkin perlu menggunakan fail kunci khas untuk melindungi akses kepada fail yang bertujuan untuk dibuka dalam mod tulis (tambah "w" atau "w+" pada fungsi fopen()) .

Amaran
flock() tidak boleh digunakan dengan NFS dan beberapa sistem fail rangkaian lain. Semak dokumentasi sistem pengendalian anda untuk mendapatkan butiran.
Dalam sesetengah sistem pengendalian, flock() dilaksanakan pada tahap proses. Apabila menggunakan API pelayan berbilang benang (seperti ISAPI), anda mungkin tidak boleh bergantung pada flock() untuk melindungi fail, kerana fail boleh diproses oleh skrip PHP yang dijalankan dalam urutan selari lain dalam contoh pelayan yang sama.
flock() tidak menyokong sistem fail lama seperti FAT dan derivatifnya. Oleh itu, FALSE sentiasa dikembalikan dalam persekitaran ini (terutamanya untuk pengguna Windows 98).


Pengenalan kepada penggunaan fungsi kunci fail fungsi flock dalam php:


Sintaks:
bool flock (int $handle, int $operation [, int & $wouldblock ] )
Hendal operasi flock() mestilah penuding fail terbuka. operasi boleh menjadi salah satu daripada nilai berikut:
1 Untuk mendapatkan kunci kongsi (pembaca), tetapkan operasi kepada LOCK_SH (ditetapkan kepada 1 dalam versi sebelum PHP 4.0.1)
2 ( Writer), tetapkan operasi kepada LOCK_EX (set kepada 2 dalam versi sebelum PHP 4.0.1)
3 Untuk melepaskan kunci (sama ada dikongsi atau eksklusif), tetapkan operasi kepada LOCK_UN (dalam versi sebelum PHP 4.0.1) Tetapkan. kepada 3 dalam versi)
4 Jika anda tidak mahu flock() disekat apabila dikunci, tambah LOCK_NB pada operasi (tetapkan kepada 4 dalam versi sebelum PHP 4.0.1)

Lihat di bawah Kod:

a.php




Salin kod
Kod adalah seperti berikut: < ;?php $file = "temp.txt";
$fp = fopen($file, 'w'); >fwrite( $fp, "abc");
tidur(10);
fwrite($fp, "123"); fclose($ fp);
?>


b.php




Salin kod

Kodnya adalah seperti berikut:

$file = "temp.txt"; $fp = fopen($file, 'r'); echo fread($fp, 100);
Selepas menjalankan a.php, jalankan b.php serta-merta dan anda boleh melihat output:
abc
Tunggu a.php selesai dijalankan dan jalankan b.php dan anda boleh melihat output:
abc
123
Jelas sekali, apabila a.php menulis fail, datanya terlalu besar dan mengambil masa yang lama Pada masa ini, b.php membaca data yang tidak lengkap selepas mengubah suai b.php,
ubah suai b.php kepada :
Salin kod Kodnya adalah seperti berikut:

$file = " temp.txt";
$fp = fopen($file, 'r'); fp, 100);
kawanan($fp, LOCK_UN); >?>


Selepas menjalankan a.php, jalankan b.php dengan segera Anda boleh mendapati bahawa b.php akan menunggu sehingga a.php selesai (iaitu, selepas 10 saat) sebelum dipaparkan. :
abc
123
Baca Data sudah lengkap, tetapi masanya terlalu lama Dia perlu menunggu kunci tulis dikeluarkan sebelum membuat perubahan kepada b.php.
Ubah suai b.php kepada:



Salin kod


Kod adalah seperti berikut:

Selepas menjalankan a.php, jalankan b.php serta-merta dan anda boleh melihat output:
Fail kunci gagal...
Bukti bahawa kunci status kegagalan fail boleh dikembalikan dan bukannya Ia mengambil masa yang lama untuk menunggu seperti di atas.
Kesimpulan editor Script House:
Adalah disyorkan untuk memilih kunci yang berkaitan semasa menyimpan fail dalam cache, jika tidak, data yang dibaca mungkin tidak lengkap atau data mungkin ditulis berulang kali.
file_get_contents nampaknya tidak dapat memilih kunci Saya tidak tahu kunci yang digunakan secara lalai Bagaimanapun, output yang diperoleh dengan tidak mengunci adalah sama dengan data yang tidak lengkap.
Kenyataan:
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