[ Index ] |
|
Code source de SPIP 1.8.3 |
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 ?>
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
Généré le : Thu Feb 22 22:27:47 2007 | par Balluche grâce à PHPXref 0.7 |