0byt3m1n1-V2
Path:
/
home
/
magalijoj
/
www
/
blog
/
inc
/
clearbricks
/
common
/
[
Home
]
File: lib.files.php
<?php # ***** BEGIN LICENSE BLOCK ***** # This file is part of Clearbricks. # Copyright (c) 2006 Olivier Meunier and contributors. All rights # reserved. # # Clearbricks 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. # # Clearbricks 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 Clearbricks; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # # ***** END LICENSE BLOCK ***** class files { public static function scandir($d,$order=0) { $res = array(); $dh = @opendir($d); if ($dh === false) { throw new Exception(__('Unable to open directory.')); } while (($f = readdir($dh)) !== false) { $res[] = $f; } closedir($dh); sort($res); if ($order == 1) { rsort($res); } return $res; } public static function getExtension($f) { $f = explode('.',basename($f)); if (count($f) <= 1) { return ''; } return strtolower($f[count($f)-1]); } public static function getMimeType($f) { $ext = self::getExtension($f); $types = self::mimeTypes(); if (isset($types[$ext])) { return $types[$ext]; } else { return 'text/plain'; } } public static function mimeTypes() { return array( 'odt' => 'application/vnd.oasis.opendocument.text', 'odp' => 'application/vnd.oasis.opendocument.presentation', 'ods' => 'application/vnd.oasis.opendocument.spreadsheet', 'sxw' => 'application/vnd.sun.xml.writer', 'sxc' => 'application/vnd.sun.xml.calc', 'sxi' => 'application/vnd.sun.xml.impress', 'ppt' => 'application/mspowerpoint', 'doc' => 'application/msword', 'xls' => 'application/msexcel', 'rtf' => 'application/rtf', 'pdf' => 'application/pdf', 'ps' => 'application/postscript', 'ai' => 'application/postscript', 'eps' => 'application/postscript', 'bin' => 'application/octet-stream', 'exe' => 'application/octet-stream', 'deb' => 'application/x-debian-package', 'gz' => 'application/x-gzip', 'jar' => 'application/x-java-archive', 'rar' => 'application/rar', 'rpm' => 'application/x-redhat-package-manager', 'tar' => 'application/x-tar', 'tgz' => 'application/x-gtar', 'zip' => 'application/zip', 'aiff' => 'audio/x-aiff', 'ua' => 'audio/basic', 'mp3' => 'audio/mpeg3', 'mid' => 'audio/x-midi', 'midi' => 'audio/x-midi', 'ogg' => 'application/ogg', 'wav' => 'audio/x-wav', 'swf' => 'application/x-shockwave-flash', 'swfl' => 'application/x-shockwave-flash', 'bmp' => 'image/bmp', 'gif' => 'image/gif', 'jpeg' => 'image/jpeg', 'jpg' => 'image/jpeg', 'jpe' => 'image/jpeg', 'png' => 'image/png', 'tiff' => 'image/tiff', 'tif' => 'image/tiff', 'xbm' => 'image/x-xbitmap', 'css' => 'text/css', 'js' => 'text/javascript', 'html' => 'text/html', 'htm' => 'text/html', 'txt' => 'text/plain', 'rtf' => 'text/richtext', 'rtx' => 'text/richtext', 'mpg' => 'video/mpeg', 'mpeg' => 'video/mpeg', 'mpe' => 'video/mpeg', 'viv' => 'video/vnd.vivo', 'vivo' => 'video/vnd.vivo', 'qt' => 'video/quicktime', 'mov' => 'video/quicktime', 'flv' => 'video/x-flv', 'avi' => 'video/x-msvideo' ); } public static 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); } } # Recusive remove (rm -rf) public static 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); } public static function touch($f) { if (is_writable($f)) { if (function_exists('touch')) { @touch($f); } else { # Very bad hack @file_put_contents($f,file_get_contents($f)); } } } public static function makeDir($f,$r=false) { if (empty($f)) { return; } if (DIRECTORY_SEPARATOR == '\\') { $f = str_replace('/','\\',$f); } if (is_dir($f)) { return; } if ($r) { $dir = path::real($f,false); $dirs = array(); while (!is_dir($dir)) { array_unshift($dirs,basename($dir)); $dir = dirname($dir); } foreach ($dirs as $d) { $dir .= DIRECTORY_SEPARATOR.$d; if ($d != '' && !is_dir($dir)) { self::makeDir($dir); } } } else { if (@mkdir($f) === false) { throw new Exception(__('Unable to create directory.')); } chmod($f,fileperms(dirname($f))); } } public static function putContent($f, $f_content) { if (file_exists($f) && !is_writable($f)) { throw new Exception(__('File is not writable.')); } $fp = @fopen($f, 'w'); if ($fp === false) { throw new Exception(__('Unable to open file.')); } fwrite($fp,$f_content,strlen($f_content)); fclose($fp); return true; } public static 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"; } } public static function str2bytes($v) { $v = trim($v); $last = strtolower(substr($v,-1,1)); switch($last) { case 'g': $v *= 1024; case 'm': $v *= 1024; case 'k': $v *= 1024; } return $v; } public static function uploadStatus($file) { if (!isset($file['error'])) { throw new Exception(__('Not an uploaded file.')); } switch ($file['error']) { case UPLOAD_ERR_OK: return true; case UPLOAD_ERR_INI_SIZE: case UPLOAD_ERR_FORM_SIZE: throw new Exception(__('The uploaded file exceeds the maximum file size allowed.')); return false; case UPLOAD_ERR_PARTIAL: throw new Exception(__('The uploaded file was only partially uploaded.')); return false; case UPLOAD_ERR_NO_FILE: throw new Exception(__('No file was uploaded.')); return false; case UPLOAD_ERR_NO_TMP_DIR: throw new Exception(__('Missing a temporary folder.')); return false; case UPLOAD_ERR_CANT_WRITE: throw new Exception(__('Failed to write file to disk.')); return false; default: return true; } } # Packages generation methods # public static function getDirList($dirName, &$contents = null) { if (!$contents) { $contents = array('dirs'=> array(),'files' => array()); } $exclude_list=array('.','..','.svn'); if (empty($res)) { $res = array(); } $dirName = preg_replace('|/$|','',$dirName); if (!is_dir($dirName)) { throw new Exception(sprintf(__('%s is not a directory.'),$dirName)); } $contents['dirs'][] = $dirName; $d = @dir($dirName); if ($d === false) { throw new Exception(__('Unable to open directory.')); } while($entry = $d->read()) { if (!in_array($entry,$exclude_list)) { if (is_dir($dirName.'/'.$entry)) { files::getDirList($dirName.'/'.$entry, $contents); } else { $contents['files'][] = $dirName.'/'.$entry; } } } $d->close(); return $contents; } public static function makePackage($name,$dir,$remove_path='',$gzip=true) { if ($gzip && !function_exists('gzcompress')) { throw new Exception(__('No compression functions')); } if (($filelist = files::getDirList($dir)) === false) { throw new Exception(__('Unable to list directory.')); } $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; } public static function installPackage($package,$with_remove=true) { $dest_path = dirname($package); if (($content = @implode('',@gzfile($package))) === false) { if ($with_remove) { unlink($package); } throw new Exception(__('Cannot open file.')); } if (($list = @unserialize($content)) === false) { if ($with_remove) { unlink($package); } throw new Exception(__('Package not valid.')); } unset($content); if (is_dir($dest_path.'/'.$list['name'])) { unlink($package); throw new Exception(__('This package is already installed. Delete it before.')); } foreach ($list['dirs'] as $d) { mkdir($dest_path.'/'.$d,fileperms($dest_path)); chmod($dest_path.'/'.$d,fileperms($dest_path)); } foreach ($list['files'] as $f => $v) { $v = base64_decode($v); $fp = fopen($dest_path.'/'.$f,'w'); fwrite($fp,$v,strlen($v)); fclose($fp); chmod($dest_path.'/'.$f,fileperms($dest_path) & ~0111); } unlink($package); return true; } public static function tidyFileName($n) { $n = preg_replace('/^[.]/u','',$n); return preg_replace('/[^A-Za-z0-9._-]/u','_',$n); } } class path { public static function real($p,$strict=true) { $os = (DIRECTORY_SEPARATOR == '\\') ? 'win' : 'nix'; # Absolute path? if ($os == 'win') { $_abs = preg_match('/^\w+:/',$p); } else { $_abs = substr($p,0,1) == '/'; } # Standard path form if ($os == 'win') { $p = str_replace('\\','/',$p); } # Adding root if !$_abs if (!$_abs) { $p = dirname($_SERVER['SCRIPT_FILENAME']).'/'.$p; } # Clean up $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); # Go through $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; } public static function clean($p) { $p = str_replace('..','',$p); $p = preg_replace('|/{2,}|','/',$p); $p = preg_replace('|/$|','',$p); return $p; } public static function info($f) { $p = pathinfo($f); $res = array(); $res['dirname'] = $p['dirname']; $res['basename'] = $p['basename']; $res['extension'] = isset($p['extension']) ? $p['extension'] : ''; $res['base'] = preg_replace('/\.'.preg_quote($res['extension'],'/').'$/','',$res['basename']); return $res; } public static function fullFromRoot($p,$root) { if (substr($p,0,1) == '/') { return $p; } return $root.'/'.$p; } } ?>
©
2018.