Classe para manipulação de uploads
<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;">
</div>
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 /> ?>
Novo Comentário: