la mejor manera de determinar si una URL es una imagen en PHP

Utilizando PHP, dada una URL, ¿cómo puedo determinar si es una imagen?

No hay contexto para la URL: está justo en el medio de un archivo de texto sin formato, o tal vez solo una cadena por sí sola.

No quiero una sobrecarga elevada (p. Ej., Leer el contenido de la URL), ya que podría llamarse para muchas URL en una página. Dada esta restricción, no es esencial que se identifiquen todas las imágenes, pero me gustaría adivinar bastante.

En este momento solo estoy mirando la extensión del archivo, pero parece que debería haber una mejor manera que esta.

quí está lo que tengo actualmente:

  function isImage( $url )
  {
    $pos = strrpos( $url, ".");
    if ($pos === false)
      return false;
    $ext = strtolower(trim(substr( $url, $pos)));
    $imgExts = array(".gif", ".jpg", ".jpeg", ".png", ".tiff", ".tif"); // this is far from complete but that's always going to be the case...
    if ( in_array($ext, $imgExts) )
      return true;
    return false;
  }

Editar En caso de que sea útil para alguien más, aquí está la función final usando la técnica de la respuesta de Emil H:

  function isImage($url)
  {
     $params = array('http' => array(
                  'method' => 'HEAD'
               ));
     $ctx = stream_context_create($params);
     $fp = @fopen($url, 'rb', false, $ctx);
     if (!$fp) 
        return false;  // Problem with url

    $meta = stream_get_meta_data($fp);
    if ($meta === false)
    {
        fclose($fp);
        return false;  // Problem reading data from url
    }

    $wrapper_data = $meta["wrapper_data"];
    if(is_array($wrapper_data)){
      foreach(array_keys($wrapper_data) as $hh){
          if (substr($wrapper_data[$hh], 0, 19) == "Content-Type: image") // strlen("Content-Type: image") == 19 
          {
            fclose($fp);
            return true;
          }
      }
    }

    fclose($fp);
    return false;
  }

Respuestas a la pregunta(8)

Su respuesta a la pregunta