php / php/php-src

BUG: locks not working as expected

Ouverte
#14,592 22 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Bug Category: Streams Status: Needs Triage
Langage dominant
C
Étoiles
40.4k
Forks
8.2k
Merge moyen
2 j 13 h
PR mergées (30 j)
96

Description

Description

The following code:

<?php
$arquivo_lock = fopen("test.txt","a");

if (flock($arquivo_lock,LOCK_EX|LOCK_NB)) { 
    echo "Yes";
} else {
    echo "No";
}

sleep(10);

fclose($arquivo_lock);
?>

Save the simple code above to the file test.php, for example. Now, in less than 10 seconds apart, open 2 (or more) tabs on your browser calling the file test.php and you will see every tab will show you Yes after some seconds. It should show Yes only on the first tab, all the other should return immediatly with No because I am using LOCK_NB flag.

This bug is pretty simple to reproduce and other people also confirmed it on Stackoverflow when I reported there.

PHP Version

8.x

Operating System

Confirmed at least on centos 9 stream and windows 11

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par exécuter la reproduction à deux onglets de test.php avec PHP 8.x dans les environnements signalés CentOS 9 Stream et Windows 11, en vous concentrant sur flock avec LOCK_EX|LOCK_NB. Suivez le point d’entrée de flock et le comportement du verrouillage spécifique à chaque plateforme ; le travail est terminé lorsque la première requête signale Yes tandis que les requêtes qui se chevauchent renvoient immédiatement No, avec une couverture des environnements confirmés.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
php
Domaine
operating-systems
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
Calme
Clarté
Plutôt claire
Accessibilité débutants
48/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.