O que entender sobre Uploads no Codeigniter
O upload de arquivos é uma funcionalidade bastante comum em aplicações web dos mais variados tipos, e quando isso é necessário os arquivos são geralmente armazenados diretamente no banco de dados ou em um diretório do sistema. A estratégia a ser utilizada dependerá principalmente da quantidade de registros e do tamanho ocupado por eles.
Neste artigo veremos como implementar o upload em um sistema desenvolvido com o framework CodeIgniter, armazenando os arquivos em uma pasta da própria aplicação. Essa prática é comum quando se tem muitos arquivos a serem salvos e/ou seu tamanho é considerado grande. Caso fossem mantidos no banco de dados, este cresceria demasiadamente, dificultando a realização de backups periódicos e comprometendo seu desempenho.
Passo 1: Configurando a view
Neste exemplo simularemos um cadastro de currículos que permitirá a inserção do CPF do candidato e de um arquivo em formato PDF contendo suas informações. Como o nosso foco é receber e armazenar os arquivos, não criaremos models ou utilizaremos banco de dados. Em uma aplicação real, os trechos de código aqui apresentados podem ser facilmente acoplados a funções que já realizem cadastros completos.
Começaremos criando a view que conterá o formulário para cadastro do currículo. Para isso, adicionaremos ao diretório views uma pasta chamada currículos e dentro dela um arquivo cadastro.php, cujo código pode ser visto na Listagem 1.
01 <form action="salvar" method="POST" enctype="multipart/form-data">
02 <input type="text" name="cpf" placeholder="Informe seu CPF"/>
03 <br/>
04 <input type="file" name="curriculo">
05 <br/>
06 <input type="submit" value="Salvar"/>
07 </form>
Linha 1: o atributo enctype do form deve ser preenchido com o valor multipart/form-data, para que ele seja capaz de receber arquivos e repassá-los ao servidor na requisição POST;
Linha 4: o campo que irá receber o arquivo deve ser do tipo file, tipo de input destinado a essa funcionalidade no HTML.
Passo 2: Implementando o controller
Para que a view seja exibida, é necessário criar o controller Curriculos e nele adicionar uma função para exibir a página de cadastro. O código a seguir demonstra essa função, que basicamente carrega a view que acabamos de criar:
01 public function cadastro(){
02 $this->load->view('curriculos/cadastro');
03 }
Com isso já será possível acessar o sistema através da URL http://<endereço base>/index.php/currículos/cadastro e visualizar o formulário para upload do currículo.
Agora, precisamos criar a função que receberá os dados do formulário e salvará o arquivo. Como podemos perceber na linha 1 da Listagem 1, na action do form, essa função se chamará salvar e seu código pode ser visto na Listagem 2.
01 public function salvar(){
02 $cpf = $this->input->post('cpf');
03 $curriculo = $_FILES['curriculo'];
04 $configuracao = array(
05 'upload_path' => './curriculos/',
06 'allowed_types' => 'pdf',
07 'file_name' => $cpf.'.pdf',
08 'max_size' => '500'
09 );
10 $this->load->library('upload');
11 $this->upload->initialize($configuracao);
12 if ($this->upload->do_upload('curriculo'))
13 echo 'Arquivo salvo com sucesso.';
14 else
15 echo $this->upload->display_errors();
16 }
Linha 2: recuperamos o valor do campo cpf preenchido no form. Esse valor será usado apenas para renomear o arquivo ao salvá-lo;
Linha 3: recuperamos o arquivo submetido;
Linhas 4 a 9: configuramos os parâmetros necessários para o upload de arquivos, como a pasta onde serão salvos (upload_path), os tipos de arquivo permitidos (allowed_types), o nome com que será salvo (file_name) e o tamanho máximo em kilobytes (max_size);
Linha 10: carregamos a biblioteca responsável pelo upload de arquivos;
Linha 11: configuramos a biblioteca com os parâmetros previamente definidos;
Linha 12: efetuamos o upload com a função $this->upload->do_upload. Caso o arquivo seja salvo com sucesso, exibimos uma mensagem (linha 13), caso contrário apresentamos os erros para o usuário (linha 15).
Antes de testar o upload, é necessário criar a pasta currículos no diretório do projeto e no mesmo nível da pasta application. Feito isso, basta acessar o formulário, preencher o CPF, selecionar o arquivo e enviar os dados. Esse processo é ilustrado na Figura 1.

Caso o upload não seja bem-sucedido, algumas mensagens podem ser exibidas. Dentre elas, as mais comuns são:
- The uploaded file exceeds the maximum allowed size in your PHP configuration file: o arquivo enviado excede o tamanho máximo aceito;
- The filetype you are attempting to upload is not allowed: o tipo do arquivo enviado não está na lista dos que são aceitos;
- The upload path does not appear to be valid: o caminho onde o arquivo será salvo é inválido.
Passo 3: Realizando o upload de imagens
Caso os arquivos que serão submetidos no seu sistema sejam imagens, o procedimento é o mesmo mostrado anteriormente, bastando alterar o tipo de arquivo suportado (allowed_types) e adicionar dois atributos extras ao array de configuração:
- max_width: largura máxima da imagem, em pixels;
- max_height: altura máxima da imagem, também em pixels.
Neste caso, outra mensagem de erro comum é a seguinte:
- The image you are attempting to upload doesn't fit into the allowed dimensions: as dimensões da imagem excedem os valores máximos permitidos.
Links Úteis
- Manual do PHP:
Site oficial do PHP - MYSQL:
Site Oficial do Mysql - PHP no Wikipedia:
Mais informações sobre o Wikipedia
Saiba mais sobre PHP ;)
- Documentação: PHP: While e Do While:
Este documento apresenta as estruturas de repetição while e do while, recursos que possibilitam executar trechos de código repetidamente com base em uma expressão booleana. - Como implementar o MVC em PHP:
O padrão MVC é amplamente utilizado no desenvolvimento de aplicações web, e saber implementá-lo é importante para trabalhar de forma eficiente com frameworks como CodeIgniter e Laravel, bem como para desenvolver projetos sem depender dessas soluções de terceiros. - Documentação: PHP: Declaração e atribuição de variáveis:
Neste documento você encontrará o conteúdo que precisa para aprender a declarar e utilizar variáveis na linguagem PHP. É por meio das variáveis que conseguimos guardar os dados em memória e acessá-los quando necessário.