Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nilson15

Verificar se timezone é suportado ou pelo php

Recommended Posts

Olá gente, eu tenho que verificar se um timezone tipo "Ameria/Campo_Grande" é suportado, pois na pagina de login do meu site eu possuo uma função javascript que detecta com base no horário do computador do usuário, assim esse timezone é enviado junto com as informações de login e no script de login eu preciso verificar se esse timezone é valido ou não, pois é possível que um usuário mal intencionado tenha alterado o timezone detectado pelo sistema do campo oculto da pagina de login e nesse caso eu preciso que o script redirecione a pagina de login novamente pra informar o erro. Eu já pensei em colocar todos os timezones em um array e no script de login verificar se o timezone é igual a um dos que estão no array, mas como são muitos penso que isso poderá fazer com que o script demore muito. Eu conto com a ajuda de vocês.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://php.net/manual/en/timezones.php

 

Não vai demorar, veja:

 

<?php

function isTimezoneSupported($timezone)
{
    $timezones = array(
        'America/Sao_Paulo',
        'America/Campo_Grande',
        // outros timezones..
    );

    return in_array($timezone, $timezones);
}

 

Basta adcionar os timezones no array e usar a função, é rápido para executar esse tipo de coisa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou você pode informar o timezone para date_default_timezone_set() e verificar o retorno TRUE para um timezone válido e FALSE caso contrário.

 

Porém, como muitos recursos do PHP que também servem para verificação além de definição, este dispara um Notice quando inválido, então acaba sendo um caso de uso legítimo para o supressor de erros (@).

 

Se quiser apenas verificar e não modificar, date_default_timezone_get() retorna o timezone padrão atual, assim, você pode reverter facilmente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas o arroba seria menos elegante e mais lento do que a solução com a função.

 

Será mesmo? :hehehe:

 

Vamos provar...

 

Utilizando date_default_timezone_set() com supressor de erros, para 100 requisições com concorrência de 10 foi possível obter em média 4347 Requisições por Segundo. O consumo de memória apontado por memory_get_usage() foi de 786432 bytes (0.75 MB)

 

Utilizando um array manualmente criado com todos os timezones disponíveis no manual em uma função (código abaixo), nas mesmas condições de número de requisições e concorrência foram obtidas em média 3030 Requisições por Segundo com um consumo de memória de 1048576 bytes (1 MB)

 

O Tempo por Requisição foram, em média, 2.3 ms e 3.3 ms, respectivamente.

 

Ou seja, em termos de performance, ambas são similares, afinal 250k de memória adicional não é assim muita coisa, pelo menos não para os parâmetros do teste:

 

ab -n 100 -c 10 URL

 

Porém, como é visível, mesmo usando o supressor de erros temos muitas mais requisições por segundo e em melhor velocidade.

 

Aqui sim 1 mísero milisegundo pode fazer a diferença porque se a aplicação demorar para responder, aquilo que o cliente verá (HTML, CSS e JS) vai demorar ainda mais porque, óbvio, depende do servidor entregar algo com que trabalhar.

 

Abaixo o código do Enrico com todos os timezones populados:

 

 

 

<?php

function isTimezoneSupported($timezone)
{
    $timezones = array(
 
        'Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa',
        'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako,',
        'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre',
        'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo',
        'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar',
        'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala',
        'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare',
        'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum',
        'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville',
        'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Lusaka',
        'Africa/Malabo', 'Africa/Maputo', 'Africa/Maseru', 'Africa/Mbabane',
        'Africa/Mogadishu', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena',
        'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou',
        'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu',
        'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'America/Adak',
        'America/Anchorage', 'America/Anguilla', 'America/Antigua',
        'America/Araguaina', 'America/Argentina/Buenos_Aires',
        'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia',
        'America/Argentina/Cordoba', 'America/Argentina/Jujuy',
        'America/Argentina/La_Rioja', 'America/Argentina/Mendoza',
        'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta',
        'America/Argentina/San_Juan', 'America/Argentina/San_Luis',
        'America/Argentina/Tucuman', 'America/Argentina/Ushuaia',
        'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka',
        'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem',
        'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista',
        'America/Bogota', 'America/Boise', 'America/Buenos_Aires',
        'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun',
        'America/Caracas', 'America/Catamarca', 'America/Cayenne',
        'America/Cayman', 'America/Chicago', 'America/Chihuahua',
        'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica',
        'America/Creston', 'America/Cuiaba', 'America/Curacao',
        'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek',
        'America/Denver', 'America/Detroit', 'America/Dominica',
        'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador',
        'America/Ensenada', 'America/Fort_Wayne', 'America/Fortaleza',
        'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay',
        'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe',
        'America/Guatemala', 'America/Guayaquil', 'America/Guyana',
        'America/Halifax', 'America/Havana', 'America/Hermosill',
        'America/Indiana/Indianapolis', 'America/Indiana/Knox',
        'America/Indiana/Marengo', 'America/Indiana/Petersburg',
        'America/Indiana/Tell_City', 'America/Indiana/Vevay',
        'America/Indiana/Vincennes', 'America/Indiana/Winamac',
        'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit',
        'America/Jamaica', 'America/Jujuy', 'America/Juneau',
        'America/Kentucky/Louisville', 'America/Kentucky/Monticello',
        'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz',
        'America/Lima', 'America/Los_Angeles', 'America/Louisville',
        'America/Lower_Princes', 'America/Maceio', 'America/Managua',
        'America/Manaus', 'America/Marigot', 'America/Martinique',
        'America/Matamoros', 'America/Mazatlan', 'America/Mendoza',
        'America/Menominee', 'America/Merida', 'America/Metlakatla',
        'America/Mexico_City', 'America/Miquelon', 'America/Moncton',
        'America/Monterrey', 'America/Montevideo', 'America/Montreal',
        'America/Montserrat', 'America/Nassau', 'America/New_York',
        'America/Nipigon', 'America/Nome', 'America/Noronha',
        'America/North_Dakota/Beulah', 'America/North_Dakota/Center',
        'America/North_Dakota/New_Salem', 'America/Ojinaga', 'America/Panama',
        'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix',
        'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre',
        'America/Porto_Velho', 'America/Puerto_Rico', 'America/Rainy_River',
        'America/Rankin_Inlet', 'America/Recife', 'America/Regina',
        'America/Resolute', 'America/Rio_Branco', 'America/Rosario',
        'America/Santa_Isabel', 'America/Santarem', 'America/Santiago',
        'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund',
        'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy',
        'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia',
        'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current',
        'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay',
        'America/Tijuana', 'America/Toronto', 'America/Tortola',
        'America/Vancouver', 'America/Virgin', 'America/Whitehorse',
        'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife',
        'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville',
        'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo',
        'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole',
        'Antarctica/Syowa', 'Antarctica/Vostok', 'Arctic/Longyearbyen',
        'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau',
        'Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Baghdad',
        'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Beirut',
        'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Choibalsan',
        'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca',
        'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai',
        'Asia/Dushanbe', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron',
        'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk',
        'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem',
        'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar',
        'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata',
        'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait',
        'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar',
        'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk',
        'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh',
        'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qyzylorda',
        'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin',
        'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore',
        'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran',
        'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo',
        'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator',
        'Asia/Urumqi', 'Asia/Ust-Nera', 'Asia/Vientiane', 'Asia/Vladivostok',
        'Asia/Yakutsk', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Atlantic/Azores',
        'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde',
        'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen',
        'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia',
        'Atlantic/St_Helena', 'Atlantic/Stanley', 'Australia/ACT',
        'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill',
        'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin',
        'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI',
        'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne',
        'Australia/North', 'Australia/NSW', 'Australia/Perth',
        'Australia/Queensland', 'Australia/South', 'Australia/Sydney',
        'Australia/Tasmania', 'Australia/Victoria', 'Australia/West',
        'Australia/Yancowinna', 'Europe/Amsterdam', 'Europe/Andorra',
        'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin',
        'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest',
        'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau',
        'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar',
        'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man',
        'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad',
        'Europe/Kiev', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London',
        'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn',
        'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia',
        'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague',
        'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino',
        'Europe/Sarajevo', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia',
        'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol',
        'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna',
        'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb',
        'Europe/Zaporozhye', 'Europe/Zurich', 'Indian/Antananarivo', 'Indian/Chagos',
        'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen',
        'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte',
        'Indian/Reunion', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Chatham',
        'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury',
        'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos',
        'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam',
        'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kiritimati',
        'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro',
        'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue',
        'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau',
        'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape',
        'Pacific/Port_Moresby', 'Pacific/Rarotonga', 'Pacific/Saipan',
        'Pacific/Samoa', 'Pacific/Tahiti', 'Pacific/Tarawa', 'Pacific/Tongatapu',
        'Pacific/Truk', 'Pacific/Wake', 'Pacific/Wallis', 'Pacific/Yap',
        'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West',
        'Canada/Atlantic', 'Canada/Central', 'Canada/East-Saskatchewan',
        'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland',
        'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'CET',
        'Chile/Continental', 'Chile/EasterIsland', 'CST6CDT', 'Cuba', 'EET',
        'Egypt', 'Eire', 'EST', 'EST5EDT', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1',
        'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3',
        'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8',
        'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11',
        'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3',
        'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8',
        'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/Universal',
        'Etc/UTC', 'Etc/Zulu', 'Factory', 'GB', 'GB-Eire', 'GMT', 'GMT+0',
        'GMT-0', 'GMT0', 'Greenwich', 'Hongkong', 'HST', 'Iceland', 'Iran',
        'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET',
        'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'MST', 'MST7MDT',
        'Navajo', 'NZ', 'NZ-CHAT', 'Poland', 'Portugal', 'PRC', 'PST8PDT', 'ROC',
        'ROK', 'Singapore', 'Turkey', 'UCT', 'Universal', 'US/Alaska',
        'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana',
        'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan',
        'US/Mountain', 'US/Pacific', 'US/Pacific-New', 'US/Samoa', 'UTC',
        'W-SU', 'WET', 'Zulu'
    );
 
    return in_array( $timezone, $timezones );
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sigo a filosofia de que: existe alternativa ao arroba? a use.

 

O ApacheBenchmark ele mede a página como todo, a forma confiável de se medir performance em um script PHP é usando CacheGrind, vamos aos relatórios:

 

Usando a função: http://i.imgur.com/8kisVye.png

Usando o arroba: Houston, we have a problem! Não é possível debugar script com arroba.

 

O arroba pode ser até mais rápido, mas aí que vem a questão: milésimos de segundo de performance ou um código melhor e "debugável".

 

Estamos cometendo um erro: otimização prematura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concordo que usar arroba é péssimo, só quis dizer apontar que existe a possibilidade e que ele é melhor do ponto de vista performance.

 

Eu por exemplo só uso o arroba num único fopen() que eu tenho e ainda assim dentro de uma condição para que se falhar eu tenha como saber e tratar.

 

A propósito, seu teste foi feito com a lista completa né? Só pra constar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno Augusto ou Enrico Pereira me tirem um duvida sobre o por que o uso do @ seria valido relacionado a arquivos, por exemplo não seria melhor usar um file_exists() antes de usar o fopen() ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas não é válido, mas operações que envolvem o sistema de arquivos são lentas file_exists() não é lá muito performático (stream_resolve_include_path() é melhor).

 

Só que fopen() (e cia) é outra daquelas funções antigas e que ainda não foram repaginadas (como a DateTime, por exemplo) então usar o arroba para verificar se a operação resultou em sucesso, criando o recurso ou não, vem bem a calhar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gente muito obrigado, depois de um tópico recheado de tantas respostas não tem como dizer que eu não aprendi, eu consegui resolver meu problema, fiz como falou o Enrico Pereira, eu criei uma função e dentro da função um array com todos os timezones possíveis, e na função ela apenas verifica se existe ou não o timezone no array. A função está aqui embaixo, quem precisar é só usar.

function timezone_validate($timezone){
    $list = array('Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara', 'Africa/Asmera', 'Africa/Bamako', 'Africa/Bangui', 'Africa/Banjul', 'Africa/Bissau', 'Africa/Blantyre', 'Africa/Brazzaville', 'Africa/Bujumbura', 'Africa/Cairo', 'Africa/Casablanca', 'Africa/Ceuta', 'Africa/Conakry', 'Africa/Dakar', 'Africa/Dar_es_Salaam', 'Africa/Djibouti', 'Africa/Douala', 'Africa/El_Aaiun', 'Africa/Freetown', 'Africa/Gaborone', 'Africa/Harare', 'Africa/Johannesburg', 'Africa/Juba', 'Africa/Kampala', 'Africa/Khartoum', 'Africa/Kigali', 'Africa/Kinshasa', 'Africa/Lagos', 'Africa/Libreville', 'Africa/Lome', 'Africa/Luanda', 'Africa/Lubumbashi', 'Africa/Monrovia', 'Africa/Nairobi', 'Africa/Ndjamena', 'Africa/Niamey', 'Africa/Nouakchott', 'Africa/Ouagadougou', 'Africa/Porto-Novo', 'Africa/Sao_Tome', 'Africa/Timbuktu', 'Africa/Tripoli', 'Africa/Tunis', 'Africa/Windhoek', 'Antarctica/Casey', 'Antarctica/Davis', 'Antarctica/DumontDUrville', 'Antarctica/Macquarie', 'Antarctica/Mawson', 'Antarctica/McMurdo', 'Antarctica/Palmer', 'Antarctica/Rothera', 'Antarctica/South_Pole', 'Antarctica/Syowa', 'Antarctica/Vostok', 'Arctic/Longyearbyen', 'Atlantic/Azores', 'Atlantic/Bermuda', 'Atlantic/Canary', 'Atlantic/Cape_Verde', 'Atlantic/Faeroe', 'Atlantic/Faroe', 'Atlantic/Jan_Mayen', 'Atlantic/Madeira', 'Atlantic/Reykjavik', 'Atlantic/South_Georgia', 'Atlantic/St_Helena', 'Atlantic/Stanley', 'Indian/Antananarivo', 'Indian/Chagos', 'Indian/Christmas', 'Indian/Cocos', 'Indian/Comoro', 'Indian/Kerguelen', 'Indian/Mahe', 'Indian/Maldives', 'Indian/Mauritius', 'Indian/Mayotte', 'Indian/Reunion', 'America/Adak', 'America/Anchorage', 'America/Anguilla', 'America/Antigua', 'America/Araguaina', 'America/Argentina/Buenos_Aires', 'America/Argentina/Catamarca', 'America/Argentina/ComodRivadavia', 'America/Argentina/Cordoba', 'America/Argentina/Jujuy', 'America/Argentina/La_Rioja', 'America/Argentina/Mendoza', 'America/Argentina/Rio_Gallegos', 'America/Argentina/Salta', 'America/Argentina/San_Juan', 'America/Argentina/San_Luis', 'America/Argentina/Tucuman', 'America/Argentina/Ushuaia', 'America/Aruba', 'America/Asuncion', 'America/Atikokan', 'America/Atka', 'America/Bahia', 'America/Bahia_Banderas', 'America/Barbados', 'America/Belem', 'America/Belize', 'America/Blanc-Sablon', 'America/Boa_Vista', 'America/Bogota', 'America/Boise', 'America/Buenos_Aires', 'America/Cambridge_Bay', 'America/Campo_Grande', 'America/Cancun', 'America/Caracas', 'America/Catamarca', 'America/Cayenne', 'America/Cayman', 'America/Chicago', 'America/Chihuahua', 'America/Coral_Harbour', 'America/Cordoba', 'America/Costa_Rica', 'America/Creston', 'America/Cuiaba', 'America/Curacao', 'America/Danmarkshavn', 'America/Dawson', 'America/Dawson_Creek', 'America/Denver', 'America/Detroit', 'America/Dominica', 'America/Edmonton', 'America/Eirunepe', 'America/El_Salvador', 'America/Ensenada', 'America/Fort_Wayne', 'America/Fortaleza', 'America/Glace_Bay', 'America/Godthab', 'America/Goose_Bay', 'America/Grand_Turk', 'America/Grenada', 'America/Guadeloupe', 'America/Guatemala', 'America/Guatemala', 'America/Guyana', 'America/Halifax', 'America/Havana', 'America/Hermosillo', 'America/Indiana/Indianapolis', 'America/Indiana/Knox', 'America/Indiana/Marengo','America/Indiana/Petersburg', 'America/Indiana/Tell_City', 'America/Indiana/Vevay', 'America/Indiana/Vincennes', 'America/Indiana/Winamac', 'America/Indianapolis', 'America/Inuvik', 'America/Iqaluit', 'America/Jamaica', 'America/Jujuy', 'America/Juneau', 'America/Kentucky/Louisville', 'America/Kentucky/Monticello', 'America/Knox_IN', 'America/Kralendijk', 'America/La_Paz', 'America/Lima', 'America/Los_Angeles', 'America/Louisville', 'America/Lower_Princes', 'America/Maceio', 'America/Managua', 'America/Manaus', 'America/Marigot', 'America/Martinique', 'America/Matamoros', 'America/Mazatlan', 'America/Mendoza', 'America/Menominee', 'America/Merida', 'America/Metlakatla', 'America/Mexico_City', 'America/Miquelon', 'America/Moncton', 'America/Monterrey', 'America/Montevideo', 'America/Montreal', 'America/Montserrat', 'America/Nassau', 'America/New_York', 'America/Nipigon', 'America/Nome', 'America/Noronha', 'America/North_Dakota/Beulah', 'America/North_Dakota/Center', 'America/North_Dakota/New_Salem', 'America/Ojinaga', 'America/Panama', 'America/Pangnirtung', 'America/Paramaribo', 'America/Phoenix', 'America/Port-au-Prince', 'America/Port_of_Spain', 'America/Porto_Acre', 'America/Porto_Velho', 'America/Puerto_Rico', 'America/Rainy_River', 'America/Rankin_Inlet', 'America/Recife', 'America/Regina', 'America/Resolute', 'America/Rio_Branco', 'America/Rosario', 'America/Santa_Isabel', 'America/Santarem', 'America/Santiago', 'America/Santo_Domingo', 'America/Sao_Paulo', 'America/Scoresbysund', 'America/Shiprock', 'America/Sitka', 'America/St_Barthelemy', 'America/St_Johns', 'America/St_Kitts', 'America/St_Lucia', 'America/St_Thomas', 'America/St_Vincent', 'America/Swift_Current', 'America/Tegucigalpa', 'America/Thule', 'America/Thunder_Bay', 'America/Tijuana', 'America/Toronto', 'America/Tortola', 'America/Vancouver', 'America/Virgin', 'America/Whitehorse', 'America/Winnipeg', 'America/Yakutat', 'America/Yellowknife', 'Asia/Aden', 'Asia/Almaty', 'Asia/Amman', 'Asia/Anadyr', 'Asia/Aqtau', ' Asia/Aqtobe', 'Asia/Ashgabat', 'Asia/Ashkhabad', 'Asia/Baghdad', 'Asia/Bahrain', 'Asia/Baku', 'Asia/Bangkok', 'Asia/Beirut', 'Asia/Bishkek', 'Asia/Brunei', 'Asia/Calcutta', 'Asia/Choibalsan', 'Asia/Chongqing', 'Asia/Chungking', 'Asia/Colombo', 'Asia/Dacca', 'Asia/Damascus', 'Asia/Dhaka', 'Asia/Dili', 'Asia/Dubai', 'Asia/Dushanbe', 'Asia/Gaza', 'Asia/Harbin', 'Asia/Hebron', 'Asia/Ho_Chi_Minh', 'Asia/Hong_Kong', 'Asia/Hovd', 'Asia/Irkutsk', 'Asia/Istanbul', 'Asia/Jakarta', 'Asia/Jayapura', 'Asia/Jerusalem', 'Asia/Kabul', 'Asia/Kamchatka', 'Asia/Karachi', 'Asia/Kashgar', 'Asia/Kathmandu', 'Asia/Katmandu', 'Asia/Khandyga', 'Asia/Kolkata', 'Asia/Krasnoyarsk', 'Asia/Kuala_Lumpur', 'Asia/Kuching', 'Asia/Kuwait', 'Asia/Macao', 'Asia/Macau', 'Asia/Magadan', 'Asia/Makassar', 'Asia/Manila', 'Asia/Muscat', 'Asia/Nicosia', 'Asia/Novokuznetsk', 'Asia/Novosibirsk', 'Asia/Omsk', 'Asia/Oral', 'Asia/Phnom_Penh', 'Asia/Pontianak', 'Asia/Pyongyang', 'Asia/Qatar', 'Asia/Qyzylorda', 'Asia/Rangoon', 'Asia/Riyadh', 'Asia/Saigon', 'Asia/Sakhalin', 'Asia/Samarkand', 'Asia/Seoul', 'Asia/Shanghai', 'Asia/Singapore', 'Asia/Taipei', 'Asia/Tashkent', 'Asia/Tbilisi', 'Asia/Tehran', 'Asia/Tel_Aviv', 'Asia/Thimbu', 'Asia/Thimphu', 'Asia/Tokyo', 'Asia/Ujung_Pandang', 'Asia/Ulaanbaatar', 'Asia/Ulan_Bator', 'Asia/Urumqi', 'Asia/Ust-Nera', ']Asia/Vientiane', 'Asia/Vladivostok', 'Asia/Yakutsk', 'Asia/Yekaterinburg', 'Asia/Yerevan', 'Australia/ACT', 'Australia/Adelaide', 'Australia/Brisbane', 'Australia/Broken_Hill', 'Australia/Canberra', 'Australia/Currie', 'Australia/Darwin', 'Australia/Eucla', 'Australia/Hobart', 'Australia/LHI', 'Australia/Lindeman', 'Australia/Lord_Howe', 'Australia/Melbourne', 'Australia/North', 'Australia/NSW', 'Australia/Perth', 'Australia/Queensland', 'Australia/South', 'Australia/Sydney', 'Australia/Tasmania', 'Australia/Victoria', 'Australia/West', 'Australia/Yancowinna', 'Pacific/Apia', 'Pacific/Auckland', 'Pacific/Chatham', 'Pacific/Chuuk', 'Pacific/Easter', 'Pacific/Efate', 'Pacific/Enderbury', 'Pacific/Fakaofo', 'Pacific/Fiji', 'Pacific/Funafuti', 'Pacific/Galapagos', 'Pacific/Gambier', 'Pacific/Guadalcanal', 'Pacific/Guam', 'Pacific/Honolulu', 'Pacific/Johnston', 'Pacific/Kiritimati', 'Pacific/Kosrae', 'Pacific/Kwajalein', 'Pacific/Majuro', 'Pacific/Marquesas', 'Pacific/Midway', 'Pacific/Nauru', 'Pacific/Niue', 'Pacific/Norfolk', 'Pacific/Noumea', 'Pacific/Pago_Pago', 'Pacific/Palau', 'Pacific/Pitcairn', 'Pacific/Pohnpei', 'Pacific/Ponape', 'Europe/Amsterdam', 'Europe/Andorra', 'Europe/Athens', 'Europe/Belfast', 'Europe/Belgrade', 'Europe/Berlin', 'Europe/Bratislava', 'Europe/Brussels', 'Europe/Bucharest', 'Europe/Budapest', 'Europe/Busingen', 'Europe/Chisinau', 'Europe/Copenhagen', 'Europe/Dublin', 'Europe/Gibraltar', 'Europe/Guernsey', 'Europe/Helsinki', 'Europe/Isle_of_Man', 'Europe/Istanbul', 'Europe/Jersey', 'Europe/Kaliningrad', 'Europe/Kiev', 'Europe/Lisbon', 'Europe/Ljubljana', 'Europe/London', 'Europe/Luxembourg', 'Europe/Madrid', 'Europe/Malta', 'Europe/Mariehamn', 'Europe/Minsk', 'Europe/Monaco', 'Europe/Moscow', 'Europe/Nicosia', 'Europe/Oslo', 'Europe/Paris', 'Europe/Podgorica', 'Europe/Prague', 'Europe/Riga', 'Europe/Rome', 'Europe/Samara', 'Europe/San_Marino', 'Europe/Sarajevo', 'Europe/Simferopol', 'Europe/Skopje', 'Europe/Sofia', 'Europe/Stockholm', 'Europe/Tallinn', 'Europe/Tirane', 'Europe/Tiraspol', 'Europe/Uzhgorod', 'Europe/Vaduz', 'Europe/Vatican', 'Europe/Vienna', 'Europe/Vilnius', 'Europe/Volgograd', 'Europe/Warsaw', 'Europe/Zagreb', 'Europe/Zaporozhye', 'Europe/Zurich', 'Brazil/Acre', 'Brazil/DeNoronha', 'Brazil/East', 'Brazil/West', 'Canada/Atlantic', 'Canada/Central', 'Canada/East-Saskatchewan', 'Canada/Eastern', 'Canada/Mountain', 'Canada/Newfoundland', 'Canada/Pacific', 'Canada/Saskatchewan', 'Canada/Yukon', 'CET', 'Chile/Continental', 'Chile/EasterIsland', 'CST6CDT', 'Cuba', 'EET', 'Egypt', 'Eire', 'EST', 'EST5EDT', 'Etc/GMT', 'Etc/GMT+0', 'Etc/GMT+1', 'Etc/GMT+10', 'Etc/GMT+11', 'Etc/GMT+12', 'Etc/GMT+2', 'Etc/GMT+3', 'Etc/GMT+4', 'Etc/GMT+5', 'Etc/GMT+6', 'Etc/GMT+7', 'Etc/GMT+8', 'Etc/GMT+9', 'Etc/GMT-0', 'Etc/GMT-1', 'Etc/GMT-10', 'Etc/GMT-11', 'Etc/GMT-12', 'Etc/GMT-13', 'Etc/GMT-14', 'Etc/GMT-2', 'Etc/GMT-3', 'Etc/GMT-4', 'Etc/GMT-5', 'Etc/GMT-6', 'Etc/GMT-7', 'Etc/GMT-8', 'Etc/GMT-9', 'Etc/GMT0', 'Etc/Greenwich', 'Etc/UCT', 'Etc/Universal', 'Etc/UTC', 'Etc/Zulu', 'Factory', 'GB', 'GB-Eire', 'GMT', 'GMT+0', 'GMT-0', 'GMT0', 'Greenwich', 'Hongkong', 'HST', 'Iceland', 'Iran', 'Israel', 'Jamaica', 'Japan', 'Kwajalein', 'Libya', 'MET', 'Mexico/BajaNorte', 'Mexico/BajaSur', 'Mexico/General', 'MST', 'MST7MDT', 'Navajo', 'NZ', 'NZ-CHAT', 'Poland', 'Portugal', 'PRC', 'PST8PDT', 'ROC', 'ROK', 'Singapore', 'Turkey', 'UCT', 'Universal', 'US/Alaska', 'US/Aleutian', 'US/Arizona', 'US/Central', 'US/East-Indiana', 'US/Eastern', 'US/Hawaii', 'US/Indiana-Starke', 'US/Michigan', 'US/Mountain', 'US/Pacific', 'US/Pacific-New', 'US/Samoa', 'UTC', 'W-SU', 'WET', 'Zulu');
    if (in_array($timezone, $list)){
        echo true;
    }else{
        echo false;
    }
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pra constar eu já tinha repostado a função do Enrico com a lista completa de timezones no post #5.

 

Você não deve ter visto porque ela tá escondidinha num SPOILER. ^_^

 

Mas... echo TRUE? :huh:

 

´Funções 99% das vezes não devem ecoar/printar nada e sim retornar algo para que o programa que a utilizar faça alguma coisa com a informação (que normalmente seria um teste lógico).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coincidência, mas precisei disso ontem (não necessariamente igual), não vou falar o meu caso, mas sim minha solução.

Eu como uso sempre a DateTime, fiz utilizando isso aqui:

 

<?php

    $timezones = DateTimeZone::listIdentifiers();
    var_dump($timezones);
    
    // ...

 

 

Daí você faz o que quiser com essa variável, ela vai ter toda informação que você precisa pra verificar a validade do input.

 

Você também pode dar uma olhada :seta: http://www.php.net/manual/en/class.datetimezone.php

P.S: Eu acho horroroso enfiar um array DESTE² tamanho no código, eu prefiro jogar em outro arquivo, se for o caso ... mas sempre que precisei tive alternativa, nunca achei um caso em que fosse realmente necessário ter arrays assim no código.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

:clap: ... <pausa pra respirar> :clap: <pausa pra respirar> :clap:

 

Não conhecia esse recurso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se o arroba existe e funciona como alternativa para inibir notice de algumas funções, não acho inválido utiliza-lo, pois se a aplicação for pequena, em se tratando de performance, não vejo problema em utilizar já que o afeto ao sistema seria, digamos, insignificante. O problema é que quando você abre o código e enxergar um "@" da logo uma tristeza. :P

 

Bruno Augusto ou Enrico Pereira me tirem um duvida sobre o por que o uso do @ seria valido relacionado a arquivos, por exemplo não seria melhor usar um file_exists() antes de usar o fopen() ?

 

Permita-me. Eu sempre utilizei o file_exists() para verificar a existência de arquivos... eu acho a função eficiente, embora tenha mais performance a stream_resolve_include_path

Compartilhar este post


Link para o post
Compartilhar em outros sites

O maior problema de suprimir os erros de fopen() é quando você está fazendo algo que normalmente faria com a cURL, como consumir uma API

 

Se você fizer alguma coisa errada durante o processo de autenticação, por exemplo, o servidor vai ter retornar um 401 e você não ver.

 

Quando se trabalhando com OOP e PHP o melhor seria tratar com Exceptions e, para os erros das funções nativas, convertê-los em ErrorExceptions. Só que fica chato de lidar com as várias particularidades de toooooodas as funções pra se ter um handler 100% uniforme.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.