Lista de codigos de retorno do protocolo http…

Successful
  Client Requests
200 OK
201 Created
202 Accepted
203 Non-Authorative Information
204 No Content
205 Reset Content
206 Partial Content
Client
  Request Redirected
300 Multiple Choices
301 Moved Permanently
302 Moved Temporarily
303 See Other
304 Not Modified
305 Use Proxy
Client
  Request Errors
400 Bad Request
401 Authorization Required
402 Payment Required (not used yet)
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable (encoding)
407 Proxy Authentication Required  
408 Request Timed Out
409 Conflicting Request
410 Gone
411 Content Length Required
412 Precondition Failed
413 Request Entity Too Long
414 Request URI Too Long
415 Unsupported Media Type
Server
  Errors
500 Internal Server Error
501 Not Implemented
502 Bad Gateway  
503 Service Unavailable  
504 Gateway Timeout  
505 HTTP Version Not Supported  

Lista de respostas possiveis quando se liga a um servidor pelo protocolo http.

Quando se usa API’s fornecidas por terceiros é muito importante analisar os headers retornados pelo servidor para o resultado ser o pretendido!

PHP init_set o que é??

As configurações do php independentemente da plataforma em que corre são por defeito feitas num ficheiro que se chama php.ini , quem precisa de alterar uma das confiurações para um script especifico ou não tem acesso a editar o php.ini pode contornar isso usando a função init_set a sintaxe é a seguinte:

init_set (“Nome_Parametro”, “Valor_parametro”);

Esta função retorna false no caso de por alguma razão o parâmetro não ter sido alterado e retorna o valor antigo no caso da alteração ter sido bem sucedida!

Se por exemplo quisermos alterar o limite de memoria alocável podemos usar o init_set da seguinte forma:

ini_set(“memory_limit”,”64M”;

Nem todas os parâmetros do php.ini são alteráveis, não encontrei nenhuma lista dos parâmetros alteráveis, mas é fácil quando usarem esta função se a sintaxe estiver correcta e se o valor do parâmetro for válido e mesmo assim a função retornar false é porque provavelmente descobriram um parâmetro não editável em runtime!

PHP Geoip – Fatal error: Allowed memory size of…

Para aqueles que estão a usar o código que disponibilizei neste post sobre a API do GeoIP, ou que usam o GeoIP de qualquer outra forma!

Hoje uma das aplicações em PHP que fiz utilizando a API do GeoIP, começou a dar um erro “Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 27609379 bytes) in /path_para_o_site/my-ip-info/geoipapi/geoip.inc.php on line 316

A primeira coisa que fiz foi tentar com o init_set do PHP aumentar o “memory_limit” do PHP (ini_set(“memory_limit”,”64M”);) que não deu resultado apesar do valor a alocar fosse bastante mais baixo do que o limite.

Após vários testes falhados alterei um parametro na linha em que crio o apontador para a base de dados e ficou a funcionar correctamente! Na linha onde estava “$gcity = geoip_open(“db/GeoLiteCity.dat”,GEOIP_MEMORY_CACHE);” passou a estar “$gcity = geoip_open(“db/GeoLiteCity.dat”,none);” ficou a funcionar embora se note uma pequena perda de velocidade quase imperceptivel mas está mais lento!

Depois de o problema estar resolvido fui ao site da MaxMind dar uma vista de olhos e encontrei um benchmark dos diferentes tipos de cache que se pode ter e qual o numero de queries/segundo conforme o tipo de cache!

Sistema simples de cache com PHP…

Muitas vezes quando criamos um site e por pelas mais diversas razões surge necessidade de recorrer a um mecanismo de cache, uma das principais razões é a performance.

E em que é que cache influencia a performance? Imagina-se o ficheiro teste.php com 500 linhas de código com ligações a MySQL etc etc, é mais rápido se o ficheiro de output já estiver “feito” e só o actualizar de x em x temp, senão cada pedido seria 500 linhas de código assim serão 10 ou 20 conforme o mecanismo de cache a usar, temos que ter em conta que se nesse código existirem queries ao MySQL isso degrada ainda mais a performance.

Estou a criar uma classe de cache que de uma forma muito simples faz cache do output de qualquer script php inclusive se este tiver dados passados pelo método GET.

A classe pode ser muitissimo melhorada para já só faz o que se propõe que é verificar se um ficheiro já se encontra em cache, se o mesmo estiver cria o output para o cliente, se ainda não existir cache é criado um buffer com o output da página pedida e cria um ficheiro em cache com o conteúdo do mesmo, que será servido no próximo pedido…

O código da minha classe é o seguinte:

O post está dividido porque é muito extenso!!…

Continuar a ler Sistema simples de cache com PHP…

Abrir Ficheiros MDI com o Office 2007

Embora o formato MDI seja propietario da Microsoft, o Office 2007 na sua instalação default não instala nada que permita abrir estes ficheiros. Mas o software que permite a leitura deste genero de ficheiros faz parte do Office 2007, para adicionar esta funcionalidade basta seguir os seguintes passos:

1- Abrir o “Adicionar Remover Programas” que está no “Painel de controlo”

2 – No “Adicionar Remover Programas” seleccionar o “Microsoft Office Versão 2007″

3- Clicar no botão “Alterar” e seleccionar “Adicionar Funcionalidades”

4- Procurar a tab “Ferramentas do Office” e seleccionar “Microsoft Office Visalizador de Documentos de Imaging e Fax” e clicar em “Instalar tudo a partir do meu computador”.

5- Clicar em “Concluir” e já está!!!

E ai está a tão apregoada retrocompatibilidade da Microsoft!

O meu Windows + Office estão em Inglês por isso a tradução dos nomes para PT pode não ser exactamente a que fiz, mas é por certo algo do genero!

GeoLite City

Respondendo ao comentário neste artigo que pergunta se é possivel detectar a cidade com o GeoIP, e resposta é sim, tem que é que usar outra base de dados também gratuita que é GeoLite City a API para usar está aqui….

Segue um exemplo da utilização da API e da base de dados em PHP:


<?php

//incluir os ficheiros necessários

include("geoipcity.inc.php");

include("geoipregionvars.php");

//abrir a base de dados

$gcity = geoip_open(“GeoLiteCity.dat”,GEOIP_MEMORY_CACHE);

//Usar a função para iniciar a classe que nos irá fornecer os dados

$record = geoip_record_by_addr($gcity,$endereço_ip_a_testar);

// as variaveis que a classe nos diponibiliza são as seguintes

$paisCodigo = $record->country_code;

$paisCodigo3 = $record->country_code3;

$paisNome = $record->country_name;

$regiaoCodigo = $record->region;

$regiaoNome = $GEOIP_REGION_NAME[$record->country_code][$record->region];

$cidadeNome = $record->city;

$cidadeCodPostal = $record->postal_code;

$latitude = $record->latitude;

$longitude = $record->longitude;

$dma_code = $record->dma_code;

$area_code =$record->area_code;

?>

Já agora podem ver um exemplo criado por mim usando o GeoIP aqui