Atomiquement ajoutant une ligne dans un fichier et de le créer si il n'existe pas

Je suis en train de créer une fonction (pour les fins de l'enregistrement)

append($path, $data)

que

  1. crée $fichier si il n'existe pas et
  2. atomiquement ajoute $données.

Il

  • en charge de la simultanéité,
  • soutien de longues chaînes de caractères et
  • être aussi performante que possible.

Jusqu'à présent la meilleure tentative est:

function append($file, $data)
{
    //Ensure $file exists. Just opening it with 'w' or 'a' might cause
    //1 process to clobber another's.
    $fp = @fopen($file, 'x');
    if ($fp)
        fclose($fp);

    //Append
    $lock = strlen($data) > 4096; //assume PIPE_BUF is 4096 (Linux)

    $fp = fopen($file, 'a');
    if ($lock && !flock($fp, LOCK_EX))
        throw new Exception('Cannot lock file: '.$file);
    fwrite($fp, $data);
    if ($lock)
        flock($fp, LOCK_UN);
    fclose($fp);
}

Cela fonctionne bien, mais il semble être assez complexe. Est-il un nettoyeur intégré?) façon de le faire?

InformationsquelleAutor Jaka Jančar | 2012-02-01