Maison > Article > développement back-end > Explication détaillée du fonctionnement simultané du verrouillage de fichier PHP
Cet article partage principalement avec vous l'explication détaillée du fonctionnement simultané du verrouillage de fichier PHP. Par défaut : la fonction d'opération de fichier de PHP n'est pas dans un état de blocage, mais dans un état de fonctionnement libre. J'espère qu'elle pourra aider tout le monde.
Conditions :
Lorsqu'une opération de script est requise et qu'une autre opération de script doit être bloquée, un verrouillage de fichier est requis.
Processus d'opération de verrouillage :
Ajoutez d'abord le verrou, vérifiez si le verrou est ajouté avec succès et réutilisez-le s'il réussit !
Type de verrouillage :
Verrouillage en lecture : verrouillage partagé s-Lock (share-lock), le verrou supplémentaire attendu avant l'opération de lecture. Par conséquent, les lectures simultanées sont autorisées et les opérations d'écriture supplémentaires sont bloquées.
Verrouillage en écriture : verrouillage exclusif x-lock (verrouillage exclusif), verrouillage exclusif, essayez d'ajouter le type de verrouillage avant l'opération d'écriture. Par conséquent, les autres scripts ne peuvent ni lire ni écrire.
Verrouillage d'intention : tous les scripts qui exploitent des ressources suivent une convention pour utiliser les verrous de fichiers (convention).
Blocage : Cela signifie qu'une fois l'opération précédente déverrouillée, la prochaine opération de verrouillage du fichier peut continuer à être exécutée
Fonction. :
bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
paramètres de type ($operation
) : LOCK_SH
verrouillage en lecture et LOCK_EX
verrouillage en écriture
Exemple :
utiliser le verrouillage en lecture :
Utiliser le verrouillage en écriture :
Vous pouvez utiliser LOCK_NB pour ne pas bloquer lorsque le verrouillage échoue :
<?php $fp = fopen('/tmp/lock.txt', 'r+'); /* Activate the LOCK_NB option on an LOCK_EX operation */if(!flock($fp, LOCK_EX | LOCK_NB)) { echo 'Unable to obtain lock'; exit(-1); } /* ... */ fclose($fp);
Déverrouiller : avant la version PHP 5.3.2, le verrouiller également Il sera publié par fclose() (il sera appelé automatiquement après la fin du script), et maintenant il ne peut être déverrouillé que manuellement via flock($fp,LOCK_UN)
Par défaut : la fonction d'opération de fichier de PHP, état de fonctionnement non bloqué, mais libre.
Conditions :
Lorsqu'une opération de script est requise et qu'une autre opération de script doit être bloquée, un verrouillage de fichier est requis.
Processus d'opération de verrouillage :
Ajoutez d'abord le verrou, vérifiez si le verrou est ajouté avec succès et réutilisez-le s'il réussit !
Type de verrouillage :
Verrouillage en lecture : verrouillage partagé s-Lock (share-lock), le verrou supplémentaire attendu avant l'opération de lecture. Par conséquent, les lectures simultanées sont autorisées et les opérations d'écriture supplémentaires sont bloquées.
Verrouillage en écriture : verrouillage exclusif x-lock (verrouillage exclusif), verrouillage exclusif, essayez d'ajouter le type de verrouillage avant l'opération d'écriture. Par conséquent, les autres scripts ne peuvent ni lire ni écrire.
Verrouillage d'intention : tous les scripts qui exploitent des ressources suivent une convention pour utiliser les verrous de fichiers (convention).
Blocage : Cela signifie qu'une fois l'opération précédente déverrouillée, la prochaine opération de verrouillage du fichier peut continuer à être exécutée
Fonction. :
bool flock ( resource $handle , int $operation [, int &$wouldblock ] )
paramètres de type ($operation
) : LOCK_SH
verrouillage en lecture et LOCK_EX
verrouillage en écriture
Exemple :
utiliser le verrouillage en lecture :
Utiliser le verrouillage en écriture :
Vous pouvez utiliser LOCK_NB pour ne pas bloquer lorsque le verrouillage échoue :
<?php $fp = fopen('/tmp/lock.txt', 'r+'); /* Activate the LOCK_NB option on an LOCK_EX operation */if(!flock($fp, LOCK_EX | LOCK_NB)) { echo 'Unable to obtain lock'; exit(-1); } /* ... */ fclose($fp);
Déverrouiller : avant la version PHP 5.3.2, le lock également Il sera libéré par fclose() (il sera appelé automatiquement après la fin du script), et désormais il ne peut être déverrouillé que manuellement via flock($fp,LOCK_UN)
.
Recommandations associées :
Comment PHP utilise les verrous de fichiers pour résoudre les problèmes de haute concurrence
php utilise les verrous de fichiers pour résoudre les problèmes de haute concurrence
Comment résoudre la haute concurrence en php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!