Exemple #1
0
 protected function getFiles($dir)
 {
     $thumbDir = "{$this->config['uploadDir']}/{$this->config['thumbsDir']}/{$dir}";
     $dir = "{$this->config['uploadDir']}/{$dir}";
     $return = array();
     $files = dir::content($dir, array('types' => "file"));
     if ($files === false) {
         return $return;
     }
     foreach ($files as $file) {
         $size = @getimagesize($file);
         if (is_array($size) && count($size)) {
             $thumb_file = "{$thumbDir}/" . basename($file);
             if (!is_file($thumb_file)) {
                 $this->makeThumb($file, false);
             }
             $smallThumb = $size[0] <= $this->config['thumbWidth'] && $size[1] <= $this->config['thumbHeight'] && in_array($size[2], array(IMAGETYPE_GIF, IMAGETYPE_PNG, IMAGETYPE_JPEG));
         } else {
             $smallThumb = false;
         }
         $stat = stat($file);
         if ($stat === false) {
             continue;
         }
         $name = basename($file);
         $ext = file::getExtension($file);
         $bigIcon = file_exists("themes/{$this->config['theme']}/img/files/big/{$ext}.png");
         $smallIcon = file_exists("themes/{$this->config['theme']}/img/files/small/{$ext}.png");
         $thumb = file_exists("{$thumbDir}/{$name}");
         $return[] = array('name' => stripcslashes($name), 'size' => $stat['size'], 'mtime' => $stat['mtime'], 'date' => @strftime($this->dateTimeSmall, $stat['mtime']), 'readable' => is_readable($file), 'writable' => file::isWritable($file), 'bigIcon' => $bigIcon, 'smallIcon' => $smallIcon, 'thumb' => $thumb, 'smallThumb' => $smallThumb);
     }
     return $return;
 }
 protected function checkUploadedFile(array $aFile = null)
 {
     $config =& $this->config;
     $file = $aFile === null ? $this->file : $aFile;
     if (!is_array($file) || !isset($file['name'])) {
         return $this->label("Unknown error");
     }
     if (is_array($file['name'])) {
         foreach ($file['name'] as $i => $name) {
             $return = $this->checkUploadedFile(array('name' => $name, 'tmp_name' => $file['tmp_name'][$i], 'error' => $file['error'][$i]));
             if ($return !== true) {
                 return "{$name}: {$return}";
             }
         }
         return true;
     }
     $extension = file::getExtension($file['name']);
     $typePatt = strtolower(text::clearWhitespaces($this->types[$this->type]));
     // CHECK FOR UPLOAD ERRORS
     if ($file['error']) {
         return $file['error'] == UPLOAD_ERR_INI_SIZE ? $this->label("The uploaded file exceeds {size} bytes.", array('size' => ini_get('upload_max_filesize'))) : ($file['error'] == UPLOAD_ERR_FORM_SIZE ? $this->label("The uploaded file exceeds {size} bytes.", array('size' => $_GET['MAX_FILE_SIZE'])) : ($file['error'] == UPLOAD_ERR_PARTIAL ? $this->label("The uploaded file was only partially uploaded.") : ($file['error'] == UPLOAD_ERR_NO_FILE ? $this->label("No file was uploaded.") : ($file['error'] == UPLOAD_ERR_NO_TMP_DIR ? $this->label("Missing a temporary folder.") : ($file['error'] == UPLOAD_ERR_CANT_WRITE ? $this->label("Failed to write file.") : $this->label("Unknown error."))))));
     } elseif (substr($file['name'], 0, 1) == ".") {
         return $this->label("File name shouldn't begins with '.'");
     } elseif (substr($file['name'], -1) == "." || !$this->validateExtension($extension, $this->type)) {
         return $this->label("Denied file extension.");
     } elseif (preg_match('/^\\*([^ ]+)(.*)?$/s', $typePatt, $patt)) {
         list($typePatt, $type, $params) = $patt;
         $class = __NAMESPACE__ . "\\type_{$type}";
         if (class_exists($class)) {
             $type = new $class();
             $cfg = $config;
             $cfg['filename'] = $file['name'];
             if (strlen($params)) {
                 $cfg['params'] = trim($params);
             }
             $response = $type->checkFile($file['tmp_name'], $cfg);
             if ($response !== true) {
                 return $this->label($response);
             }
         } else {
             return $this->label("Non-existing directory type.");
         }
     }
     // IMAGE RESIZE
     $img = image::factory($this->imageDriver, $file['tmp_name']);
     if (!$img->initError && !$this->imageResize($img, $file['tmp_name'])) {
         return $this->label("The image is too big and/or cannot be resized.");
     }
     return true;
 }
Exemple #3
0
 protected function getFiles($dir)
 {
     $thumbDir = "{$this->config['uploadDir']}/{$this->config['thumbsDir']}/{$dir}";
     $dir = "{$this->config['uploadDir']}/{$dir}";
     $return = array();
     $files = dir::content($dir, array('types' => "file"));
     if ($files === false) {
         return $return;
     }
     foreach ($files as $file) {
         $this->makeThumb($file, false);
         $image = new gd($file);
         $image = !$image->init_error && $image->get_width() <= $this->config['thumbWidth'] && $image->get_height() <= $this->config['thumbHeight'];
         $stat = stat($file);
         if ($stat === false) {
             continue;
         }
         $name = basename($file);
         $ext = file::getExtension($file);
         $bigIcon = file_exists("themes/{$this->config['theme']}/img/files/big/{$ext}.png");
         $smallIcon = file_exists("themes/{$this->config['theme']}/img/files/small/{$ext}.png");
         $thumb = file_exists("{$thumbDir}/{$name}");
         $return[] = array('name' => stripcslashes($name), 'size' => $stat['size'], 'mtime' => $stat['mtime'], 'date' => @strftime($this->dateTimeSmall, $stat['mtime']), 'readable' => is_readable($file), 'writable' => file::isWritable($file), 'bigIcon' => $bigIcon, 'smallIcon' => $smallIcon, 'thumb' => $thumb, 'smallThumb' => $image);
     }
     return $return;
 }
 protected function act_mv_cbd()
 {
     $dir = $this->postDir();
     if (!$this->config['access']['files']['move'] || !isset($_POST['dir']) || !is_dir($dir) || !is_readable($dir) || !dir::isWritable($dir) || !isset($_POST['files']) || !is_array($_POST['files']) || !count($_POST['files'])) {
         $this->errorMsg("Unknown error.");
     }
     $error = array();
     foreach ($_POST['files'] as $file) {
         $file = path::normalize($file);
         if (substr($file, 0, 1) == ".") {
             continue;
         }
         $type = explode("/", $file);
         $type = $type[0];
         if ($type != $this->type) {
             continue;
         }
         $path = "{$this->config['uploadDir']}/{$file}";
         if (!$this->checkFilePath($path)) {
             continue;
         }
         $base = basename($file);
         $replace = array('file' => $this->htmlData($base));
         $ext = file::getExtension($base);
         if (!file_exists($path)) {
             $error[] = $this->label("The file '{file}' does not exist.", $replace);
         } elseif (substr($base, 0, 1) == ".") {
             $error[] = $this->htmlData($base) . ": " . $this->label("File name shouldn't begins with '.'");
         } elseif (!$this->validateExtension($ext, $type)) {
             $error[] = $this->htmlData($base) . ": " . $this->label("Denied file extension.");
         } elseif (file_exists("{$dir}/{$base}")) {
             $error[] = $this->htmlData($base) . ": " . $this->label("A file or folder with that name already exists.");
         } elseif (!is_readable($path) || !is_file($path)) {
             $error[] = $this->label("Cannot read '{file}'.", $replace);
         } elseif (!file::isWritable($path) || !@rename($path, "{$dir}/{$base}")) {
             $error[] = $this->label("Cannot move '{file}'.", $replace);
         } else {
             if (function_exists("chmod")) {
                 @chmod("{$dir}/{$base}", $this->config['filePerms']);
             }
             $fromThumb = "{$this->thumbsDir}/{$file}";
             if (is_file($fromThumb) && is_readable($fromThumb)) {
                 $toThumb = "{$this->thumbsTypeDir}/{$_POST['dir']}";
                 if (!is_dir($toThumb)) {
                     @mkdir($toThumb, $this->config['dirPerms'], true);
                 }
                 $toThumb .= "/{$base}";
                 @rename($fromThumb, $toThumb);
             }
         }
     }
     if (count($error)) {
         return json_encode(array('error' => $error));
     }
     return true;
 }
Exemple #5
0
 protected function getFiles($dir)
 {
     $thumbDir = "{$this->config['uploadDir']}/{$this->config['thumbsDir']}/{$dir}";
     $dir = "{$this->config['uploadDir']}/{$dir}";
     $return = array();
     $files = dir::content($dir, array('types' => "file"));
     if ($files === false) {
         return $return;
     }
     foreach ($files as $file) {
         $img = new fastImage($file);
         $type = $img->getType();
         if ($type !== false) {
             $size = $img->getSize($file);
             if (is_array($size) && count($size)) {
                 $thumb_file = "{$thumbDir}/" . basename($file);
                 if (!is_file($thumb_file)) {
                     $this->makeThumb($file, false);
                 }
                 $smallThumb = $size[0] <= $this->config['thumbWidth'] && $size[1] <= $this->config['thumbHeight'] && in_array($type, array("gif", "jpeg", "png"));
             } else {
                 $smallThumb = false;
             }
         } else {
             $smallThumb = false;
         }
         $img->close();
         $stat = stat($file);
         if ($stat === false) {
             continue;
         }
         $name = basename($file);
         $ext = file::getExtension($file);
         $types = $this->config['types'];
         $types = explode(' ', $types['images'] . ' ' . $types['image']);
         if (substr($name, 0, 1) == '.' && !$this->config['showHiddenFiles']) {
             continue;
         }
         if ($this->type == 'images' && !in_array(strtolower($ext), $types)) {
             continue;
         }
         $bigIcon = file_exists("themes/{$this->config['theme']}/img/files/big/{$ext}.png");
         $smallIcon = file_exists("themes/{$this->config['theme']}/img/files/small/{$ext}.png");
         $thumb = file_exists("{$thumbDir}/{$name}");
         $return[] = array('name' => stripcslashes($name), 'size' => $stat['size'], 'mtime' => $stat['mtime'], 'date' => @strftime($this->dateTimeSmall, $stat['mtime']), 'readable' => is_readable($file), 'writable' => file::isWritable($file), 'bigIcon' => $bigIcon, 'smallIcon' => $smallIcon, 'thumb' => $thumb, 'smallThumb' => $smallThumb);
     }
     return $return;
 }
 static function get_couch_thumbs($filename, $dir = null)
 {
     if ($dir === null) {
         // filename is a full path containing the folder
         $dir = dirname($filename);
     }
     $filename = basename($filename);
     $ext = file::getExtension($filename, false);
     $name = strlen($ext) ? substr($filename, 0, -strlen($ext) - 1) : $filename;
     $thumbs = dir::content($dir, array('types' => "file", 'pattern' => "/{$name}(?:-\\d{1,}x\\d{1,})\\.{$ext}/i"));
     if ($thumbs === false) {
         return array();
     }
     return $thumbs;
 }
 /**
  * Action para upload de imagens para o servidor
  * @param  file $file   imagem
  * @param  int $width   Largura máxima da imagem
  * @param  int $heigth   Altura máxima da imagem
  * @param  int $size    Tamanho máximo da imagem
  * @return string       Nome da imagem ou erro caso ocorroa algum.
  */
 private function uploadImage($file, $width, $heigth, $size, $name_img = NULL)
 {
     // Pega as dimensões da imagem
     $dimensions = getimagesize($file->getTempName());
     // Verifica se o arquivo é uma imagem
     if (!preg_match("/^image\\/(pjpeg|jpeg|png|gif|bmp)\$/", $file->getRealType())) {
         $data['message'] = "O Arquivo inserido não parece ser uma imagem!";
     } elseif ($dimensions[0] > $width) {
         // Verifica se a largura da imagem é maior que a largura permitida
         $data['message'] = "A largura da imagem não deve ultrapassar " . $width . " pixels!";
     } elseif ($dimensions[1] > $heigth) {
         // Verifica se a altura da imagem é maior que a altura permitida
         $data['message'] = "Altura da imagem não deve ultrapassar " . $heigth . " pixels!";
     } elseif ($file->getSize() > $size) {
         // Verifica se o tamanho da imagem é maior que o tamanho permitido
         $data['message'] = "A imagem deve ter no máximo " . $size / 1024 . "MB!";
     } else {
         //Caso não haja erros faz o upload da imagem e salva a mesma no servidor
         if ($name_img == NULL) {
             $name_img = $this->getImgName() . "." . $file->getExtension();
         }
         //Verifica se a pasta public/img/users existe, se não existir, cria.
         if (!file_exists(FOLDER_PROJECT . 'public/img/users')) {
             mkdir(FOLDER_PROJECT . 'public/img/users');
         }
         $path_img = FOLDER_PROJECT . 'public/img/users/' . $name_img;
         $file->moveTo($path_img);
         return $name_img;
     }
     return $data;
 }
 public static function getMime($filename, $absolute_path = '')
 {
     // basic mimetypes
     $mime_types = array('txt' => array('text/plain', 'document'), 'epub' => array('application/epub+zip', 'document'), 'png' => array('image/png', 'image'), 'jpeg' => array('image/jpeg', 'image'), 'jpg' => array('image/jpeg', 'image'), 'gif' => array('image/gif', 'image'), 'tiff' => array('image/tiff', 'image'), 'svg' => array('image/svg+xml', 'image'), 'ico' => array('image/x-icon', 'image'), 'webp' => array('image/webp', 'image'), 'zip' => array('application/zip', 'archive'), 'rar' => array('application/x-rar-compressed', 'archive'), 'exe' => array('application/x-msdownload', 'file'), 'mp3' => array('audio/mpeg', 'audio'), 'wav' => array('audio/x-wav', 'audio'), 'qt' => array('video/quicktime', 'video'), 'mov' => array('video/quicktime', 'video'), 'avi' => array('video/x-msvideo', 'video'), 'mp4' => array('video/mp4', 'video'), 'webm' => array('video/webm', 'video'), 'wmv' => array('video/x-ms-wmv', 'video'), 'swf' => array('application/x-shockwave-flash', 'flash'), 'flv' => array('video/x-flv', 'video'), 'pdf' => array('application/pdf', 'document'), 'psd' => array('image/vnd.adobe.photoshop', 'image'), 'doc' => array('application/msword', 'document'), 'docx' => array('application/msword', 'document'), 'rtf' => array('application/rtf', 'document'), 'xls' => array('application/vnd.ms-excel', 'document'), 'xlsx' => array('application/vnd.ms-excel', 'document'), 'ppt' => array('application/vnd.ms-powerpoint', 'document'), 'pptx' => array('application/vnd.ms-powerpoint', 'document'));
     $ext = file::getExtension($filename);
     if (function_exists('finfo_open') && !empty($absolute_path)) {
         $finfo = finfo_open(FILEINFO_MIME);
         $mimetype = finfo_file($finfo, $absolute_path);
         finfo_close($finfo);
         if (strpos($mimetype, ';') !== false) {
             $mimetype = substr($mimetype, 0, strpos($mimetype, ';'));
         }
         $file_type = 'file';
         foreach ($mime_types as $extension => $mime_info) {
             if (strpos($mimetype, $mime_info[0]) !== false) {
                 $file_type = $mime_info[1];
                 break;
             }
         }
         return array($mimetype, $file_type);
     } else {
         if (array_key_exists($ext, $mime_types)) {
             return $mime_types[$ext];
         } else {
             return array('application/octet-stream', 'file');
         }
     }
 }
Exemple #9
0
 protected function getFiles($dir)
 {
     $thumbDir = "{$this->config['uploadDir']}/{$this->config['thumbsDir']}/{$dir}";
     $dir = "{$this->config['uploadDir']}/{$dir}";
     $return = array();
     $files = dir::content($dir, array('types' => "file"));
     if ($files === false) {
         return $return;
     }
     foreach ($files as $file) {
         $size = @getimagesize($file);
         if (is_array($size) && count($size)) {
             $thumb_file = "{$thumbDir}/" . basename($file);
             if (!is_file($thumb_file)) {
                 $this->makeThumb($file, false);
             }
             $smallThumb = $size[0] <= $this->config['thumbWidth'] && $size[1] <= $this->config['thumbHeight'] && in_array($size[2], array(IMAGETYPE_GIF, IMAGETYPE_PNG, IMAGETYPE_JPEG));
         } else {
             $smallThumb = false;
         }
         $stat = stat($file);
         if ($stat === false) {
             continue;
         }
         $filename = basename($file);
         if ('WIN' == substr(PHP_OS, 0, 3)) {
             setlocale(LC_CTYPE, '');
             // Resets the codepage to the system codepage so it can be properly retrieved
             $codepage = 'Windows-' . trim(strstr(setlocale(LC_CTYPE, 0), '.'), '.');
             if (function_exists('iconv')) {
                 $filename = iconv($codepage, 'UTF-8', $filename);
             } elseif (function_exists('mb_convert_encoding')) {
                 $filename = mb_convert_encoding($filename, $codepage, 'UTF-8');
             }
         }
         $name = $filename;
         $ext = file::getExtension($file);
         $bigIcon = file_exists("themes/{$this->config['theme']}/img/files/big/{$ext}.png");
         $smallIcon = file_exists("themes/{$this->config['theme']}/img/files/small/{$ext}.png");
         $thumb = file_exists("{$thumbDir}/{$name}");
         $return[] = array('name' => stripcslashes($name), 'size' => $stat['size'], 'mtime' => $stat['mtime'], 'date' => @strftime($this->dateTimeSmall, $stat['mtime']), 'readable' => is_readable($file), 'writable' => file::isWritable($file), 'bigIcon' => $bigIcon, 'smallIcon' => $smallIcon, 'thumb' => $thumb, 'smallThumb' => $smallThumb);
     }
     return $return;
 }
Exemple #10
0
    protected function checkUploadedFile(array $aFile=null) {
        $config = &$this->config;
        $file = ($aFile === null) ? $this->file : $aFile;

        if (!is_array($file) || !isset($file['name']))
            return $this->label("Unknown error");

        if (is_array($file['name'])) {
            foreach ($file['name'] as $i => $name) {
                $return = $this->checkUploadedFile(array(
                    'name' => $name,
                    'tmp_name' => $file['tmp_name'][$i],
                    'error' => $file['error'][$i]
                ));
                if ($return !== true)
                    return "$name: $return";
            }
            return true;
        }

        $extension = file::getExtension($file['name']);
        $typePatt = strtolower(text::clearWhitespaces($this->types[$this->type]));

        // CHECK FOR UPLOAD ERRORS
        if ($file['error'])
            return
                ($file['error'] == UPLOAD_ERR_INI_SIZE) ?
                    $this->label("The uploaded file exceeds {size} bytes.",
                        array('size' => ini_get('upload_max_filesize'))) : (
                ($file['error'] == UPLOAD_ERR_FORM_SIZE) ?
                    $this->label("The uploaded file exceeds {size} bytes.",
                        array('size' => $this->get['MAX_FILE_SIZE'])) : (
                ($file['error'] == UPLOAD_ERR_PARTIAL) ?
                    $this->label("The uploaded file was only partially uploaded.") : (
                ($file['error'] == UPLOAD_ERR_NO_FILE) ?
                    $this->label("No file was uploaded.") : (
                ($file['error'] == UPLOAD_ERR_NO_TMP_DIR) ?
                    $this->label("Missing a temporary folder.") : (
                ($file['error'] == UPLOAD_ERR_CANT_WRITE) ?
                    $this->label("Failed to write file.") :
                    $this->label("Unknown error.")
            )))));

        // HIDDEN FILENAMES CHECK
        elseif (substr($file['name'], 0, 1) == ".")
            return $this->label("File name shouldn't begins with '.'");

        // EXTENSION CHECK
        elseif (!$this->validateExtension($extension, $this->type))
            return $this->label("Denied file extension.");

        // SPECIAL DIRECTORY TYPES CHECK (e.g. *img)
        elseif (preg_match('/^\*([^ ]+)(.*)?$/s', $typePatt, $patt)) {
            list($typePatt, $type, $params) = $patt;
            if (class_exists("type_$type")) {
                $class = "type_$type";
                $type = new $class();
                $cfg = $config;
                $cfg['filename'] = $file['name'];
                if (strlen($params))
                    $cfg['params'] = trim($params);
                $response = $type->checkFile($file['tmp_name'], $cfg);
                if ($response !== true)
                    return $this->label($response);
            } else
                return $this->label("Non-existing directory type.");
        }

        // IMAGE RESIZE
        $gd = new gd($file['tmp_name']);
        if (!$gd->init_error && !$this->imageResize($gd, $file['tmp_name']))
            return $this->label("The image is too big and/or cannot be resized.");

        return true;
    }