0

Classe para manipulação de uploads

criado por Raphael Basso em 21/01/2007 6:45am
<p align="justify">
Esse artigo se tornou um pouco extenso porque eu queria mostrar como funciona normalmente, sem uso de classes, etc. Como é um pouco mais difícil (nem é tanto assim), então criei uma classe para este fim. Já a utilizo há algum tempo e tenho tido ótimos resultados. Quanto ao OO, para programadores experientes, torna-se de fácil entendimento, mas é sempre mais complicado para iniciantes.
</p>

<hr />

<h4>Construção da Classe</h4>

<p align="justify">
A classe se chamará: Upload, terá um método básico para pegar os elementos e um atributo contador. Haverá uma outra classe que somente servirá para pegar informações do upload que eu vou chamar aqui de argumentos.</p>

<p align="justify">O programador terá apenas que instanciar a classe e passar o índice do array enviado (nome do campo no formulario) no construtor da classe. Outa coisa, todos os campos "file" têm que estar usando o modo multi-campos, ou seja, "nome[]", mesmo que tenha somente um campo. É um bom exercício portar para modo simples em conjunto, mas deixo a seu cargo. Se quiser melhorar este script, fique à vontade.
</p>
<p>Apesar do modelo de OO do PHP 4 ser uma "bixera", eu revolvi fazer o código nele, para mostrar que se você tiver um pouco de criatividade, pode ser feito também. Na última página, eu coloquei um código em PHP 5 para os que não são devotos do PHP 4. Sem mais delongas, vamos lá:
</p>

<div style="background-color : #e0e0e0; width : 560px; padding : 4px;">
<?<span style="color : #ff0000">php</span><br /><br />
   <span style="color : #009900">/********************/ </span><br />
   <span style="color : #009900">/* Classe Upload    */ </span><br />
   <span style="color : #009900">/* arabasso         */ </span><br />
   <span style="color : #009900">/* 2007             */ </span><br />
   <span style="color : #009900">/********************/ </span><br /><br />

   <span style="color : #009900">// Classe Para Manipulação de Uploads - upload.class.php </span><br /><br />
   class Upload<br />
   {<br />
      var<br />
         $data, $count;<br /><br />

      <span style="color : #009900">// Construtor da classe Upload</span><br /><br />

<!-- Função Construtora -->

      function Upload($index)<br />
      {<br />

         <span style="color : #009900">// Se o índice não for uma string</span><br /><br />

         if (!is_string($index))<br />
           
die("Erro: STRING esperada!");<br /><br />

         <span style="color : #009900">// Se o array com este índice não existe</span><br /><br />

         if (!isset($_FILES[$index]))<br />
           
die("Erro: ÍNDICE indefinido!");<br /><br />

         <span style="color : #009900">// Referência para a variável</span><br /><br />

         $this->data = & $_FILES[$index];<br /><br />

         <span style="color : #009900">// Número de elementos</span><br /><br />

         $this->count = count($this->data["name"]);<br />
      }<br /><br />

<!-- Função Argumento 1 -->

      <span style="color : #009900">// Pega um elemento baseado no índice</span><br /><br />

      function arg($index)<br />
      {<br />

         <span style="color : #009900">// Se o índice for menor que 0 ou maior que o total</span><br /><br />

         if ($index < 0 || $index > $this->count)<br />
           
die("Erro: ÍNDICE inválido!");<br /><br />

         <span style="color : #009900">// Retornando uma instância do objeto UploadArgs</span><br /><br />

         return new UploadArgs($this->data, $index);<br />
      }<br /><br />

<!-- Função Argumentos Array -->

      <span style="color : #009900">// Retorna um array de objetos</span><br /><br />

      function args()<br />
      {<br />

         $arr = array();<br /><br />

      <span style="color : #009900">// Adicionando instâncias ao array</span><br />

      <span style="color : #009900">// array_push adiciona um elemento no final do array</span><br /><br />

         for ($i = 0; $i < $this->count; $i++)<br />

            array_push($arr, new UploadArgs($this->data, $i));<br /><br />

         return $arr;<br />

      }<br />

   }<br /><br />
   <span style="color : #009900">// Classe para Informações do Arquivo Enviado </span><br /><br />
   class UploadArgs<br />
   {<br />
      var<br />
         $name, $size, $type, $tmpName, $error;<br /><br />

      <span style="color : #009900">// Construtor da classe UploadArgs</span><br /><br />

<!-- Função Construtora -->

      function UploadArgs(& $data, $index)<br />
      {<br />
         $this->name    = $data["name"][$index];<br />
         $this->size    = $data["size"][$index];<br />
         $this->type    = $data["type"][$index];<br />
         $this->tmpName = $data["tmp_name"][$index];<br />
         $this->error   = $data["error"][$index];
<br />
      }<br /><br />

<!-- Função Move o arquivo enviado -->

      <span style="color : #009900">// Move o arquivo para a pasta destino</span><br /><br />

      function move($destiny)<br />
      {<br />

         <span style="color : #009900">// Identificando o destino</span><br /><br />

         $destiny .= $this->name;<br /><br />

         <span style="color : #009900">// Movendo o arquivo</span><br /><br />

         move_uploaded_file($this->tmpName, $destiny);<br />

      }<br /><br />
   }<br />
?>
</div>

Comentários:

Nenhum comentário foi enviado ainda.

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)