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…

Ubuntu, Apache, php e Mysql

Não podia ser mais fácil instalar um servidor web com Ubuntu basta na consola escrever

sudo apt-get install apache2 mysql-server-4.1 php5 php5-mysql

Se o servidor for apenas para uso pessoal e testes sem acessos externos podemos fazer

sudo chmod 777 /var/www/

Se o servidor estiver disponivel na internet devemos ter mais preocupação com a segurança!!

Para testar o servidor basta na pasta /var/www (Pasta root default do apache) colocar um ficheiro.php com o conteudo

< ?php phpinfo(); ?>

e apontar o browser para “http://127.0.0.1/ficheiro.php” se vir uma página com a configuração do php então temos o php a trabalhar!!

Para testar o MySQL criamos um ficheiro “mysql.php” com o conteudo

< ?php $link = mysql_connect('localhost', 'root', ''); if (!$link) { die('Erro ao ligar ao mysql: ' . mysql_error()); } echo 'Funciona!!!!'; mysql_close($link); ?>

e apontamos o browser para http://127.0.0.1/mysql.php e o estado da operacionalidade do mysql aparecerá nessa página!!!
Por defeito a password de root é em branco que por razões óbvias deve ser alterada!!!

Simples!!!

Apache, php e MySQL @ home….

Apache webserverPhpMysql

Vou tentar explicar aqui como se configura um servidor web com suporte para Php e Mysql num sistema Windows, testei em XP home e Professional!!!
No windows XP professional vem incluido o IIS que é o servidor web da Microsoft mas aqui o que vamos usar é o Apache, por causa da universalidade, segurança, fiabilidade etc etc etc etc…

Algumas considerações:
php.ini é o ficheiro onde são armazenadas as configurações do php on de podemos configurar o php para carregar varios modulos entre os quais o modulo que liga ao mysql. este ficheiro encontrasse no directorio de instalação do php.
httpd.conf é o ficheiro onde estão as configurações do Apache entre as quais o directorio onde o estão armazenados as paginas que serão “servidas” pelo nosso servidor… este ficheiro está no directorio de instalação do Apache\conf\

Para editar estes ficheiros basta usar o bloco de notas. Cada um deles tem uma sintaxe especifica que tem imperativamente que ser mantida….
Agora mãos à obra…
Continuar a ler Apache, php e MySQL @ home….