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
- crée $fichier si il n'existe pas et
- 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?
Vous devez vous connecter pour publier un commentaire.
PHP a déjà une fonction intégrée pour ce faire, file_put_contents(). La syntaxe est la suivante:
Noter que
file_put_contents()
va créer le fichier s'il n'existe pas déjà (tant que vous disposez d'autorisations de système de fichiers pour le faire).:(
| LOCK_EX
et ça marchera.à l'aide de PHP de la fonction interne http://php.net/manual/en/function.file-put-contents.php
FILE_APPEND => "drapeau" pour ajouter du contenu à la fin du fichier
LOCK_EX => drapeau à empêcher quiconque de l'écriture pour le fichier dans le même temps (Disponible depuis PHP 5.1)