Ejemplo n.º 1
0
 /**
  * Método que realiza o upload de arquivos para a pasta informada.
  *
  * @param array  $arquivo         Um array contendo os dados recebidos via post contendo os arquivos
  * @param string $pastaDestino    O nome da pasta dentro da pasta de uploads do sistema
  * @param array  $tiposAceitos    Um array contendo os tipos aceitos onde as chaves são as extenções.
  *                                Caso não seja informado, aceita qualquer tipo arquivo. O array deve possuir os mimetypes e não as extenções
  * @param string $nomeSugerido    Caso seja informado, usa como node do arquivo
  * @param bool   $privado Define se o arquivo será salvo na pasta privada ou não
  * 
  * @return bool|string Retorna o nome do arquivo caso seja enviado com sucesso ou false em caso de erro
  *
  * @throws Exception
  */
 public function upload($arquivo, $pastaDestino, array $tiposAceitos = array(), $nomeSugerido = false, $privado = false)
 {
     //Verificando a variável do arquivo
     if (!is_array($arquivo)) {
         throw new Exception('O arquivo não é válido', 1);
     }
     //Verificando se o arquivo tem um nome válido
     if (!strlen($arquivo['name'])) {
         throw new Exception('O arquivo informado é inválido', 2);
     }
     //Testando o tipo do arquivo
     if (count($tiposAceitos)) {
         if (!Arrays::in_array_r($arquivo['type'], $tiposAceitos)) {
             throw new Exception('O formato do arquivo não é permitido', 3);
         }
         //Testando a extenção do arquivo
         $ext = substr($arquivo['name'], strrpos($arquivo['name'], '.') + 1);
         if (!strlen($ext)) {
             throw new Exception('O arquivo é inválido', 4);
         }
         if (!isset($tiposAceitos[$ext])) {
             throw new Exception("A extenção do arquivo não é permitida", 9);
         }
         if (is_array($tiposAceitos[$ext])) {
             if (!in_array($arquivo['type'], $tiposAceitos[$ext])) {
                 throw new Exception('O arquivo é inválido', 5);
             }
         } else {
             if ($tiposAceitos[$ext] != $arquivo['type']) {
                 throw new Exception('O arquivo é inválido', 10);
             }
         }
     }
     //Testendo o tamanho do arquivo enviado
     $maxSizeUpload = ini_get('upload_max_filesize');
     if ((int) $arquivo['size'] > Matematica::returnBytes($maxSizeUpload)) {
         throw new Exception('O tamanho do arquivo é maior do que o permitido', 6);
     }
     //Criando a pasta
     if ((bool) $privado) {
         //Definindo o destino para a pasta privada, sem acesso via URL
         $pasta = $this->pastaUploadPrivado . DIRECTORY_SEPARATOR . $pastaDestino;
     } else {
         $pasta = $this->pastaUpload . DIRECTORY_SEPARATOR . $pastaDestino;
     }
     if (!file_exists($pasta)) {
         if (!mkdir($pasta, 0755, true)) {
             throw new Exception('Não é possível enviar o arquivo. Entre em contato com o administrador', 7);
         }
     }
     if (substr($pasta, -1) == '/') {
         $pasta = substr($pasta, -1);
     }
     //Definindo o nome do arquivo
     $ext = substr($arquivo['name'], strrpos($arquivo['name'], '.'));
     if (is_string($nomeSugerido)) {
         $nome = substr($nomeSugerido, 0, strrpos($nomeSugerido, "."));
         $nome .= $ext;
     } else {
         $nome = md5(microtime() . $arquivo['name']) . "{$ext}";
     }
     //Enviando o arquivo
     if (!move_uploaded_file($arquivo['tmp_name'], "{$pasta}/{$nome}")) {
         throw new Exception("Falha ao tentar enviar o arquivo {$pasta}", 8);
     }
     return $nome;
 }
Ejemplo n.º 2
0
 /**
  * Método que realiza o upload de arquivos para a pasta informada
  * @param array $arquivo Um array contendo os dados recebidos via post contendo os arquivos
  * @param string $pastaDestino O nome da pasta dentro da pasta de uploads do sistema
  * @param array $tiposAceitos Um array contendo os tipos aceitos onde as chaves são as extenções.
  * Caso não seja informado, aceita qualquer tipo arquivo. O array deve possuir os mimetypes e não as extenções
  * @param string $nomeSugerido Caso seja informado
  * @return boolean|string Retorna o nome do arquivo caso seja enviado com sucesso ou false em caso de erro
  * @throws Exception
  */
 public function upload($arquivo, $pastaDestino, array $tiposAceitos = array(), $nomeSugerido = false)
 {
     //Verificando a variável do arquivo
     if (!is_array($arquivo)) {
         throw new Exception("O arquivo não é válido", 1);
     }
     //Verificando se o arquivo tem um nome válido
     if (!strlen($arquivo['name'])) {
         throw new Exception("O arquivo informado é inválido", 2);
     }
     //Testando o tipo do arquivo
     if (count($tiposAceitos)) {
         if (!Arrays::in_array_r($arquivo["type"], $tiposAceitos)) {
             throw new Exception("O formato do arquivo não é permitido", 3);
         }
         //Testando a extenção do arquivo
         $ext = substr($arquivo['name'], strrpos($arquivo['name'], ".") + 1);
         if (!strlen($ext)) {
             throw new Exception("O arquivo é inválido", 4);
         }
         if (!isset($tiposAceitos[$ext])) {
             throw new Exception("A extenção do arquivo não é permitida: {$ext} - " . $arquivo['name'], 9);
         }
         if (is_array($tiposAceitos[$ext])) {
             if (!in_array($arquivo["type"], $tiposAceitos[$ext])) {
                 throw new Exception("O arquivo é inválido", 5);
             }
         } else {
             if ($tiposAceitos[$ext] != $arquivo["type"]) {
                 throw new Exception("O arquivo é inválido", 10);
             }
         }
     }
     //Testendo o tamanho do arquivo enviado
     $maxSizeUpload = ini_get("upload_max_filesize");
     if ((int) $arquivo['size'] > Matematica::returnBytes($maxSizeUpload)) {
         throw new Exception("O tamanho do arquivo é maior do que o permitido", 6);
     }
     //Criando a pasta
     $pasta = "{$this->pastaUpload}/{$pastaDestino}";
     if (!file_exists($pasta)) {
         if (!mkdir($pasta, 0755, true)) {
             throw new Exception("Não é possível enviar o arquivo. Entre em contato com o administrador", 7);
         }
     }
     if (substr($pasta, -1) == "/") {
         $pasta = substr($pasta, -1);
     }
     //Definindo o nome do arquivo
     $ext = substr($arquivo['name'], strrpos(".", $arquivo['name']));
     $nome = is_string($nomeSugerido) ? $nomeSugerido : md5(microtime() . $arquivo['name']) . ".{$ext}";
     //Enviando o arquivo
     if (!move_uploaded_file($arquivo["tmp_name"], "{$pasta}/{$nome}")) {
         throw new Exception("Falha ao tentar enviar o arquivo {$pasta}", 8);
     }
     return $nome;
 }