Ok.
Different objects need to manipulate this $_FILE data. So, it’s not only a question of preserving is existence cross method but, across all classes that can use it, until, it’s ready to be inserted into the database.
So, validate object needs to use it.
Then, resize object needs to use it.
Finally, dao object needs to use it, so that the data can be stored into the database.
Here are the examples of two methods:
Those two methods are inside my validation class:
/**
*
* @param <array> $campoForm
* @param <int> $limiteKb
* @return <boolean>
*/
public function validaUpload($campoForm, $limiteKb = null)
{
$nomeTemporario = $campoForm['tmp_name'];
$codigoErro = $campoForm['error'];
//se o upload NÃO foi OK - corre o switch
if ($codigoErro != UPLOAD_ERR_OK)
{
switch ($codigoErro)
{
//valida o tamanho no php-ini e no MAX_FILE_SIZE no formulário - contudo, este último não é fiável pois, depende do user agent e do seu suporte para isso.
case UPLOAD_ERR_INI_SIZE:
case UPLOAD_ERR_FORM_SIZE:
$this->_msgErro[$campoForm] = 'Erro no upload: O tamanho do ficheiro é demasiadamente grande. Reduza as dimensões e tente novamente.';
break;
case UPLOAD_ERR_PARTIAL:
$this->_msgErro[$campoForm] = 'Erro no upload: O ficheiro não foi enviado na totalidade. Tente novamente.';
break;
case UPLOAD_ERR_NO_FILE:
$this->_msgErro[$campoForm] = 'Erro no upload: Nenhum ficheiro foi enviado.';
break;
case UPLOAD_ERR_NO_TMP_DIR:
$this->_msgErro[$campoForm] = 'Erro no upload: A directoria de upload não foi encontrada.';
break;
case UPLOAD_ERR_CANT_WRITE:
$this->_msgErro[$campoForm] = 'Erro no upload: Não foi possível escrever no ficheiro de envio.';
break;
case UPLOAD_ERR_EXTENSION:
$this->_msgErro[$campoForm] = 'Erro no upload: A extensão não é suportada.';
break;
default:
$this->_msgErro[$campoForm] = 'Erro no upload: Erro desconhecido.';
}
}
//se o Upload foi OK mas, se o size for maior que o limite definido (independente do user agent), em KB:
elseif (isset($limiteKb) && ($campoForm['size'] / 1024 > $limiteKb))
{
$this->_msgErro[$campoForm] = 'Erro no upload: O tamanho do ficheiro é maior que o limite especificado.';
}
//se o upload foi OK, se o filesize foi OK mas, se o ficheiro não veio do upload:
elseif (!is_uploaded_file($nomeTemporario))
{
$this->_msgErro[$campoForm] = 'Erro no upload: Ficheiro não corresponde ao ficheiro enviado.';
}
else
{
//se tudo está ok, devolve true.
return true;
}
}
/**
*
* @param <array> $campoForm
* @return <boolean>
*/
public function validaImagem($campoForm)
{
$nomeTemporario = $campoForm['tmp_name'];
//se for imagem:
if (getimagesize($nomeTemporario))
{
$permitidas = array('jpeg', 'jpg', 'gif', 'png');
$extensoes = strtolower(pathinfo($nomeTemporario, PATHINFO_EXTENSION));
if (in_array($extensoes, $permitidas))
{
return true;
}
else
{
$this->_msgErro[$campoForm] = 'Erro na imagem: A extensão não é permitida. Apenas jpg, gif ou png são suportados.';
return false;
}
}
else //se a getimagesize devolver falso, é porque não se trata de uma imagem:
{
return false;
}
}
I’ve not yet write the resize class, but I believe it will use a specific $_FILE as well, and the same will go for the insert method that will insert the image.
I really don’t know what “execution script time means” on php manual, that’s why I’m having this doubts. You reply - well, test it. But, I’m not that experienced into php in order to user proper methods for doing so, and I will probably have so many errors down the path when I first test it, that I would prefer to know the answer if someone has already done something similar.
Thanks again,
Márcio