Maison php教程 php手册 Introduction détaillée aux bases du fichier flock PHP lock_php

Introduction détaillée aux bases du fichier flock PHP lock_php

May 16, 2016 am 09:00 AM
flock 文件锁

flock
(PHP 4, PHP 5)

flock — verrouillage léger des fichiers consultatifs

Description
bool flock ( int $handle , int $opération [, int &$wouldblock ] )
PHP prend en charge une méthode légère de verrouillage de tous les fichiers de manière consultative (c'est-à-dire que tous les programmes qui y accèdent doivent se verrouiller de la même manière, sinon cela ne fonctionnera pas).

Remarque :

flock() sera appliqué sous Windows.

Le handle de l’opération flock() doit être un pointeur de fichier ouvert. opération peut être l'une des valeurs suivantes :


Pour obtenir un verrou partagé (programme de lecture), définissez opération sur LOCK_SH (mis à 1 dans les versions antérieures à PHP 4.0.1).
Pour obtenir un verrou exclusif (programme d'écriture), définissez l'opération sur LOCK_EX (défini sur 2 dans les versions antérieures à PHP 4.0.1).
Pour libérer un verrou (qu'il soit partagé ou exclusif), définissez l'opération sur LOCK_UN (défini sur 3 dans les versions antérieures à PHP 4.0.1).
Si vous ne voulez pas que flock() se bloque lorsqu'il est verrouillé, ajoutez LOCK_NB à l'opération (défini sur 4 dans les versions antérieures à PHP 4.0.1).

flock() permet l'implémentation d'un modèle simple de lecture/écriture qui peut être utilisé sur n'importe quelle plateforme (y compris la plupart des dérivés d'Unix et même Windows). Le troisième paramètre facultatif est défini sur TRUE si le verrou bloque (en cas de code d'erreur EWOULDBLOCK). Les opérations de verrouillage peuvent également être libérées par fclose() (également appelée automatiquement lorsque l'exécution du code est terminée).

Renvoie VRAI en cas de succès, ou FAUX en cas d'échec


Exemple n°1 flock() Exemple

Copier le code<.>

Le code est le suivant :


$fp = fopen("/tmp/lock.txt", "w+"); 🎜 >if (flock($fp, LOCK_EX)) { // effectue un verrouillage exclusif
fwrite($fp, "Écrivez quelque chose ici ");
flock($fp, LOCK_UN); >} else {
echo "Impossible de verrouiller le fichier !"
}
fclose($fp);
?> >
Comme flock() nécessite un pointeur de fichier, vous devrez peut-être utiliser un fichier de verrouillage spécial pour protéger l'accès aux fichiers destinés à être ouverts en mode écriture (ajoutez "w" ou "w+" à la fonction fopen()) .

Attention
flock() ne peut pas être utilisé avec NFS et certains autres systèmes de fichiers réseau. Consultez la documentation de votre système d'exploitation pour plus de détails.
Dans certains systèmes d'exploitation, flock() est implémenté au niveau du processus. Lors de l'utilisation d'une API de serveur multithread (telle qu'ISAPI), il peut ne pas être possible de s'appuyer sur flock() pour protéger le fichier, car le fichier peut être traité par des scripts PHP exécutés dans d'autres threads parallèles dans la même instance de serveur.
flock() ne prend pas en charge les anciens systèmes de fichiers tels que FAT et ses dérivés. Par conséquent, FALSE est toujours renvoyé dans cet environnement (en particulier pour les utilisateurs de Windows 98).


Introduction à l'utilisation de la fonction de verrouillage de fichier flock en php :

Syntaxe :

bool flock (int $handle, int $operation [, int & $wouldblock ] )
Le handle de l'opération flock() doit être un pointeur de fichier ouvert. opération peut être l'une des valeurs suivantes :
1. Pour obtenir un verrou partagé (lecteur), définissez opération sur LOCK_SH (défini sur 1 dans les versions antérieures à PHP 4.0.1)
2. ( Writer), définissez l'opération sur LOCK_EX (défini sur 2 dans les versions antérieures à PHP 4.0.1)
3. Pour libérer le verrou (qu'il soit partagé ou exclusif), définissez l'opération sur LOCK_UN (dans les versions antérieures à PHP 4.0.1) Définissez à 3 dans la version)
4. Si vous ne voulez pas que flock() se bloque lorsqu'il est verrouillé, ajoutez LOCK_NB à l'opération (défini à 4 dans les versions antérieures à PHP 4.0.1)

Voir ci-dessous Code :

a.php


< ;?php
$file = "temp.txt";
$fp = fopen($file, 'w');
if(flock($fp, LOCK_EX)){
fwrite( $fp, "abc");
sleep(10);
fwrite($fp, "123");
flock($fp, LOCK_UN); fclose($ fp);
?>


b.php



Copier le code
Le code est le suivant : $file = "temp.txt"
$fp = fopen($file, 'r'); echo fread($fp, 100);
fclose($fp);
?>
运行 a.php 后,马上运行 b.php ,可以看到输出:
abc
等 a.php 运行完后运行 b.php ,可以看到输出:
abc
123
显然,当 a.php 写文件时数据太大,导致时间比较长时,这时 b.php 读取数据不完整,在对b.php做修改
修改 b.php 为:
复制代码 代码如下:

$file = “temp.txt”;
$fp = fopen($file , 'r‘);
if(flock($fp , LOCK_EX)){
echo fread($fp , 100);
flock($fp , LOCK_UN);
} else{
echo “Lock file failed…”;
}
fclose($fp);
?>

运行 a.php 后,马上运行 b.php ,可以发现 b.php 会等到 a.php 运行完成后(即 10 秒后)才显示:
abc
123
读取数据完整,但时间过长,他要等待写锁释放,再对b.php做修改。
修改 b.php 为:
复制代码 代码如下:

$file = “temp.txt”;
$fp = fopen($file , 'r');
if(flock($fp , LOCK_SH | LOCK_NB)){
echo fread($fp , 100);
flock($fp , LOCK_UN);
} else{
echo “Lock file failed…”;
}
fclose($fp);
?>

运行 a.php 后,马上运行 b.php ,可以看到输出:
Lock file failed…
证明可以返回锁文件失败状态,而不是向上面一样要等很久。
脚本之家小编结论:
建议作文件缓存时,选好相关的锁,不然可能导致读取数据不完整,或重复写入数据。
file_get_contents 好像选择不了锁,不知道他默认用的什么锁,反正和不锁得到的输出一样,是不完整的数据。
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment gérer les verrouillages de fichiers du système de fichiers et les problèmes de partage de fichiers inter-processus pour les fichiers simultanés en langage Go ? Comment gérer les verrouillages de fichiers du système de fichiers et les problèmes de partage de fichiers inter-processus pour les fichiers simultanés en langage Go ? Oct 09, 2023 pm 05:53 PM

Introduction aux verrouillages de fichiers du système de fichiers et aux problèmes de partage de fichiers inter-processus lors de la gestion de fichiers simultanés dans le langage Go : dans le langage Go, nous devons souvent gérer l'accès simultané aux fichiers, y compris les verrouillages de fichiers du système de fichiers et le partage de fichiers inter-processus. Cet article explique comment utiliser le langage Go pour résoudre ces problèmes et fournit des exemples de code spécifiques. 1. Verrouillage des fichiers du système de fichiers Lorsque plusieurs programmes simultanés accèdent au même fichier en même temps, afin d'éviter les conditions de concurrence et les incohérences des données, nous pouvons utiliser les verrous de fichiers du système de fichiers pour la synchronisation. La langue Go fournit des s

Commandes de verrouillage de fichiers sous Linux : flock, fcntl, lockfile, flockfile Tutoriel détaillé ! Commandes de verrouillage de fichiers sous Linux : flock, fcntl, lockfile, flockfile Tutoriel détaillé ! Feb 23, 2024 pm 09:01 PM

Sous Linux, il existe plusieurs commandes de verrouillage de fichiers couramment utilisées, notamment flock, fcntl, lockfile et flockfile. Ces commandes sont utilisées pour fournir un accès mutuellement exclusif aux fichiers dans un environnement multi-processus ou multi-thread. Voici un tutoriel détaillé de ces commandes : Commande flock : la commande flock peut être utilisée dans des scripts shell pour effectuer un verrouillage exclusif de fichiers. Utilisez la syntaxe suivante pour verrouiller un fichier : flock [options] commande filename Par exemple, pour verrouiller un fichier nommé file.txt et exécuter la commande, vous pouvez exécuter la commande suivante : flockfile.txtls - La commande lflock verrouille le fichier pendant le exécution de la commande et exécute la commande. Le verrou est automatiquement libéré une fois la commande terminée. fcnt

Verrouillage de fichiers en PHP Verrouillage de fichiers en PHP May 23, 2023 am 08:15 AM

PHP est un langage de programmation largement utilisé pour développer un grand nombre d'applications Web, notamment pour le traitement de fichiers. Dans ces applications web, il est parfois nécessaire d'éviter les accès simultanés au même fichier pour éviter les conflits de données. Le verrouillage des fichiers est une solution à l'accès simultané. Un verrouillage de fichier est un mécanisme utilisé pour empêcher plusieurs processus ou threads d'accéder au même fichier en même temps. Lorsqu'un processus verrouille un fichier, les autres processus ne peuvent pas accéder au fichier jusqu'à ce qu'il libère le verrou. L'utilisation de ce verrou garantit que le fichier

Le principe et l'application du verrouillage de fichiers dans Golang Le principe et l'application du verrouillage de fichiers dans Golang Feb 29, 2024 am 09:54 AM

Le principe et l'application du verrouillage de fichiers dans Golang Dans le système d'exploitation, le verrouillage de fichiers est un mécanisme utilisé pour protéger les fichiers ou les ressources contre l'accès ou la modification par plusieurs processus en même temps. Dans Golang, la structure des données en mémoire peut être verrouillée à l'aide du verrou Mutex fourni par le package de synchronisation. Cependant, lorsque plusieurs processus sont impliqués dans la lecture et l'écriture du même fichier, des verrous de fichiers doivent être utilisés pour garantir la cohérence et la sécurité des données. sécurité. Pour le type de verrouillage de fichier dans Golang, vous pouvez utiliser le F de la structure File fournie par le package os.

Techniques avancées d'exploitation des fichiers Java : améliorer l'efficacité du développement Techniques avancées d'exploitation des fichiers Java : améliorer l'efficacité du développement Feb 27, 2024 pm 12:25 PM

1. Une lecture efficace des fichiers utilise BufferedReader/BufferedWriter pour améliorer l'efficacité de la lecture et de l'écriture : BufferedReader et BufferedWriter sont des flux de caractères efficaces qui peuvent lire ou écrire une ligne de texte à la fois, ce qui est plus efficace que d'utiliser directement InputStream ou OutputStream. BufferedReaderreader=newBufferedReader(newFileReader("file.txt"));BufferedWriterwriter=newBufferedWriter(newFileWriter("

Comment utiliser les verrous de fichiers pour garantir la sécurité des données dans Golang Comment utiliser les verrous de fichiers pour garantir la sécurité des données dans Golang Feb 28, 2024 pm 01:12 PM

Titre : Comment utiliser les verrous de fichiers pour garantir la sécurité des données dans Golang. Dans le processus de programmation, garantir la sécurité des données est un élément crucial. Dans Golang, afin de garantir l'atomicité et la sécurité des threads des opérations de données, nous utilisons souvent des verrous de fichiers pour implémenter le contrôle d'accès aux ressources partagées. Les verrous de fichiers garantissent un accès mutuellement exclusif entre les processus au niveau du système d'exploitation, évitant ainsi les conditions de course aux données et les conflits de ressources. Cet article expliquera comment utiliser les verrous de fichiers pour garantir la sécurité des données dans Golang et fournira des exemples de code spécifiques. 1.Documents

L'importance et l'utilisation des verrous de fichiers dans la programmation Golang L'importance et l'utilisation des verrous de fichiers dans la programmation Golang Feb 28, 2024 pm 04:15 PM

L'importance et l'utilisation des verrous de fichiers dans la programmation Golang Dans la programmation multithread, les opérations de lecture et d'écriture de fichiers sont très courantes. Dans un programme simultané, si plusieurs goroutines lisent et écrivent un fichier en même temps, cela peut facilement entraîner une confusion dans le contenu du fichier ou une perte de données. Pour éviter cette situation, nous pouvons utiliser des verrous de fichiers pour garantir l'atomicité et la sécurité des opérations sur les fichiers. Cet article présentera l'importance des verrous de fichiers dans la programmation Golang et les méthodes d'utilisation spécifiques, et fournira quelques exemples de code. document

Meilleures pratiques pour implémenter des verrous de fichiers à l'aide de Golang Meilleures pratiques pour implémenter des verrous de fichiers à l'aide de Golang Feb 28, 2024 pm 12:12 PM

Meilleures pratiques d'utilisation de Golang pour implémenter le verrouillage de fichiers. Au cours du développement, nous rencontrons souvent des situations dans lesquelles les fichiers doivent être verrouillés pour garantir que les fichiers peuvent fonctionner correctement lorsqu'ils sont accessibles simultanément par plusieurs goroutines ou processus. Dans Golang, la mise en œuvre du verrouillage de fichiers n'est pas compliquée. Cet article présentera les meilleures pratiques sur la façon d'utiliser Golang pour mettre en œuvre le verrouillage de fichiers, y compris des exemples de code spécifiques. Le rôle du verrouillage de fichiers Le verrouillage de fichiers est un mécanisme de verrouillage de fichiers au niveau du système d'exploitation. Il peut nous aider à garantir que les fichiers sont accessibles simultanément.

See all articles