<p>I'm programming something that allows users to store documents and pictures on a webserver, to be stored and retrieved later.  When users upload files to my server, PHP tells me what filetype it is based on the extension.  However, I'm afraid that users could rename a zip file as somezipfile.png and store it, thus keeping a zip file on my server.  Is there any reasonable way to open an uploaded file and "check" to see if it truly is of the said filetype?</p>

Sort of. Most file types have some bytes reserved for marking them so that you don't have to rely on the extension.  The site
http://wotsit.org
is a great resource for finding this out for a particular type.
If you are on a unix system, I believe that the file command doesn't rely on the extension, so you could shell out to it if you don't want to write the byte checking code.
For PNG (
http://www.w3.org/TR/PNG-Rationale.html
)
The first eight bytes of a PNG file always contain the following values:
(decimal)              137  80  78  71  13  10  26  10
(hexadecimal)           89  50  4e  47  0d  0a  1a  0a
(ASCII C notation)    \211   P   N   G  \r  \n \032 \n