Introduction détaillée aux bases du fichier flock PHP lock_php
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
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
$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
?>
运行 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 好像选择不了锁,不知道他默认用的什么锁,反正和不锁得到的输出一样,是不完整的数据。

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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

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 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.

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("

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 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 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.
