Text

PHP e JSON

Este post tem alguns exemplos de como fazê-lo e quais os resultados. JSON significa JavaScript Object Notation, e é amplamente utilizada em muitas línguas (e não apenas JavaScript) para a serialização.

Cidade dos Sonhos

Só vendo pra crer.

Vida Moderna

Ao som de Underoath - Too Bright to See, Too Loud to Hear - começo a pensar sobre a vida, sobre as variações intercambiaveis do ser

Vai debugar? O PhP Ajuda vc

qual programador que nunca utilizou um echo no PHP ou um system.out.println no Java pra saber o que esta sendo impresso em determinada parte do código?

Uso de Parentes afeta consulta?

Outro dia desses fui questionado sobre a utilização dos parenteses em uma consulta SQL. Pq usar?

quinta-feira, abril 22

Vai debugar? O PHP ajuda você.

qual programador que nunca utilizou um echo no PHP ou um system.out.println no Java pra saber o que esta sendo impresso em determinada parte do código? Esses truques são uma mão da roda pra quando se quer refinar/descobrir o que está sendo passado por uma variável. Para os adeptos do debug essa é uma das praticas mais conhecidas.

Mas já pensou se vc pudesse descobrir ou ter mais informações sobre determinada variavel? Me refiro a algo do tipo representanção estruturada e valor de arrays ...de forma que vc pudesse explorar recursivamente o elemento.

Na versão 4 e 5 do PHP existe a função chamada var_dump que tem por objetivo, como mencionei acima, mostrar informações sobre uma variavel. Esta função mostrará uma representação estruturada sobre uma ou mais expressões, incluindo o tipo e o valor. Arrays e objetos são explorados recursivamente com valores identados na estrutura mostrada.

Uma das outras vantagens em se utilizar essa função é que ela, como toda saída é normalmente enviada direto para o browser, as Funções de Controle de Output podem ser usadas para capturar o resultado e guardá-lo em uma string (por exemplo)....gostou né? Eu tmb!! Veja só as possibilidades, por exemplo...


$a = array (1, 2, array ("a", "b", "c"));
var_dump ($a);
?>

Esse exemplo vai imprimir o seguinte:
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "c"
}
}


Moral da história...se vc esta passando um parâmetro de objeto o var_dump imprimirá todos os seus atributos; se for um array de várias dimensões, imprimirá todas elas, com seus respectivos conteúdos e tipos de dados.

Fica ai mais um truque pra galera do debug.
Quem quiser conhecer mais sobre essa função é só acessar http://php.net/manual/en/function.var-dump.php

Newsletter - Desperta Brasilia

Estou trabalhando na customização de uma Newsletter automática  utilizada pelo WordPress. Na verdade um plugin do WordPress que permite enviar manual ou automaticamente mesangens de newsletter pra todos os usuários cadastrados no site sempre que uma nova postagem é feita no site. Funciona assim: O administrador cadastra um Post de noticia ou artigo no site e dependendo da configuração feita na newsletter, ela se encarrega de enviar pra todos os cadastrados um email com parte da publicação e um link pro post publicado.

O sistema funciona muito bem independente do numero de usuarios cadastrados. A unica restrição que eu vejo é o servidor de hospedagem do site. Alguns servidores limitam o envio de emails em massa por site. Fora isso, o sistema funciona perfeitamente.

Mas como nem tudo são flores, o visual da newsletter enviada aos usuarios, deixa muito a desejar. Daí a necessidade de uma customização tanto no visual quanto em alguns trechos do script.

Abaixo estão alguns skins que criei pra poder utilizar na news.







Como dica de som eu indico Krystal Meyers. Escrevi  algo sobre ela e suas músicas em:
http://despertabrasilia.com.br/2010/04/21/conheca-krystal-meyers/

sexta-feira, abril 9

Imagem da Semana

quinta-feira, abril 8

Uso de parênteses afeta consulta SQL?

Outro dia desses fui questionado sobre a utilização dos parenteses em uma consulta SQL. Pq usar? E o pq não deixar de usar? Estava pesquisando algo sobre esse assunto quando esbarrei num link do Mysql.com http://dev.mysql.com/doc/refman/4.1/pt/where-optimizations.html onde é dito que em consultas MySql é possível otimizar a select fazendo uso dos parênteses.

A princípio parece a maior besteira do universo, mas pensando bem esta idéia tem toda razão. Pois quando se utiliza o parênteses em demasia o interpretador de consultas sql do banco de dados, pode "se perder" ou demorar mais para analisar a precedência das condições. Considerando que o processamento do WHERE é feito da esquerda para a direita, porém se você colocar parênteses em alguma das expressões, a ordem da execução pode ser alterada. Se você colocar um monte de parênteses sem necessidade, com certeza irá gerar um trabalho extra para o Query Optimizer, gerando talvez, uma queda de performance.

A pergunta que não quer calar é: Isso se aplica também ao Sql Server? Se a resposta for sim, e em consultas pré-compiladas (tal como as Stored Procedures) existe impacto na performance com o uso excessivo de parênteses? Devo confessar que ainda não cheguei a uma conclusão, mas pensando bem o parênteses em si (o símbolo), obviamente não afeta a performance. Mas sim, a disposição das expressões dentro da cláusula WHERE, e talvez possa afetar de alguma forma. Acho que ninguém pensa nisso na hora de criar um procedure Smile.

register_globals em tempo de execução??? NUNCA mais!!!!

Programador PHP que nunca ouviu falr na tão famosa diretiva register_globals que atire a primeira pedra. Não é de hj q essa bendita é condenada ou vista com maus olhos pela comunidade desenvolvedora...diga-se d passagem os mais experientes.

Como sempre há os pros e os contras, as falhas de segurança quando se utiliza tal diretiva é mto mais facil d ocorrer. Quer um exemplo prático? Todas as variáveis contidas em $_GET, $_POST, $_COOKIE e $_SERVER são automaticamente convertidas em variáveis do PHP se a diretiva esta em ON.

Outro exemplo interessante...suponhamos o link http://www.seusite.com.br/arquivo.php?var=conteudo, se e somente se seu servidor estiver configurado para register_globals = On, no script arquivo.php, haverá uma variável chamada $var, que terá o valor 'conteudo'. Uauuuuu... acreditem mas um atacante ou ate mesmo uma usuario mais antenado pode infiltrar códigos maliciosos em variáveis que nunca deveriam vir das fontes carregadas pelo register_globals.

Por isso o alerta, evite utilizar alguma aplicação q precise de register_globals= On. Em si a diretiva register_globals não é perigosa e não traz nenhum risco à segurança da sua aplicação, o que pode te prejudicar é utiliza-la em ON...ou seja....com ela ligada. No artigo "How to Install PHP on Windows (Fast PHP Tutorial Part 2)" o autor mostra como ligar a diretiva no php.ini. Nenhum segredo nisso, porém esse procedimento deve ser evitado!!

E há quem diga que na versão 6 do PHP essa configuração não irá mais existir....SHOW D BOLA......Ou seja....se vc utiliza essa função....acho bom começar a pensar em outra alternativa.

Vc caro colega...assim como eu....sabemos q algumas diretivas do PHP podem ser definidas/alteradas no php.ini em tempo de execução (leia mais sobre ini_set())...isso mesmo...ao se executar a aplicação. Mas essa afirmação não é válida para a register_globals. Sendo assim...podemos alterar essa diretiva,....acessando o php.ini ou criando/editando um arquivo .htaccess e mandando ele pro server de hospedagem (eu recomendo).

Ahhhaaa....mas nem tdo é tão bom e perfeito...em alguns servidores vc nunca poderá ter acesso as configurações do php...E pensando nisso há uma forma simples de garantir q suas variaves passadas por $_GET, $_POST, $_COOKIE e $_SERVER nunca sejam utilizadas ou transformadas em variaveis PHP

Sim, eu sei q a solução parece mto simples....mas é mto eficiente...acredite em mim....(eu mesmo já precisei utilizar isso)

No início da sua aplicação adicione as seguintes linhas:

foreach
($_GET as $var => $valor)
unset($$var);

foreach
($_POST as $var=> $valor)
unset($$var);

foreach
($_COOKIE as $var => $valor)
unset($$var);

foreach
($_SERVER as $var => $valor)
unset($$var);

Legalz...cara....mas o q afinal d contas essas linhas querem dizer???? Mto simples ....Dessa forma antes de iniciar sua aplicação vc esta limpando as variaveis q são carregadas automaticamente. O detalhe é....vc NÃO poderá utilizar nada...nadinha do register_globals...e de quebra garante q sua aplicação seja compativel com novas versoes....

Vale lembrar q essa é mais uma d minhas tecnicas orientadas a leite (cheias de gato heheeh)...mas é 100% garantido....e pode evitar dores d cabeça.


Dica de som: Pra quem ainda não ouviu, vale mto a pena curtir o novo album do TobyMac - Tonight...sem sombra d duvidas, um dos melhores!!!