Browse Source

Une fonction ecrire_fichier_calcule_si_modifie() pour ecrire les fichier produit automatiquement uniquement si leur contenu md5 change (on passe par un fichier intermediaire suffixe par .last qui reste tel quel si il n'est pas different du contenu deja existant)

+ utilisation dans la fonction produire_fond_statique()
pull/46/head
Cerdic 1 year ago
parent
commit
410e89c3c8
  1. 11
      ecrire/inc/filtres.php
  2. 28
      ecrire/inc/flock.php

11
ecrire/inc/filtres.php

@ -4646,15 +4646,8 @@ function produire_fond_statique($fond, $contexte = array(), $options = array(),
// mais on peut mettre un md5 du contenu, ce qui donne un aperu rapide si la feuille a change ou non
$comment .= "}\n md5:" . md5($contenu) . " */\n";
}
// et ecrire le fichier
ecrire_fichier($filename . ".last", $comment . $contenu);
// regarder si on recopie
if (!file_exists($filename)
or md5_file($filename) !== md5_file($filename . ".last")
) {
@copy($filename . ".last", $filename);
clearstatcache(true, $filename); // eviter que PHP ne reserve le vieux timestamp
}
// et ecrire le fichier si il change
ecrire_fichier_calcule_si_modifie($filename, $comment . $contenu, false, true);
}
return timestamp($filename);

28
ecrire/inc/flock.php

@ -322,6 +322,34 @@ function ecrire_fichier_securise($fichier, $contenu, $ecrire_quand_meme = false,
return ecrire_fichier($fichier, $contenu, $ecrire_quand_meme, $truncate);
}
/**
* @param string $fichier
* @param string $contenu
* @param bool $force
* @return bool
*/
function ecrire_fichier_calcule_si_modifie($fichier, $contenu, $force=false, $use_copy=false) {
$fichier_tmp = $fichier . '.last';
if (!ecrire_fichier($fichier_tmp, $contenu, true)){
return false;
}
if ($force
or !file_exists($fichier)
or md5_file($fichier) != md5_file($fichier_tmp)) {
if ($use_copy) {
@copy($fichier_tmp, $fichier);
}
else {
@rename($fichier_tmp, $fichier);
}
// eviter que PHP ne reserve le vieux timestamp
clearstatcache(true, $fichier);
}
return true;
}
/**
* Lire un fichier encapsulé en PHP
*

Loading…
Cancel
Save