[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/kcfinder/lib/ -> helper_dir.php (source)

   1  <?php
   2  
   3  /** This file is part of KCFinder project
   4    *
   5    *      @desc Directory helper class
   6    *   @package KCFinder
   7    *   @version 2.21
   8    *    @author Pavel Tzonkov <[email protected]>
   9    * @copyright 2010 KCFinder Project
  10    *   @license http://www.opensource.org/licenses/gpl-2.0.php GPLv2
  11    *   @license http://www.opensource.org/licenses/lgpl-2.1.php LGPLv2
  12    *      @link http://kcfinder.sunhater.com
  13    */
  14  
  15  class dir {
  16  
  17    /** Checks if the given directory is really writable. The standard PHP
  18      * function is_writable() does not work properly on Windows servers
  19      * @param string $dir
  20      * @return bool */
  21  
  22      static function isWritable($dir) {
  23          $dir = path::normalize($dir);
  24          if (!is_dir($dir))
  25              return false;
  26          $i = 0;
  27          do {
  28              $file = "$dir/is_writable_" . md5($i++);
  29          } while (file_exists($file));
  30          if (!@touch($file))
  31              return false;
  32          unlink($file);
  33          return true;
  34      }
  35  
  36    /** Recursively delete the given directory. Returns TRUE on success.
  37      * If $firstFailExit parameter is true (default), the method returns the
  38      * path to the first failed file or directory which cannot be deleted.
  39      * If $firstFailExit is false, the method returns an array with failed
  40      * files and directories which cannot be deleted. The third parameter
  41      * $failed is used for internal use only.
  42      * @param string $dir
  43      * @param bool $firstFailExit
  44      * @param array $failed
  45      * @return mixed */
  46  
  47      static function prune($dir, $firstFailExit=true, array $failed=null) {
  48          if ($failed === null) $failed = array();
  49          $files = self::content($dir);
  50          if ($files === false) {
  51              if ($firstFailExit)
  52                  return $dir;
  53              $failed[] = $dir;
  54              return $failed;
  55          }
  56  
  57          foreach ($files as $file) {
  58              if (is_dir($file)) {
  59                  $failed_in = self::prune($file, $firstFailExit, $failed);
  60                  if ($failed_in !== true) {
  61                      if ($firstFailExit)
  62                          return $failed_in;
  63                      if (is_array($failed_in))
  64                          $failed = array_merge($failed, $failed_in);
  65                      else
  66                          $failed[] = $failed_in;
  67                  }
  68              } elseif (!@unlink($file)) {
  69                  if ($firstFailExit)
  70                      return $file;
  71                  $failed[] = $file;
  72              }
  73          }
  74  
  75          if (!@rmdir($dir)) {
  76              if ($firstFailExit)
  77                  return $dir;
  78              $failed[] = $dir;
  79          }
  80  
  81          return count($failed) ? $failed : true;
  82      }
  83  
  84    /** Get the content of the given directory. Returns an array with filenames
  85      * or FALSE on failure
  86      * @param string $dir
  87      * @param array $options
  88      * @return mixed */
  89  
  90      static function content($dir, array $options=null) {
  91  
  92          $defaultOptions = array(
  93              'types' => "all",   // Allowed: "all" or possible return values
  94                                  // of filetype(), or an array with them
  95              'addPath' => true,  // Whether to add directory path to filenames
  96              'pattern' => '/./', // Regular expression pattern for filename
  97              'followLinks' => true
  98          );
  99  
 100          if (!is_dir($dir) || !is_readable($dir))
 101              return false;
 102  
 103          if (strtoupper(substr(PHP_OS, 0, 3)) == "WIN")
 104              $dir = str_replace("\\", "/", $dir);
 105          $dir = rtrim($dir, "/");
 106  
 107          $dh = @opendir($dir);
 108          if ($dh === false)
 109              return false;
 110  
 111          if ($options === null)
 112              $options = $defaultOptions;
 113  
 114          foreach ($defaultOptions as $key => $val)
 115              if (!isset($options[$key]))
 116                  $options[$key] = $val;
 117  
 118          $files = array();
 119          while (($file = @readdir($dh)) !== false) {
 120              $type = filetype("$dir/$file");
 121  
 122              if ($options['followLinks'] && ($type === "link")) {
 123                  $lfile = "$dir/$file";
 124                  do {
 125                      $ldir = dirname($lfile);
 126                      $lfile = @readlink($lfile);
 127                      if (substr($lfile, 0, 1) != "/")
 128                          $lfile = "$ldir/$lfile";
 129                      $type = filetype($lfile);
 130                  } while ($type == "link");
 131              }
 132  
 133              if ((($type === "dir") && (($file == ".") || ($file == ".."))) ||
 134                  !preg_match($options['pattern'], $file)
 135              )
 136                  continue;
 137  
 138              if (($options['types'] === "all") || ($type === $options['types']) ||
 139                  ((is_array($options['types'])) && in_array($type, $options['types']))
 140              )
 141                  $files[] = $options['addPath'] ? "$dir/$file" : $file;
 142          }
 143          closedir($dh);
 144          usort($files, "dir::fileSort");
 145          return $files;
 146      }
 147  
 148      static function fileSort($a, $b) {
 149          if (function_exists("mb_strtolower")) {
 150              $a = mb_strtolower($a);
 151              $b = mb_strtolower($b);
 152          } else {
 153              $a = strtolower($a);
 154              $b = strtolower($b);
 155          }
 156          if ($a == $b) return 0;
 157          return ($a < $b) ? -1 : 1;
 158      }
 159  }
 160  
 161  ?>


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1