Maison  >  Article  >  développement back-end  >  Explication détaillée du fonctionnement simultané du verrouillage de fichier PHP

Explication détaillée du fonctionnement simultané du verrouillage de fichier PHP

小云云
小云云original
2018-03-31 10:51:202366parcourir

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 :
Explication détaillée du fonctionnement simultané du verrouillage de fichier PHP
Utiliser le verrouillage en écriture :
Explication détaillée du fonctionnement simultané du verrouillage de fichier PHP

Vous pouvez utiliser LOCK_NB pour ne pas bloquer lorsque le verrouillage échoue :

<?php
$fp = fopen(&#39;/tmp/lock.txt&#39;, &#39;r+&#39;);

/* Activate the LOCK_NB option on an LOCK_EX operation */if(!flock($fp, LOCK_EX | LOCK_NB)) {
    echo &#39;Unable to obtain lock&#39;;
    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 :
Explication détaillée du fonctionnement simultané du verrouillage de fichier PHP
Utiliser le verrouillage en écriture :
Explication détaillée du fonctionnement simultané du verrouillage de fichier PHP

Vous pouvez utiliser LOCK_NB pour ne pas bloquer lorsque le verrouillage échoue :

<?php
$fp = fopen(&#39;/tmp/lock.txt&#39;, &#39;r+&#39;);

/* Activate the LOCK_NB option on an LOCK_EX operation */if(!flock($fp, LOCK_EX | LOCK_NB)) {
    echo &#39;Unable to obtain lock&#39;;
    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!

Déclaration:
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