Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá
Montei a pouco o código abaixo para gerar um cadastro de imagens para galeria usando Wideimage e gravação em DB.
O código em princípio está funcionando normalmente. Preciso apenas saber se desta forma que fiz está correto ou se há a necessidade de alguma alteração para evitar erros ou melhorar desempenho da aplicação.
Segue o trecho:
<?php
$id_album = $_GET['album_id'];
if(isset($_POST['cadastrar'])){
if(isset($_FILES['fileUpload']))
{
$name = $_FILES['fileUpload']['name'];
$tmp_name = $_FILES['fileUpload']['tmp_name'];
$allowedExts = array(".gif", ".jpeg", ".jpg", ".png", ".bmp");
$dir = '../files/uploads/';
for($i = 0; $i < count($tmp_name); $i++)
{
$ext = strtolower(substr($name[$i],-4));
if(in_array($ext, $allowedExts))
{
$new_name = time().'_'.rand(10,99)."-". $i . '.jpg';
$image = WideImage::load($tmp_name[$i]);
$image = $image->resize(170, 180, 'outside');
$image = $image->crop('center', 'center', 170, 180);
$image->saveToFile($dir.$new_name);
//INÍCIO GRAVAÇÃO BANCO
$insert = "INSERT into fotos (id_album, imagem) VALUES (:id_album, :imagem)";
try {
$result = $conexao->prepare($insert);
$result->bindParam(':id_album', $id_album, PDO::PARAM_INT);
$result->bindParam(':imagem', $new_name, PDO::PARAM_STR);
$result->execute();
$contar = $result->rowCount();
} catch(PDOException $e) {
}
//FIM GRAVAÇÃO BANCO
}
}
if($contar>0){
echo '<strong>Sucesso!</strong> Fotos cadastradas.';
} else {
echo '<strong>Erro ao cadastrar!</strong> Não foi possível cadastrar as fotos.';
}
}
}
?>
Opiniões são bem-vindas e fico grato desde já.>
Em 07/03/2017 at 14:30, Williams Duarte disse:
Cade as Validações para verificar se é realmente é uma imagem, se a imagem contém algum erro no binário etc?
Uma forma de você fazer isso é verificando os mime-type, senão algum usuário mal intencionado passa qualquer shelma e usa seu servidor ou faz um estrago se quiser.
http://www.sanisoft.com/blog/2010/05/17/how-to-use-php-fileinfo-extension-to-get-file-mime-type/
Olá
Fiz algumas pesquisas e parece que a própria classe Wideimage já possuí recursos para detectar automaticamente se é uma imagem ou não:
http://wideimage.sourceforge.net/wp-content/current/doc/WideImage/WideImage.html#methodloadFromFile
Talvez esteja equivocado em relação à essa informação, mas tento cadastrar outros arquivos, inclusive com extensões modificadas e não passa pelo cadastro.
Melhoraram essa Lib é muito heim, agora que vi o Objeto load, tenho um projeto que usa essa classe, antes tinha que mover com move_uploaded_file, carregar para depois poder usar.
Se ela não esta passando, esta disparando uma Exception, trata isso estará aceitável o seu código.
try {
....
$image = WideImage::load($tmp_name[$i]);
...
}
catch (\Exception $e) {
echo $e;
}
Cade as Validações para verificar se é realmente é uma imagem, se a imagem contém algum erro no binário etc?
Uma forma de você fazer isso é verificando os mime-type, senão algum usuário mal intencionado passa qualquer shelma e usa seu servidor ou faz um estrago se quiser.
http://www.sanisoft.com/blog/2010/05/17/how-to-use-php-fileinfo-extension-to-get-file-mime-type/