You can use regex
to check URL
.
if ( preg_match("/\.(?:gif|png|jpe?g)(?:\?.*)?$/", $img) ) {
die("É uma imagem válida. Pode atualizar no seu banco de dados");
} else {
die("Ops! Não me parece ser uma imagem.");
}
Explanation of Regex:
\.(?:gif|png|jpe?g)(?:\?.*)?$
└───────┬────────┘ └──┬──┘ └┬┘
│ │ └─── Captura a última ocorrência
│ └───────── Remove tudo que há após '?'
└─────────────────────── Verifique a extensão é 'gif', 'png', 'jpeg' ou 'jpg'
But that may not be enough. If you check https://www.gravatar.com/avatar/a95dfb4f780323740a8ce56633a184ed?s=48&d=identicon&r=PG
is a valid image (it is in .png
), but it would be ignored since it does not have the URL extension.
In this case, just send a request and capture the return of content-type
, for example:
<?php
$url = 'https://www.gravatar.com/avatar/a95dfb4f780323740a8ce56633a184ed?s=48&d=identicon&r=PG';
ob_start();
/* Instancia o curl */
$ch = curl_init($url);
/* Informa que deseja seguir os redirecionamento */
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
/* Desabilita a verificação do SSL */
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
/* Executaa requisição */
curl_exec($ch);
/* Captura o Content-Type retornado */
$i = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
/* Fecha a coenxão */
curl_close($ch);
ob_end_clean();
/* Define os mimetypes permitidos */
$mimeAllowed = [
'image/png',
'image/jpeg',
'image/gif',
];
/* Verifica se o mimetype retornado, consta na variável acima. */
if (in_array($i, $mimeAllowed)) {
mysql_query("UPDATE usuarios SET img='$url' WHERE id='$id'") or die(mysql_error());
} else {
die("Error");
}