Some linux dsitributions (eg: debian) use the disrio-provided zoneinfo database (/usr/share/zoneinfo). This means to get a list of timezones programmatically you can search through that directory (recursively). This also means that zones used by other software that use this zoneinfo database (eg postgresql) will also be supported by php.