Jörg Reinholz: Fest stellen ob URL die eines Bildes ist

Beitrag lesen

Moin!

http://imgur.com/2UymiGQ

ja, Luis Peter hat leider ein komplettes HTML-Dokument angegeben, wo er eigentlich nur ein Bild hätte einbinden/referenzieren sollen. Ich frage mich, warum das so häufig vorkommt - er ist nicht der einzige und auch nicht der erste, der das macht.

Weil es scheinbar geht. (Wenn auch nicht funktioniert.)

Abhilfe kann nur eine Prüfung sein, was der Server zurückliefert:

In PHP und Perl sollte etwas wie

$sys='wget -O /dev/null  -d ' . escapeshellarg('http://imgur.com/2UymiGQ') .' 2>&1 | grep -i -E "content-type.*image" | wc -l';
$isPic=`$sys`;
#Nur für Perl:
sub escapeshellarg { 
    my $str = @_ ? shift : $_;
    $str =~ s/((?:^|[^\\])(?:\\\\)*)'/$1\\'/g;
    return "'$str'";
}

funktionieren.

Freilich kann man auch curl in purem PHP benutzen:

<?php
function hasHTTPImageHeader($url) {
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $url);
  curl_setopt($curl, CURLOPT_HEADER, true);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);

  ## Windows-Benutzer müssen sich hier mit tempnam() um eine Datei kümmern und diese dann mit unlink() auch wieder löschen!
  $fh = fopen('/dev/null', 'c');
  curl_setopt($curl, CURLOPT_FILE, $fh);

  $res = curl_exec($curl);
  $res = curl_getinfo ($curl);
  return (0 === strpos($res['content_type'], 'image/'));
}

if ( hasHTTPImageHeader('http://imgur.com/2UymiGQ') ) {
  echo "Ja";
} else {
  echo "Nein";
}
echo "\n";

Jörg Reinholz