LOCK_NB Ignoré

exécuter ce code deux fois:

$fp = @fopen('test.test', "wb"); if (flock($fp, LOCK_NB | LOCK_EX)){ @fwrite($fp, $data); echo 'written'; sleep(5); }else{ echo 'skipped , ok'; } @flock($fp, LOCK_UN); @fclose($fp); 

me donne toujours la sortie de "écrit"

Signifie que le LOCK_NB est ignoré, tous les indices (tant sur winbdows que sur unix)

EDIT (2012-03-29 encore pas corrigé): https://bugs.php.net/bug.php?id=54453&edit=3 PHP Bug # 54453

    Lors de l'utilisation d'Apache + PHP, j'ai été trompé pour croire que LOCK_NB a été ignoré (ce n'était pas le cas, c'était le browser en attente de la première request pour finir).

    Parce que je faisais 2 requêtes avec le même browser, le browser attendait le premier appel pour terminer avant de faire le prochain (même en ignorant un en-tête "login: fermer").

    En utilisant 2 browsers distincts (dans mon cas Chrome + Firefox ou Chrome + wget sur le server), j'ai conclu que LOCK_NB fonctionnait très bien.

    Si un file en mode w + a été verrouillé avec LOCK_EX | LOCK_NB, tenter un autre LOCK_EX | LOCK_NB sur le même file est renvoyé faux (le comportement prévu).

    LOCK_NB fonctionne uniquement lorsque:

    1. Le file est verrouillé avec LOCK_SH et vous utilisez LOCK_EX|LOCK_NB
    2. Le file est verrouillé avec LOCK_EX et vous LOCK_SH|LOCK_NB un LOCK_SH|LOCK_NB

    LOCK_NB est ignoré si:

    1. Le file est verrouillé avec LOCK_EX et vous utilisez LOCK_EX|LOCK_NB
    2. Le file est verrouillé avec LOCK_SH et vous utilisez LOCK_SH|LOCK_NB

    Je suppose que c'est un bug? ou ils doivent faire un LOCK_NB2? J'ai signalé ceci comme un bug à PHP.NET.

    EDIT (2012-03-22 toujours pas corrigé): https://bugs.php.net/bug.php?id=54453&edit=3 PHP Bug # 54453