[ Index ]
 

Code source de Dotclear 1.2.5

Accédez au Source d'autres logiciels libresSoutenez Angelica Josefina !

title

Body

[fermer]

/inc/libs/ -> lib.files.php (source)

   1  <?php
   2  # ***** BEGIN LICENSE BLOCK *****
   3  # This file is part of DotClear.
   4  # Copyright (c) 2004 Olivier Meunier and contributors. All rights
   5  # reserved.
   6  #
   7  # DotClear is free software; you can redistribute it and/or modify
   8  # it under the terms of the GNU General Public License as published by
   9  # the Free Software Foundation; either version 2 of the License, or
  10  # (at your option) any later version.
  11  # 
  12  # DotClear is distributed in the hope that it will be useful,
  13  # but WITHOUT ANY WARRANTY; without even the implied warranty of
  14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  15  # GNU General Public License for more details.
  16  # 
  17  # You should have received a copy of the GNU General Public License
  18  # along with DotClear; if not, write to the Free Software
  19  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  20  #
  21  # ***** END LICENSE BLOCK *****
  22  
  23  class files
  24  {
  25  	function scandir($d,$order=0)
  26      {
  27          $res = array();
  28          if (($dh = @opendir($d)) !== false)
  29          {
  30              while (($f = readdir($dh)) !== false) {
  31                  $res[] = $f;
  32              }
  33              closedir($dh);
  34              
  35              sort($res);
  36              if ($order == 1) {
  37                  rsort($res);
  38              }
  39              
  40              return $res;
  41          }
  42          else
  43          {
  44              return false;
  45          }
  46      }
  47      
  48  	function isDeletable($f)
  49      {
  50          if (is_file($f)) {
  51              return is_writable(dirname($f));
  52          } elseif (is_dir($f)) {
  53              return (is_writable(dirname($f)) && count(files::scandir($f)) <= 2);
  54          }
  55      }
  56      
  57      # Suppression récursive d'un répertoire (rm -rf)
  58  	function deltree($dir)
  59      {
  60          $current_dir = opendir($dir);
  61          while($entryname = readdir($current_dir))
  62          {
  63              if (is_dir($dir.'/'.$entryname) and ($entryname != '.' and $entryname!='..'))
  64              {
  65                  if (!files::deltree($dir.'/'.$entryname)) {
  66                      return false;
  67                  }
  68              }
  69              elseif ($entryname != '.' and $entryname!='..')
  70              {
  71                  if (!@unlink($dir.'/'.$entryname)) {
  72                      return false;
  73                  }
  74              }
  75          }
  76          closedir($current_dir);
  77          return @rmdir($dir);
  78      }
  79      
  80  	function touch($f)
  81      {
  82          if (is_writable($f)) {
  83              $c = implode('',file($f));
  84              if ($fp = @fopen($f,'w')) {
  85                  fwrite($fp,$c,strlen($c));
  86                  fclose($fp);
  87              }            
  88          }
  89      }
  90      
  91  	function secureFile($f)
  92      {
  93          if (is_file($f))
  94          {
  95              @chmod($f,0600);
  96              if (is_readable($f)) {
  97                  return true;
  98              } else {
  99                  @chmod($f,0660);
 100                  if (is_readable($f)) {
 101                      return true;
 102                  } else {
 103                      @chmod($f,0666);
 104                  }
 105              }
 106          }
 107      }
 108      
 109  	function makeDir($f)
 110      {
 111          if (@mkdir($f,fileperms(dirname($f))) === false) {
 112              return false;
 113          }
 114          
 115          @chmod($f,fileperms(dirname($f)));
 116      }
 117      
 118  	function putContent($f, $f_content)
 119      {
 120          if (is_writable($f))
 121          {
 122              if ($fp = @fopen($f, 'w'))
 123              {
 124                  fwrite($fp,$f_content,strlen($f_content));
 125                  fclose($fp);
 126                  return true;
 127              }
 128          }
 129          
 130          return false;
 131      }
 132      
 133  	function size($size)
 134      {
 135          $kb = 1024;
 136          $mb = 1024 * $kb;
 137          $gb = 1024 * $mb;
 138          $tb = 1024 * $gb;
 139          
 140          if($size < $kb) {
 141              return $size." B";
 142          }
 143          else if($size < $mb) {
 144              return round($size/$kb,2)." KB";
 145          }
 146          else if($size < $gb) {
 147              return round($size/$mb,2)." MB";
 148          }
 149          else if($size < $tb) {
 150              return round($size/$gb,2)." GB";
 151          }
 152          else {
 153              return round($size/$tb,2)." TB";
 154          }
 155      }
 156      
 157      # Copier d'un fichier binaire distant
 158  	function copyRemote($src,$dest)
 159      {
 160          if (($fp1 = @fopen($src,'r')) === false)
 161          {
 162              return __('An error occured while downloading the file.');
 163          }
 164          else
 165          {
 166              if (($fp2 = @fopen($dest,'w')) === false)
 167              {
 168                  fclose($fp1);
 169                  return __('An error occured while writing the file.');
 170              }
 171              else
 172              {
 173                  while (($buffer = fgetc($fp1)) !== false) {
 174                      fwrite($fp2,$buffer);
 175                  }
 176                  fclose($fp1);
 177                  fclose($fp2);
 178                  return true;
 179              }
 180          }
 181      }
 182      
 183      
 184      # Fonctions de création de packages
 185      #
 186  	function getDirList($dirName)
 187      {
 188          static $filelist = array();
 189          static $dirlist = array(); 
 190          
 191          $exclude_list=array('.','..','.svn');
 192          
 193          if (empty($res)) {
 194              $res = array();
 195          }
 196          
 197          $dirName = preg_replace('|/$|','',$dirName);
 198          
 199          if (!is_dir($dirName)) {
 200              return false;
 201          }
 202          
 203          $dirlist[] = $dirName;
 204          
 205          $d = dir($dirName);
 206          while($entry = $d->read())
 207          {
 208              if (!in_array($entry,$exclude_list))
 209              {
 210                  if (is_dir($dirName.'/'.$entry))
 211                  {
 212                      if ($entry != 'CVS')
 213                      {
 214                          files::getDirList($dirName.'/'.$entry);
 215                      }
 216                  }
 217                  else
 218                  {
 219                      $filelist[] = $dirName.'/'.$entry;
 220                  }
 221              }
 222          }
 223          $d->close();
 224          
 225          return array('dirs'=>$dirlist, 'files'=>$filelist);
 226      }
 227      
 228  	function makePackage($name,$dir,$remove_path='',$gzip=true)
 229      {
 230          if ($gzip && !function_exists('gzcompress')) {
 231              return false;
 232          }
 233          
 234          if (($filelist = files::getDirList($dir)) === false) {
 235              return false;
 236          }
 237          
 238          $res = array ('name' => $name, 'dirs' => array(), 'files' => array());
 239          
 240          foreach ($filelist['dirs'] as $v) {
 241              $res['dirs'][] = preg_replace('/^'.preg_quote($remove_path,'/').'/','',$v);
 242          }
 243          
 244          foreach ($filelist['files'] as $v) {
 245              $f_content = base64_encode(file_get_contents($v));
 246              $v = preg_replace('/^'.preg_quote($remove_path,'/').'/','',$v);
 247              $res['files'][$v] = $f_content;
 248          }
 249          
 250          $res = serialize($res);
 251          
 252          if ($gzip) {
 253              $res = gzencode($res);
 254          }
 255          
 256          return $res;
 257      }
 258  }
 259  
 260  
 261  class path
 262  {
 263  	function real($p,$strict=true)
 264      {
 265          $os = (DIRECTORY_SEPARATOR == '\\') ? 'win' : 'nix';
 266          
 267          # Chemin absolu ou non ?
 268          if ($os == 'win') {
 269              $_abs = preg_match('/^\w+:/',$p);
 270          } else {
 271              $_abs = substr($p,0,1) == '/';
 272          }
 273          
 274          # Transformation du chemin, forme std
 275          if ($os == 'win') {
 276              $p = str_replace('\\','/',$p);
 277          }
 278          
 279          # Ajout de la racine du fichier appelant si 
 280          if (!$_abs) {
 281              $p = dirname($_SERVER['SCRIPT_FILENAME']).'/'.$p;
 282          }
 283          
 284          # Nettoyage
 285          $p = preg_replace('|/+|','/',$p);
 286          
 287          if (strlen($p) > 1) {
 288              $p = preg_replace('|/$|','',$p);
 289          }
 290          
 291          $_start = '';
 292          if ($os == 'win') {
 293              list($_start,$p) = explode(':',$p);
 294              $_start .= ':/';
 295          } else {
 296              $_start = '/';
 297          }
 298          $p = substr($p,1);
 299          
 300          # Parcours
 301          $P = explode('/',$p);
 302          $res = array();
 303          
 304          for ($i=0;$i<count($P);$i++)
 305          {
 306              if ($P[$i] == '.') {
 307                  continue;
 308              }
 309              
 310              if ($P[$i] == '..') {
 311                  if (count($res) > 0) {
 312                      array_pop($res);
 313                  }
 314              } else {
 315                  array_push($res,$P[$i]);
 316              }
 317          }
 318          
 319          $p = $_start.implode('/',$res);
 320          
 321          if ($strict && !@file_exists($p)) {
 322              return false;
 323          }
 324          
 325          return $p;
 326      }
 327  }
 328  ?>


Généré le : Fri Feb 23 21:40:15 2007 par Balluche grâce à PHPXref 0.7