PHP Classes

File: classes/sys/file/sys-file-helper.php

Recommend this page to a friend!
  Classes of Gonzalo Chumillas   PHP Query   classes/sys/file/sys-file-helper.php   Download  
File: classes/sys/file/sys-file-helper.php
Role: Class source
Content type: text/plain
Description: Class source
Class: PHP Query
Parse and access XML documents as arrays
Author: By
Last change:
Date: 10 years ago
Size: 4,530 bytes
 

Contents

Class file image Download
<?php
/**
 * This file contains the SysFileHelper class.
 *
 * PHP Version 5.3
 *
 * @category FileSystem
 * @package SysFile
 * @author Gonzalo Chumillas <gonzalo@soloproyectos.com>
 * @license https://raw.github.com/soloproyectos/core/master/LICENSE BSD 2-Clause License
 * @link https://github.com/soloproyectos/core
 */
namespace com\soloproyectos\common\sys\file;
use
com\soloproyectos\common\text\TextHelper;
use
com\soloproyectos\common\sys\exception\SysException;

/**
 * Class SysFileHelper.
 *
 * This class is used to access to the file system.
 *
 * @category FileSystem
 * @package SysFile
 * @author Gonzalo Chumillas <gonzalo@soloproyectos.com>
 * @license https://raw.github.com/soloproyectos/core/master/LICENSE BSD 2-Clause License
 * @link https://github.com/soloproyectos/core
 */
class SysFileHelper
{
   
/**
     * Concatenates filenames.
     *
     * <p>This function concatenates several filenames into a new one. For
     * example:</p>
     *
     * <pre>// the next command prints "dir1/dir2/test.txt"
     * echo SysFile::concat("dir1", "/dir2", "test.txt");
     * </pre>
     *
     * @param string $file One or more files
     *
     * @return string
     */
   
public static function concat($file/*, ...*/)
    {
       
$args = array();
       
$len = func_num_args();
       
        for (
$i = 0; $i < $len; $i++) {
           
$value = func_get_arg($i);
           
$values = is_array($value)? array_values($value) : array($value);
           
$args = array_merge($args, $values);
        }
       
        return
TextHelper::concat("/", $args);
    }
   
   
/**
     * Gets a human readable size.
     *
     * <p>This function gets an human readable size. For example:</p>
     * <pre>// human readable sizes:
     * echo SysFile::getHumanSize(13); // prints 13 bytes
     * echo SysFile::getHumanSize(1024); // prints 1K
     * echo SysFile::getHumanSize(4562154, 2); // prints 4.35M (2 digits)
     * echo SysFile::getHumanSize(98543246875); // prints 91.8G
     * </pre>
     *
     * @param integer $size Size in bytes
     * @param integer $precision Digit precision (default is 1)
     *
     * @return string
     */
   
public static function getHumanSize($size, $precision = 1)
    {
       
$units = array(" bytes", "K", "M", "G", "T", "P", "E", "Z", "Y");
       
$pow = 1024;
       
$factor = 0;
       
        while (
$size + 1 > $pow) {
           
$size /= $pow;
           
$factor++;
        }
       
        return
round($size, $precision) . $units[$factor];
    }
   
   
/**
     * Gets an available name under a given directory.
     *
     * <p>This function returns an available name under a given directory. For
     * example, if there's a file named 'test.txt' under de directory 'dir1', the
     * following command returns 'test_1.txt':</p>
     *
     * <pre>// prints 'test_1.txt' if the name 'test.txt' is taken:
     * echo SysFile::getAvailName('dir1', 'test1.txt');
     * </pre>
     *
     * @param string $dir Directory
     * @param string $refname Filename used as reference (default is "")
     * @param string $refext Extension used as reference (default is "")
     *
     * @return string
     */
   
public static function getAvailName($dir, $refname = "", $refext = "")
    {
       
// fixes arguments
       
$dir = trim($dir);
       
$refname = trim($refname);
       
$refext = ltrim(trim($refext), ".");
       
        if (!
is_dir($dir)) {
            throw new
SysException("Directory not found: $dir");
        }
       
       
// default refname
       
if (TextHelper::isEmpty($refname)) {
           
$refname = "file";
        }
       
       
// gets name and extension
       
$refname = basename($refname);
       
$pos = strrpos($refname, ".");
       
$name = $refname;
       
$ext = $refext;
       
        if (
$pos !== false) {
           
$name = substr($refname, 0, $pos);
           
            if (
TextHelper::isEmpty($refext)) {
               
$ext = substr($refname, $pos + 1);
            }
        }
       
       
// gets an available name
       
for ($i = 0; $i < 100; $i++) {
           
$basename = $i > 0
               
? TextHelper::concat(".", $name . "_" . $i, $ext)
                :
TextHelper::concat(".", $name, $ext);
           
$filename = SysFile::concat($dir, $basename);
           
            if (!
is_file($filename)) {
                break;
            }
        }
       
        return
$filename;
    }
}