sábado, 28 de maio de 2011

Info.php

Qual desenvolvedor PHP que de vez em sempre não precisa rodar o famoso comando phpinfo() em um servidor para ver quais extensões e recursos estão instalados?

E como não é chato ter que criar um arquivo info.php, lembrar corretamente do nome da função, é phpinfo() ou php_info() graças a padronização dos nomes de funções no PHP? Ter que conectar no servidor via ftp ou rsync, enviar o arquivo etc.

Não seria bem melhor ter um script pronto em um lugar estratégico e fácil de lembrar, rodá-lo e depois só acessar o endereço do site no browser e consultar a saída do phpinfo()?

Pensando nisso eu criei um pequeno script PHP que faz exatamente isso. Como o nome de generate_info.php basta abri-lo preencher o nome de usuário, password e endereço do servidor (só ftp por enquanto), dar permissão de execução para o script e rodá-lo assim "./generate_info.php". Prontinho! Basta acessar seu servidor na pasta indicada no endereço do servidor colocando o nome "info.php" no fim da url para ver a saída gerada.

Ah! Mais uma coisa! Não é muito seguro deixar este tipo de arquivo no seu servidor já que ele pode revelar muitas informações para pessoas mal intencionadas. Se você rodar o comando usando o parâmetro "-d" o arquivo info.php será excluído, ex: "./generate_info.php -d".

Para a galera do Windows estes comandos devem funcionar:
php.exe -f "generate_info.php" (criar o arquivo)
php.exe -f "generate_info.php" -- -d (excluir o arquivo)

Use este comando se você tiver o svn instalado para obter o script:
svn checkout http://hipercodigo.googlecode.com/svn/trunk/generate_info

Ou você pode acessar o arquivo diretamente neste endereço:
http://hipercodigo.googlecode.com/svn/trunk/generate_info/generate_info.php

domingo, 15 de maio de 2011

Número de conexões no banco de dados Postgre

No lugar onde trabalho não possuo acesso a estatísticas e recusos administrativos do servidor de banco de dados postgre. Talvez fruto de um ciúme doentio da equipe de banco de dados com seus preciosos servidores. De qualquer forma precisei ver como estava o número de conexões com o servidor, e felizmente o postgre permite que estes número sejam acessados através de simples comandos sql.

Lembre-se de que as configurações para coleta de estatísticas devem estar habilitadas. Estas opções adicionam alguma penalidade na execução de queries. Por padrão as opções que permitem usarmos o comando sql apresentado aqui ficam habilitadas. Caso este não seja seu caso dê uma olhada no arquivo postgresql.conf. Mais detalhes no manual.

Finalmente aqui vai o comando:
select datname, count(*) from pg_stat_activity group by datname;

Com este comando podemos ver o número de conexões ativas no momento de execução agrupando-as pelo nome do banco de dados.
A saída será semelhante a isso:

  datname  | count
-----------+-------
 testdb    |     5
 template1 |     1
(2 rows)

A tabela pg_stat_activity também tem outras colunas com outras informações interessantes:

datid - oid do banco de dados
datname - nome do banco de dados
procpid - id do processo
usesysid - OID do usuário
usename - nome do usuário
current_query - query sendo executada atualmente
waiting - status de espera da query
xact_start - horário em que a transação atual começou a executar
query_start - horário em que a query começou a executar
backend_start - horário em que o processo foi iniciado
client_addr - Endereço do cliente
client_port - Porta do cliente

As colunas que mostram informações sobre a query só podem ser vistas pelo super usuário ou se o usuário que estiver vendo as informações for o mesmo do processo que está sendo listado.
Está aí pessoal uma dica rápida, espero que seja útil à vocês.