[ Index ]
 

Code source de SPIP 1.8.3

Accédez au Source d'autres logiciels libres | Soutenez Angelica Josefina !

title

Body

[fermer]

/ecrire/ -> inc_flock.php3 (source)

   1  <?php
   2  
   3  /***************************************************************************\
   4   *  SPIP, Systeme de publication pour l'internet                           *
   5   *                                                                         *
   6   *  Copyright (c) 2001-2005                                                *
   7   *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
   8   *                                                                         *
   9   *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
  10   *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
  11  \***************************************************************************/
  12  
  13  
  14  //
  15  // Ce fichier ne sera execute qu'une fois
  16  if (defined("_ECRIRE_INC_FLOCK")) return;
  17  define("_ECRIRE_INC_FLOCK", "1");
  18  
  19  function spip_file_get_contents ($fichier) {
  20      if (substr($fichier, -3) != '.gz') {
  21          if (function_exists('file_get_contents')
  22          AND os_serveur != 'windows') # windows retourne ''
  23              return @file_get_contents ($fichier);
  24          else
  25              return join('', @file($fichier));
  26      } else
  27              return join('', @gzfile($fichier));
  28  }
  29  
  30  // options = array(
  31  // 'phpcheck' => 'oui' # verifier qu'on a bien du php
  32  // dezippe automatiquement les fichiers .gz
  33  function lire_fichier ($fichier, &$contenu, $options=false) {
  34      $contenu = '';
  35      if (!@file_exists($fichier))
  36          return false;
  37  
  38      #spip_timer('lire_fichier');
  39  
  40      if ($fl = @fopen($fichier, 'r')) {
  41  
  42          // verrou lecture
  43          @flock($fl, LOCK_SH);
  44  
  45          // a-t-il ete supprime par le locker ?
  46          if (!@file_exists($fichier)) {
  47              @fclose($fl);
  48              return false;
  49          }
  50  
  51          // lire le fichier
  52          $contenu = spip_file_get_contents($fichier);
  53  
  54          // liberer le verrou
  55          @flock($fl, LOCK_UN);
  56          @fclose($fl);
  57  
  58          // Verifications
  59          $ok = true;
  60          if ($options['phpcheck'] == 'oui')
  61              $ok &= (ereg("[?]>\n?$", $contenu));
  62  
  63          #spip_log("$fread $fichier ".spip_timer('lire_fichier'));
  64          if (!$ok)
  65              spip_log("echec lecture $fichier");
  66  
  67          return $ok;
  68      }
  69  }
  70  
  71  
  72  //
  73  // Ecrire un fichier de maniere un peu sure
  74  //
  75  // zippe les fichiers .gz
  76  function ecrire_fichier ($fichier, $contenu, $ecrire_quand_meme = false) {
  77  
  78      // Ne rien faire si on est en preview, debug, ou si une erreur
  79      // grave s'est presentee (compilation du squelette, MySQL, etc)
  80      if (($GLOBALS['var_preview'] OR ($GLOBALS['var_mode'] == 'debug')
  81      OR defined('spip_interdire_cache'))
  82      AND !$ecrire_quand_meme)
  83          return;
  84  
  85      $gzip = (substr($fichier, -3) == '.gz');
  86  
  87      #spip_timer('ecrire_fichier');
  88  
  89      // verrouiller le fichier destination
  90      if ($fp = @fopen($fichier, 'a'))
  91          @flock($fp, LOCK_EX);
  92      else
  93          return false;
  94  
  95      // ecrire les donnees, compressees le cas echeant
  96      // (on ouvre un nouveau pointeur sur le fichier, ce qui a l'avantage
  97      // de le recreer si le locker qui nous precede l'avait supprime...)
  98      if ($gzip) $contenu = gzencode($contenu);
  99      @ftruncate($fp,0);
 100      $s = @fputs($fp, $contenu, $a = strlen($contenu));
 101  
 102      $ok = ($s == $a);
 103  
 104      // liberer le verrou et fermer le fichier
 105      @flock($fp, LOCK_UN);
 106      @fclose($fp);
 107  
 108      if (!$ok) {
 109          spip_log("echec ecriture fichier $fichier");
 110          @unlink($fichier);
 111      }
 112  
 113      return $ok;
 114  }
 115  
 116  //
 117  // Supprimer le fichier de maniere sympa (flock)
 118  //
 119  function supprimer_fichier($fichier) {
 120      if (!@file_exists($fichier))
 121          return;
 122  
 123      // verrouiller le fichier destination
 124      if ($fp = @fopen($fichier, 'a'))
 125          @flock($fp, LOCK_EX);
 126      else
 127          return;
 128  
 129      // liberer le verrou
 130      @flock($fp, LOCK_UN);
 131      @fclose($fp);
 132  
 133      // supprimer
 134      @unlink($fichier);
 135  }
 136  
 137  ?>


Généré le : Thu Feb 22 22:27:47 2007 par Balluche grâce à PHPXref 0.7