esta funcion te servira aunque es un poco lenta si lo utilizas con muchos archivos (galeria). el codigo  lo iba a mostrar pronto. pero no habia tenido tiempo.
 
lo utilizas asi
ruta = "../img/demo.jpg" 
If gfxSpex(Server.Mappath(ruta), w, h) then
	'es una imagen valida (GIF o JPG)
	response.write "Width = " & w
	response.write "<br>Height = " & h
End If    
 Código PHP:
    '------------------------------------------------------------
 
 
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  ':::                                                             :::
  ':::  This routine will attempt to identify any filespec passed  :::
  ':::  as a graphic file (regardless of the extension). This will :::
  ':::  work with GIF or JPG files.                            :::
  ':::                                                             :::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  ':::          Based on ideas presented by David Crowell          :::
  ':::                   (credit where due)                        :::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  '::: blah blah blah blah blah blah blah blah blah blah blah blah :::
  '::: blah blah blah blah blah blah blah blah blah blah blah blah :::
  '::: blah blah     Copyright *c* MM,  Mike Shaffer     blah blah :::
  '::: blah blah      ALL RIGHTS RESERVED WORLDWIDE      blah blah :::
  '::: blah blah  Permission is granted to use this code blah blah :::
  '::: blah blah   in your projects, as long as this     blah blah :::
  '::: blah blah      copyright notice is included       blah blah :::
  '::: blah blah blah blah blah blah blah blah blah blah blah blah :::
  '::: blah blah blah blah blah blah blah blah blah blah blah blah :::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
 
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  ':::                                                             :::
  ':::  This function gets a specified number of bytes from any    :::
  ':::  file, starting at the offset (base 1)                      :::
  ':::                                                             :::
  ':::  Passed:                                                    :::
  ':::       sFileName        => Filespec of file to read          :::
  ':::       offset      => Offset at which to start reading       :::
  ':::       bytes       => How many bytes to read                 :::
  ':::                                                             :::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  function GetBytes(sFileName, offset, bytes)
 
     Dim objFSO
     Dim objFTemp
     Dim objTextStream
     Dim lngSize
 
     on error resume next
 
     Set objFSO = CreateObject("Scripting.FileSystemObject")
     
     ' First, we get the filesize
     Set objFTemp = objFSO.GetFile(sFileName)
     lngSize = objFTemp.Size
     set objFTemp = nothing
 
     fsoForReading = 1
     Set objTextStream = objFSO.OpenTextFile(sFileName, fsoForReading)
 
     if offset > 0 then
        strBuff = objTextStream.Read(offset - 1)
     end if
 
     if bytes = -1 then        ' Get All!
 
        GetBytes = objTextStream.Read(lngSize)  'ReadAll
 
     else
 
        GetBytes = objTextStream.Read(bytes)
 
     end if
    
     objTextStream.Close
     set objTextStream = nothing
     set objFSO = nothing
 
  end function
 
 
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  ':::                                                             :::
  ':::  Functions to convert two bytes to a numeric value (long)   :::
  ':::  (both little-endian and big-endian)                        :::
  ':::                                                             :::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  function lngConvert(strTemp)
     lngConvert = clng(asc(left(strTemp, 1)) + ((asc(right(strTemp, 1)) * 256)))
  end function
 
  function lngConvert2(strTemp)
     lngConvert2 = clng(asc(right(strTemp, 1)) + ((asc(left(strTemp, 1)) * 256)))
  end function
 
  
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  ':::                                                             :::
  ':::  This function does most of the real work. It will attempt  :::
  ':::  to read any file, regardless of the extension, and will    :::
  ':::  identify if it is a graphical image.                       :::
  ':::                                                             :::
  ':::  Passed:                                                    :::
  ':::       sFileName        => Filespec of file to read          :::
  ':::       width       => width of image                         :::
  ':::       height      => height of image                        :::
  ':::                                                             :::
  ':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  function gfxSpex(sFileName, width, height)
      'get the width and height of the passed file
      'can only be a GIF or JPG
 
     dim strGIF
     dim strType
     strType = ""
     strImageType = "(unknown)"
 
     gfxSpex = False
     
     strGIF = "GIF"
 
     strType = GetBytes(sFileName, 0, 3)
 
     if strType = strGIF then                ' is GIF
 
        strImageType = "GIF"
        Width = lngConvert(GetBytes(sFileName, 7, 2))
        Height = lngConvert(GetBytes(sFileName, 9, 2))
        gfxSpex = True
 
     else
 
        strBuff = GetBytes(sFileName, 0, -1)         Get all bytes from file
        lngSize = len(strBuff)
        flgFound = 0
 
        strTarget = chr(255) & chr(216) & chr(255)
        flgFound = instr(strBuff, strTarget)
 
        if flgFound = 0 then
           exit function
        end if
 
        strImageType = "JPG"
        lngPos = flgFound + 2
        ExitLoop = false
 
        do while ExitLoop = False and lngPos < lngSize
 
           do while asc(mid(strBuff, lngPos, 1)) = 255 and lngPos < lngSize
              lngPos = lngPos + 1
           loop
 
           if asc(mid(strBuff, lngPos, 1)) < 192 or asc(mid(strBuff, lngPos, 1)) > 195 then
              lngMarkerSize = lngConvert2(mid(strBuff, lngPos + 1, 2))
              lngPos = lngPos + lngMarkerSize  + 1
           else
              ExitLoop = True
           end if
 
       loop
 
       if ExitLoop = False then
 
          Width = -1
          Height = -1
 
       else
 
          Height = lngConvert2(mid(strBuff, lngPos + 4, 2))
          Width = lngConvert2(mid(strBuff, lngPos + 6, 2))
          gfxSpex = True
 
       end if
                   
     end if
 
  end function 
    
  
Un Saludo