API para obter informações de geolocalização de um IP

O site http://ipinfo.io/ disponibiliza uma API pública e gratuita (até 1000 requisições/dia) para consulta de geolocalização.

O funcionamento é bem simples, basta fazer uma requisição usando file_get_contents(), curl ou o que mais a imaginação desejar para o endreço http://ipinfo.io/XXX.XXX.XXX.XXX/json o retorno é em json então basta usar algum json parser pra trabalhar com os dados.

Exemplo:

curl ipinfo.io/8.8.8.8/geo
{
  "ip": "8.8.8.8",
  "loc": "37.385999999999996,-122.0838",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
}

Dica do Giuseppe

Como consultar a restituição do imposto de renda

Consultar restituição:

http://www.receita.fazenda.gov.br/aplicacoes/atrjo/consrest/atual.app/index.asp

Cronograma da restituição
http://www.receita.fazenda.gov.br/pessoafisica/restituicao/cronograma.htm

Converter chave ppk pra pem

Pra isso é necessário ter o putty instalado, por sorte ele tem port pra sistemas *nix

Instalando no Linux (debian/ubuntu)

sudo apt-get install putty-tools

Instalando no OpenSuSE

sudo zypper install putty

Instalando no MAC OSX

brew install putty

Pra converter, basta usar o comando:

puttygen MINHACHAVE.ppk -O private-openssh -o MINHACHAVE.pem

Mysql ERROR 1452 – Cannot add or update a child row

Estava exportando um dump de um cliente e me reparei com esse erro no mysql:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`databasename`.`#sql-c55_f93b7`, CONSTRAINT `foreign_key_name` FOREIGN KEY (`client_id`) REFERENCES `table_name` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

Este erro é muito comum quando o dump é editado manualmente e é inserido/editado algum dado que não está em conformidade com a chave estrangeira.
Para forçar um import, basta desabilitar a checagem de integridade das chaves estrangeiras inserindo a liha abaixo no início do arquivo de import:

SET foreign_key_checks = 0;

Só não se esquecendo que isso resolve a questão do import, mas não dos dados, então é sempre importante revisar os dados após o procedimento pra localizar a raiz do problema.

file_get_contents e scandir no php4

php
Pra quem precisa desenvolver mantendo compatibilidade com PHP4, aqui algumas funções que podem ser úteis. irei adicionando mais com o tempo.

if(!function_exists('scandir')) {
	function scandir($dir, $sortorder = 0) {
		if(!is_dir($dir)) return false;

		$dirlist = @opendir($dir);
		while(($file = readdir($dirlist)) !== false) {
			if(is_dir($file)) continue;
			$files[] = $file;
		}
		($sortorder == 0) ? asort($files) : rsort($files);
		return $files;
	}
}

if (!function_exists('file_put_contents')) {
	function file_put_contents($filename, $data, $append=false) {
		$mode = ($append == 'FILE_APPEND') ? 'a' : 'w';
		$f = @fopen($filename, $mode);
		if(!$f) return false;

		$bytes = fwrite($f, $data);
		fclose($f);
		return $bytes;
	}
}

E pra quem necessita de uma hospedagem de qualidade compatível com php4 ou várias versões do php5 (atualmente 5.2, 5.3 e 5.4), recomendo fortemente a kinghost.