0

I am making a profile page where users can set an url to their profile image. How do I check this with regex for example?

SilentGhost
  • 287,765
  • 61
  • 300
  • 288
ganjan
  • 6,943
  • 23
  • 76
  • 130

5 Answers5

1

You can't. Any file can be served at any address. You'd need to check the Content-Type returned by the URL, and probably the format of the image too.

Joe
  • 44,558
  • 31
  • 143
  • 235
1

You can use cURL for the mime. For the URL validation I use the following, but there are loads out there. You can use FILTER_VALIDATE_URL but it can contain bugs; http://bugs.php.net/51192.

$url='image.png';

if( preg_match("#((http|https|ftp)://(\S*?\.\S*?))(\s|\;|\)|\]|\[|\{|\}|,|\"|'|:|\<|$|\.\s)#ie", $url) ){

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, 'http://yoursite.com');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_NOBODY, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_exec($ch);
    $mime = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    curl_close($ch);

    print $mime;

}
Matt Lowden
  • 2,566
  • 17
  • 19
  • the preg_match seems to block valid urls like "http://www.itavisen.no/gfx/speedometerNy.png" – ganjan Jan 19 '11 at 12:33
  • I've updated it, as there were some other errors with it. I generally prefer that URLs are prefixed with HTTP. Personal preference :) but I use this for URLs that will be placed into the href of the HTML base tag. – Matt Lowden Jan 19 '11 at 12:55
1

Have you seen this?

best way to determine if a URL is an image in PHP

Community
  • 1
  • 1
Spaceghost
  • 6,497
  • 3
  • 26
  • 42
0

You can use FILTER_VALIDATE_URL.

Look at : parsing url - php, check if scheme exists, validate url regex

Community
  • 1
  • 1
LaGrandMere
  • 10,177
  • 1
  • 31
  • 41
0

First test that is a valid url with filter_var()

$url = filter_var($variable, FILTER_VALIDATE_URL, FILTER_FLAG_SCHEME_REQUIRED);

Then you'll need to download the resource, and test locally if it's an image.

Xavier Barbosa
  • 3,769
  • 1
  • 19
  • 18