Вход Регистрация
Файл: inc/AjexFileManager/ajax/php/lib.php
Строк: 273
<?php
/**
 * Ajex.FileManager
 * http://demphest.ru/ajex-filemanager
 *
 * @version
 * 1.0.3
 *
 * @copyright
 * Copyright (C) 2009-2010 Demphest Gorphek
 *
 * @license
 * Dual licensed under the MIT and GPL licenses.
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Ajex.FileManager is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This file is part of Ajex.FileManager.
 */


isset($_GET['isWork'])? isWork() : null;

if (isset(
$_GET['downloadFile'])) {

    
$file realpath($cfg['root'] . trim($_GET['downloadFile'], '/\'));
    $file = str_replace('
\', DIR_SEP, $file);
    if (empty($file) || false === strpos($file, str_replace('
\', DIR_SEP, $cfg['root']))) {
        header("HTTP/1.0 404 Not Found");
        exit;
    }

    $inf = pathinfo($file);
    if (!in_array($inf['
extension'], $cfg['allow']['file'])) {
        header("HTTP/1.0 404 Not Found");
        exit;
    }
    $inf['
size'] = filesize($file);

    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: private", false);
    header("Content-Disposition: attachment; filename=" . urlencode($inf['
basename']));
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    header("Content-Description: File Transfer");
    header("Content-Length: " . $inf['
size']);

    if (50000000 > $inf['
size']) {
        flush();
        $fp = fopen($file, "r");
        while (!feof($fp)) {
            echo fread($fp, 65536);
            flush();
        }
        fclose($fp);
    } else {
        readfile($file);
    }

    exit;
}

function listDirs($dir)
{
    global $cfg;
    $list    = array();

    $full    = $cfg['
root'] . trim($dir, '/\') . DIR_SEP;
    $dirs    = scandir($full);
    for ($i=-1, $iCount=count($dirs); ++$i<$iCount;) {
        if (is_dir($full . $dirs[$i]) && !in_array($dirs[$i], $cfg['
hide']['folder'])) {
            $stats = getSize($full . $dirs[$i] . DIR_SEP, '
dir');
            $list[] = array(
                        '
title'        => $dirs[$i] . ' <i>' . $stats['_size'] . '</i>',
                        '
key'        => urlencode($dir . $dirs[$i]),
                        '
isLazy'    => true,
                        '
isFolder'    => true
                );
        }
    }

    return $list;
}

function listFiles($dir)
{
    global $cfg;
    $list = array();

    $full        = $cfg['
root'] . trim($dir, '/\') . DIR_SEP;
    $thumb    = $cfg['
root'] . $cfg['thumb']['dir'] . DIR_SEP . trim($dir, '/\') . DIR_SEP;

    $files = scandir($full);
    natcasesort($files);
    for ($i=-1, $iCount=count($files); ++$i<$iCount;) {
        $ext = substr($files[$i], strrpos($files[$i], '
.') + 1);
        $ext = strtolower($ext);

        if (!in_array($files[$i], $cfg['
hide']['file']) && !in_array($ext, $cfg['deny'][$cfg['type']]) && in_array($ext, $cfg['allow'][$cfg['type']]) && is_file($full . $files[$i])) {

            $imgSize = array(0, 0);
            if (in_array($ext, $cfg['
allow']['image'])) {
                if ($cfg['
thumb']['auto'] && !file_exists($thumb . $files[$i])) {
                    create_thumbnail($full . $files[$i], $thumb . $files[$i]);
                }
                $imgSize = getimagesize($full . $files[$i]);
            }

            $stats = getSize($full . $files[$i]);

            $list[] = array(    '
name'    => $files[$i],
                                '
ext'        => $ext,
                                '
width'    => $imgSize[0],
                                '
height'    => $imgSize[1],
                                '
size'        => $stats['_size'],
                                '
date'        => date($cfg['thumb']['date'], $stats['mtime']),
                                '
r_size'    => $stats['size'],
                                '
mtime'    => $stats['mtime'],
                                '
thumb'    => '/' . $cfg['url'] . '/' . $cfg['thumb']['dir'] . '/' . $dir . $files[$i]
                );
        }
    }

    switch($cfg['
sort']) {
        case '
size':
            usort($list, '
sortSize');
            break;
        case '
date':
            usort($list, '
sortDate');
            break;
        default:    //name
            break;
    }

    return $list;
}


function dirSize($dirFile)
{
    $size = 0;
    $dir = opendir($dirFile);
    if (!$dir) return false;

    while (false !== ($f = readdir($dir))) {
        if ($f[0] == '
.') continue;
        if (is_dir($dirFile . $f)) {
            $size += dirSize($dirFile . $f . DIR_SEP);
        } else {
            $size += filesize($dirFile . $f);
        }
    }
    closedir($dir);
    return $size;
}

function getSize($dirFile, $mode = '
file')
{
    if ('
file' == $mode) {
        $stats = stat($dirFile);
    } elseif ('
dir' == $mode) {
        $stats['
size'] = dirSize($dirFile);
    }

    if (empty($stats['
size'])) {
        $stats['
_size'] = '';
    } elseif ($stats['
size'] < 1024) {
        $stats['
_size'] .= ' B';
    } elseif ($stats['
size'] < 1048576) {
        $stats['
_size'] = round($stats['size'] / 1024) . ' KB';
    } else {
        $stats['
_size'] = round($stats['size'] / 1048576, 2) . ' MB';
    }

    return $stats;
}


function create_thumbnail($orig_fname, $thum_fname, $thumb_width = null, $thumb_height = null, $quality = null, $do_cut = null, $uploadResize = false)
{
    if (!mkdirs(dirname($thum_fname))) {
        return false;
    }

    $size    = @getimagesize($orig_fname);
    if (false === $size) {
        return false;
    }

    $rgb    = 0xFFFFFF;
    $src_x = $src_y = 0;

    $format    = strtolower(substr($size['
mime'], strpos($size['mime'], '/') + 1));
    $icfunc    = '
imagecreatefrom' . $format;
    if (!function_exists($icfunc)) {
        return false;
    }

    0 === $thumb_width? $thumb_width = $size[0] : null;
    0 === $thumb_height? $thumb_height = $size[1] : null;

    global $cfg;
    null === $thumb_width?        $thumb_width    = $cfg['
thumb']['width'] : null;
    null === $thumb_height?    $thumb_height    = $cfg['
thumb']['height']: null;
    null === $quality?        $quality    = $cfg['
thumb']['quality']    : null;
    null === $do_cut?    $do_cut    = $cfg['
thumb']['cut']    : null;

    $path = pathinfo($thum_fname);
    if (!is_dir($path['
dirname'])) {
        $is = mkdir($path['
dirname'], $cfg['chmod']['folder']);
        if (!$is) {
            return false;
        }
    }

    $orig_img = $icfunc($orig_fname);
    if (($size[0] <= $thumb_width) && ($size[1] <= $thumb_height)) {
        $width  = $size[0];
        $height = $size[1];

    } else {
        $width  = $thumb_width;
        $height = $thumb_height;

        $ratio_width  = $size[0] / $thumb_width;
        $ratio_height = $size[1] / $thumb_height;

        if ($ratio_width < $ratio_height) {
            if ($do_cut) {
                $src_y = ($size[1] - $thumb_height * $ratio_width) / 2;
                $size[1] = $thumb_height * $ratio_width;
            } else {
                $width  = $size[0] / $ratio_height;
                $height = $thumb_height;
            }

        } else {
            if ($do_cut) {
                $src_x = ($size[0] - $thumb_width * $ratio_height) / 2;
                $size[0] = $thumb_width * $ratio_height;
            } else {
                $width  = $thumb_width;
                $height = $size[1] / $ratio_width;
            }

        }
    }

    $thum_img = imagecreatetruecolor($width, $height);
    imagefill($thum_img, 0, 0, $rgb);
    imagecopyresampled($thum_img, $orig_img, 0, 0, $src_x, $src_y, $width, $height, $size[0], $size[1]);

    //if (function_exists($image_ = '
image' . $format)) {
        //$image_($thum_img, $thum_fname, $quality);
    //} else {
        imagejpeg($thum_img, $thum_fname, $quality);
    //}

    flush();
    imagedestroy($orig_img);
    imagedestroy($thum_img);

    return true;
}

function getFreeFileName($fileName, $dir)
{
    global $cfg;
    $dir = rtrim($dir, DIR_SEP) . DIR_SEP;

    $fileName = mb_strtolower($fileName, '
utf-8');

    $strlen = mb_strlen($fileName, '
utf-8');
    $dotPos= mb_strpos($fileName, '
.', null, 'utf-8');

    $fname = mb_substr($fileName, 0, $dotPos, '
utf-8');
    $format = mb_substr($fileName, $dotPos+1, ($strlen-$dotPos), '
utf-8');

    if (file_exists($langPhp = dirname(__FILE__) . DIR_SEP . '
lang' . DIR_SEP . $cfg['lang'] . '.php')) {
        require_once $langPhp;
    }

    if (!function_exists('
translit')) {
        function translit($str) {
            return $str;
        }
    }

    $fname = translit($fname);
    $f = $fname . '
.' . $format;

    if (file_exists($dir . $f)) {


        if (false !== ($pos = strrpos($f, '
_')) && !in_array($f{$pos+1}, array(0,1,2,3,4,5,6,7,8,9))) {
            $symname = substr($f, 0, $pos);
        } else {
            $symname = $fname;
        }


        $symname = $fname;

        $i = 0;
        $exist = true;
        while ($exist && ++$i < 777) {// :)
            $new_name = $symname . '
_(' . $i . ').' . $format;
            if (!file_exists($dir . $new_name)) {
                $exist = false;
                $f = $new_name;
            }
        }
    }

    return $f;
}

function deleteDir($dirname)
{
    global $cfg;

    if (!file_exists($dirname)) {
        return false;
    }

    if (is_file($dirname)) {
        return unlink($dirname);
    }

    $dir = dir($dirname);
    while (false !== $entry = $dir->read()) {
        if ('
.' == $entry || '..' == $entry) {
            continue;
        }

        deleteDir($dirname . DIR_SEP . $entry);
    }

    $dir->close();

    return rmdir($dirname);
}

function mkdirs($dir, $mode=0777)
{
    if (empty($dir)) {
        return false;
    }

    if (is_dir($dir) || '
/' === $dir) {
        return true;
    }

    if (mkdirs(dirname($dir), $mode)) {
        $is = mkdir($dir, $mode);
        chmod($dir, $mode);
        return $is;
    }

    return false;
}

function sortDate($a, $b)
{
    if ($a['
mtime'] == $b['mtime'])        return -1;
    if ($a['
mtime'] < $b['mtime'])        return 1;
    return 0;
}
function sortSize($a, $b)
{
    if ($a['
r_size'] == $b['r_size'])        return -1;
    if ($a['
r_size'] < $b['r_size'])        return 1;
    return 0;
}

if (!function_exists('
scandir')) {
    function scandir($dir)
    {
        $dh    = opendir($dir);
        $files    = array();
        while (false !== ($filename = readdir($dh))) {
            $files[] = $filename;
        }

        return $files;
    }
}

function isWork()
{
    header('
Content-Typetext/htmlcharset=utf-8');
    global $cfg;
    if (!is_dir($cfg['
root'])) {
        echo '
Directory not found' . $cfg['root'], '<br />';
        if (mkdirs($cfg['
root'], $cfg['chmod']['folder'])) {
            echo '
Successfully created';
        } else {
            echo '
Failed createdYou need to create the folder manually, or set the right<br />Вам необходимо создать папку вручнуюили выставить права';
            exit;
        }
    } elseif (!is_writable($cfg['
root'])) {
        echo '
No write access to folder' . $cfg['root'], '<br />Нет доступа на запись.';
    } else {
        echo '
<font color=green>Root directory in order<br />Корневая директория в порядке.</font>';
    }
    echo '
<hr />';

    $type = array($cfg['
thumb']['dir'], 'file', 'flash', 'image');
    for ($i=-1;++$i<4;) {
        $d = $cfg['
root'] . $type[$i];
        if (!is_dir($d)) {
            echo '
Directory not found' . $d, '<br />';
            if (mkdirs($d, $cfg['
chmod']['folder'])) {
                echo '
Successfully created';
            } else {
                echo '
Failed createdYou need to create the folder manually, or set the right<br />Вам необходимо создать папку вручнуюили выставить права';
                exit;
            }
        } elseif (!is_writable($d)) {
            echo '
No write access to folder' . $d, '<br />Нет доступа на запись.';
        } else {
            echo $type[$i] . ' 
- <font color=green>normal</font>';
        }
        echo '
<br />';
    }
    echo '
<hr />';

    echo '
Check available extensions';
    $ext = array('
json_encode', 'mb_internal_encoding', 'mb_substr', 'mb_ereg_replace', 'mb_strlen', 'imagecreatetruecolor', 'imagefill', 'imagecopyresampled', 'imagejpeg', 'imagedestroy');
    for ($i=-1, $iCount=count($ext); ++$i<$iCount;) {
        echo '
<br />';
        echo function_exists($ext[$i])? $ext[$i] . ' 
- <font color=green>yes</font' : $ext[$i] . ' - <font color=red>no</font>';
    }

    exit;
}
Онлайн: 1
Реклама