Here's an example using PostGIS, the spatial extensions to postgresql. Similar extensions exist for mysql, oracle, mssql, sqlite and no doubt other databases. PostGIS must be installed for this to work.
First, you must convert the shapefile to an sql file:
fmark@fmark-laptop:~$ shp2pgsql -c Desktop/zillow/ZillowNeighborhoods-AK.shp zillowak > Desktop/zillow/ZillowNeighborhoods-AK.sql
Shapefile type: Polygon
Postgis type: MULTIPOLYGON[2]
Then run the sql on the database (database "gis" in this case) to convert the sql file to a spatially enabled table:
fmark@fmark-laptop:~$ psql -d gis -f Desktop/zillow/ZillowNeighborhoods-AK.sql
SET
BEGIN
...
COMMIT
At this point you probably want to create a spatial index, as you are going to be doing a spatial query:
fmark@fmark-laptop:~$ psql -d gis
psql (8.4.2)
Type "help" for help.
gis=# CREATE INDEX idx_neighborhoods ON zillowak USING gist(the_geom);
CREATE INDEX
gis-# \q
Now, if you have a lat/long (in this example -149.309W, 60.985S), you can find which neighborhood it is in:
fmark@fmark-laptop:~$ psql -d gis
psql (8.4.2)
Type "help" for help.
gis=# select gid, state, county, city, name, regionid from zillowak WHERE ST_CONTAINS(the_geom, GeomFromText('POINT(-149.309 60.985)', -1));
gid | state | county | city | name | regionid
-----+-------+-----------+-----------+---------------+----------
29 | AK | Anchorage | Anchorage | Turnagain Arm | 275783
(1 row)
gis=# \q
fmark@fmark-laptop:~$
This last stage can obviously be done from PHP by a simple query.