boxcore
10/24/2018 - 4:51 AM

File And DIR PHP funs

file_dir.fn.php

/**
 * 遍历目录文件 输出 ul li html格式
 */
function tree($directory) { 
    if(is_dir($dfairectory)) {
        //返回一个 Directory 类实例
        $mydir = dir($directory);
        echo "<ul>\n";
        //从目录句柄中读取条目
        while($file = $mydir->read()) {
            if(is_dir("$directory/$file") && $file != "." && $file != "..") {
                echo "<li><font color=\"#ff00cc\"><b>$file</b></font></li>\n";
                //递归读取目录 
                tree("$directory/$file");
            } elseif ($file != "." && $file != "..") {
                echo "<li>$file</li>\n";
            }

        }
        echo "</ul>\n";
        // 释放目录句柄
        $mydir->close();
    } else {
        echo $directory . '<br>';
    }

}
<?php

/**
 * 文件相关处理函数
 *
 * @created 2016-06-13
 * @author boxcore
 */

/**
 * 格式化容量大小
 *
 * @author boxcore
 * @date   2015-06-26
 * @param  文件大小     $size 格式Bytes
 * @return string
 */
function format_size($size){
    if ($size >= 1073741824){
        $size = round($size / 1073741824 * 100) / 100 . ' GB';
    }
    elseif ($size >= 1048576){
        $size = round($size / 1048576 * 100) / 100 . ' MB';
    }
    elseif ($size >= 1024){
        $size = round($size / 1024 * 100) / 100 . ' KB';
    }
    else{
        $size = $size . ' Bytes';
    }

    return $size;
}


/**
 * 生成文件目录 (无返回值)
 *
 * @author boxcore
 * @date   2016-04-26
 * @param  string     $file 文件绝对路径
 */
function mk_file_dir($file = ''){
    $str = substr( $file, 0, strrpos($file,'/') );
    mkdirs($str);
}

/**
 * 递归生成目录
 *
 * @author boxcore
 * @date   2016-04-26
 * @param  string     $dir  目录地址
 * @param  integer    $mode
 * @return bool
 */
if(!function_exists('mkdirs')){
    function mkdirs($dir,$mode=0777) {
        if( ! is_dir( $dir ) )  {  
            if( ! mkdirs( dirname($dir) ) ) {  
                return false;  
            }  
            if( ! mkdir($dir,$mode) ) {  
                return false;  
            }  
        }  
        return true;
    }
}


/**
 * 高效率计算文件行数
 *
 * @author boxcore
 * @date   2016-04-26
 * @param  string     $file
 * @return int
 */
function count_line($file){
    $fp=fopen($file, "r");
    $i=0;
    while(!feof($fp)) {
        //每次读取2M
        if($data=fread($fp,1024*1024*2)){
            //计算读取到的行数
            $num=substr_count($data,"n");
            $i+=$num;
        }
    }
    fclose($fp);
    return $i;
}

function append_to_log($content, $url)
{
    if ( !($fp = @fopen($url, "a")) ) {
        return false;
    }
    $now = date('Y-m-d H:i:s');
    fwrite($fp, "$now $content\n");
    fclose($fp);

    return true;
}

/**
 * 格式化获取文件大小(未完成)
 *
 * @author boxcore
 * @date   2016-09-29
 * @param  string     $file_url [description]
 * @return [type]               [description]
 */
function get_file_size($filename=''){
    if(!$filename) return false;

    return filesize($filename);
}

/**
 * 获取文件长度(未完成)
 *
 * @author boxcore
 * @date   2016-09-29
 * @param  [type]     $filename [description]
 * @return [type]               [description]
 */
function get_file_lenth($filename){
    // 文件已经在内存中,用 strlen 计算长度
    $content = file_get_contents($filename);
    return strlen($content);
}

/**
 * 获取文件末尾n行内容(未完成)
 * 
 *
 * @author boxcore
 * @date   2016-09-29
 * @param  [type]     $file       [description]
 * @param  integer    $num_to_get [description]
 * @return [type]                 [description]
 * @url http://ju.outofmemory.cn/entry/101499
 */
function ftail($file, $num_to_get=10)
{
    $fp = fopen($file, 'r');
    $position = filesize($file);
    fseek($fp, $position-1);
    $chunklen = 4096;
    while($position >= 0){
        $position = $position - $chunklen;
        if ($position < 0) {
            $chunklen = abs($position);
            $position=0;
        }
        fseek($fp, $position);
        $data = fread($fp, $chunklen). $data;
        if (substr_count($data, "\n") >= $num_to_get + 1){
            preg_match("!(.*?\n){".($num_to_get-1)."}$!", $data, $match);
            return $match[0];
        }
    }

    fclose($fp);

    return $data;
}