123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328 |
- <?php
- # ***** BEGIN LICENSE BLOCK *****
- # This file is part of DotClear.
- # Copyright (c) 2004 Olivier Meunier and contributors. All rights
- # reserved.
- #
- # DotClear is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2 of the License, or
- # (at your option) any later version.
- #
- # DotClear is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with DotClear; if not, write to the Free Software
- # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- #
- # ***** END LICENSE BLOCK *****
- class files
- {
- function scandir($d,$order=0)
- {
- $res = array();
- if (($dh = @opendir($d)) !== false)
- {
- while (($f = readdir($dh)) !== false) {
- $res[] = $f;
- }
- closedir($dh);
-
- sort($res);
- if ($order == 1) {
- rsort($res);
- }
-
- return $res;
- }
- else
- {
- return false;
- }
- }
-
- function isDeletable($f)
- {
- if (is_file($f)) {
- return is_writable(dirname($f));
- } elseif (is_dir($f)) {
- return (is_writable(dirname($f)) && count(files::scandir($f)) <= 2);
- }
- }
-
- # Suppression récursive d'un répertoire (rm -rf)
- function deltree($dir)
- {
- $current_dir = opendir($dir);
- while($entryname = readdir($current_dir))
- {
- if (is_dir($dir.'/'.$entryname) and ($entryname != '.' and $entryname!='..'))
- {
- if (!files::deltree($dir.'/'.$entryname)) {
- return false;
- }
- }
- elseif ($entryname != '.' and $entryname!='..')
- {
- if (!@unlink($dir.'/'.$entryname)) {
- return false;
- }
- }
- }
- closedir($current_dir);
- return @rmdir($dir);
- }
-
- function touch($f)
- {
- if (is_writable($f)) {
- $c = implode('',file($f));
- if ($fp = @fopen($f,'w')) {
- fwrite($fp,$c,strlen($c));
- fclose($fp);
- }
- }
- }
-
- function secureFile($f)
- {
- if (is_file($f))
- {
- @chmod($f,0600);
- if (is_readable($f)) {
- return true;
- } else {
- @chmod($f,0660);
- if (is_readable($f)) {
- return true;
- } else {
- @chmod($f,0666);
- }
- }
- }
- }
-
- function makeDir($f)
- {
- if (@mkdir($f,fileperms(dirname($f))) === false) {
- return false;
- }
-
- @chmod($f,fileperms(dirname($f)));
- }
-
- function putContent($f, $f_content)
- {
- if (is_writable($f))
- {
- if ($fp = @fopen($f, 'w'))
- {
- fwrite($fp,$f_content,strlen($f_content));
- fclose($fp);
- return true;
- }
- }
-
- return false;
- }
-
- function size($size)
- {
- $kb = 1024;
- $mb = 1024 * $kb;
- $gb = 1024 * $mb;
- $tb = 1024 * $gb;
-
- if($size < $kb) {
- return $size." B";
- }
- else if($size < $mb) {
- return round($size/$kb,2)." KB";
- }
- else if($size < $gb) {
- return round($size/$mb,2)." MB";
- }
- else if($size < $tb) {
- return round($size/$gb,2)." GB";
- }
- else {
- return round($size/$tb,2)." TB";
- }
- }
-
- # Copier d'un fichier binaire distant
- function copyRemote($src,$dest)
- {
- if (($fp1 = @fopen($src,'r')) === false)
- {
- return __('An error occured while downloading the file.');
- }
- else
- {
- if (($fp2 = @fopen($dest,'w')) === false)
- {
- fclose($fp1);
- return __('An error occured while writing the file.');
- }
- else
- {
- while (($buffer = fgetc($fp1)) !== false) {
- fwrite($fp2,$buffer);
- }
- fclose($fp1);
- fclose($fp2);
- return true;
- }
- }
- }
-
-
- # Fonctions de création de packages
- #
- function getDirList($dirName)
- {
- static $filelist = array();
- static $dirlist = array();
-
- $exclude_list=array('.','..','.svn');
-
- if (empty($res)) {
- $res = array();
- }
-
- $dirName = preg_replace('|/$|','',$dirName);
-
- if (!is_dir($dirName)) {
- return false;
- }
-
- $dirlist[] = $dirName;
-
- $d = dir($dirName);
- while($entry = $d->read())
- {
- if (!in_array($entry,$exclude_list))
- {
- if (is_dir($dirName.'/'.$entry))
- {
- if ($entry != 'CVS')
- {
- files::getDirList($dirName.'/'.$entry);
- }
- }
- else
- {
- $filelist[] = $dirName.'/'.$entry;
- }
- }
- }
- $d->close();
-
- return array('dirs'=>$dirlist, 'files'=>$filelist);
- }
-
- function makePackage($name,$dir,$remove_path='',$gzip=true)
- {
- if ($gzip && !function_exists('gzcompress')) {
- return false;
- }
-
- if (($filelist = files::getDirList($dir)) === false) {
- return false;
- }
-
- $res = array ('name' => $name, 'dirs' => array(), 'files' => array());
-
- foreach ($filelist['dirs'] as $v) {
- $res['dirs'][] = preg_replace('/^'.preg_quote($remove_path,'/').'/','',$v);
- }
-
- foreach ($filelist['files'] as $v) {
- $f_content = base64_encode(file_get_contents($v));
- $v = preg_replace('/^'.preg_quote($remove_path,'/').'/','',$v);
- $res['files'][$v] = $f_content;
- }
-
- $res = serialize($res);
-
- if ($gzip) {
- $res = gzencode($res);
- }
-
- return $res;
- }
- }
- class path
- {
- function real($p,$strict=true)
- {
- $os = (DIRECTORY_SEPARATOR == '\\') ? 'win' : 'nix';
-
- # Chemin absolu ou non ?
- if ($os == 'win') {
- $_abs = preg_match('/^\w+:/',$p);
- } else {
- $_abs = substr($p,0,1) == '/';
- }
-
- # Transformation du chemin, forme std
- if ($os == 'win') {
- $p = str_replace('\\','/',$p);
- }
-
- # Ajout de la racine du fichier appelant si
- if (!$_abs) {
- $p = dirname($_SERVER['SCRIPT_FILENAME']).'/'.$p;
- }
-
- # Nettoyage
- $p = preg_replace('|/+|','/',$p);
-
- if (strlen($p) > 1) {
- $p = preg_replace('|/$|','',$p);
- }
-
- $_start = '';
- if ($os == 'win') {
- list($_start,$p) = explode(':',$p);
- $_start .= ':/';
- } else {
- $_start = '/';
- }
- $p = substr($p,1);
-
- # Parcours
- $P = explode('/',$p);
- $res = array();
-
- for ($i=0;$i<count($P);$i++)
- {
- if ($P[$i] == '.') {
- continue;
- }
-
- if ($P[$i] == '..') {
- if (count($res) > 0) {
- array_pop($res);
- }
- } else {
- array_push($res,$P[$i]);
- }
- }
-
- $p = $_start.implode('/',$res);
-
- if ($strict && !@file_exists($p)) {
- return false;
- }
-
- return $p;
- }
- }
- ?>
|