Você está na página 1de 12

Dicas de PHP

#6 DICAS
AVANADAS DE PHP
Introduo
Simples, porm eficiente!

Essa a ideia que tento trazer para a construo do ebook. Apresento aqui 6 dicas
avanadas de PHP.

Se caso voc j conhea e implemente essas dicas em dia-a-dia, parabns! Podemos


seguir em frente e trocar ideia de como criar novos contedos para o crescimento de toda
comunidade de desenvolvedores.

Espero que esse documento possa agregar novas ideias na sua vida de desenvolvedor.

www.dicasdephp.com.br
1
#1 Segurana: Proteja a sua aplicao

Proteger-se de um SQL Injection parece no ser um dica avanada e sim, bsica!


Realmente, deve ser uma das primeiras preocupaes na construo de um sistema WEB.

Antes de mais nada, o desenvolvedor deve preocupar-se em dar um passo atrs e olhar
toda aplicao. Poderamos ter uma explicao mais longa de como todo o funcionamento
do SQL Injection, mas o que o desenvolvedor deve saber: N
unca confie em dados que
voc recebe de outro lugar.

muito importante, sempre, escapar as informaes que voc recebe dentro da aplicao.
A principal causa de SQL Injection o descuido na hora de exibir as informaes para os
usurios.

Vejamos o exemplo abaixo:

<?php

$query = "SELECT *

FROM usuarios

WHERE nome = '".$_POST['nome']."'";

?>

Sem validar o que est sendo enviado pelo usurio atravs do $_POST, poderemos expor
todo o banco de dados da nossa aplicao. Ainda normal, ao prestamos consultoria em
sistemas existentes, encontrar esse tipo de falha de segurana.

Enviar um valor diretamente para o banco de dados, sem antes realizar uma validao tipo
de contedo e escapar os caracteres um dos erros primrios da programao.

www.dicasdephp.com.br
2
Um exemplo de cdigo com mais segurana teremos abaixo:

<?php

// Iniciamos um array para filtrar as informaes;

$clean = array();

$sql = array();

// Atravs da funo ctype_alpha vamos verificar se a varivel $_GET um nome alfabtico;

if (ctype_alpha($_POST['nome'])) {

$clean['nome'] = $_POST['nome'];

} else {

// No vlido, fao algum retorno aqui.

// Adicione \ para evitar caracteres perigosos;

$sql['nome'] = mysql_real_escape_string($clean['nome']);

// Construct the query.

$query = "SELECT *

FROM usuarios

WHERE nome = '".$sql['name']."'";

?>

www.dicasdephp.com.br
3
#2 Aprenda sobre DRY
OK, essa no apenas uma dica sobre PHP, mas sobre desenvolvimento de aplicaces no
geral. Aprenda a utilizar DRY na sua vida de d
eveloper.

Que raios DRY?

DRY um acrnimo para "Don't repeat yourself". O conceito de DRY prope, tentando
simplific-lo, que cada poro de conhecimento em um sistema deve possuir uma
representao nica, de autoridade e livre de ambiguidades em todo o sistema.

Se voc vai conectar no banco de dados, salve os dados de conexo em um arquivo


e no em vrias partes da aplicao.
Se voc vai criar uma mscara para CPF, crie uma funo e use a mesma para
todas as partes do cdigo.

Com o DRY em prtica, voc ir aumentar a produtividade em 10x, 20x, 30x Seja esperto
e no repita o cdigo milhares de vezes!

www.dicasdephp.com.br
4
#3 Memcached
Sabe lidar com cache? No? Ento est na hora de aprender como usar.

Um dos mais usados com PHP o Memcached. Sua principal funo evitar a sobrecarga
e repetio de consultas no banco de dados.

Para cada vez que uma pgina com PHP e banco de dados requisitada, necessrio ir
at o banco de dados para retornar o contedo o browser. Agora imagina, se no h
alterao de contedo, a consulta at o banco de dados DESNECESSRIA.

Vamos trabalhar com o cache para consultas no banco de dados, com isso a requisio
ser salva e usada antes de ir at o banco de dados.

Um workflow que demonstra como funciona o cache.

www.dicasdephp.com.br
5
APC
Outro cache muito utilizado com PHP o APC. Com APC, possvel realizar cache de
consultas no banco de dados, compilar scripts PHP (com isso, no necessrio interpretar
o script a cada requisio) ou salvar informaes por tempo determinado. Considere o
exemplo abaixo:

<?php

$feed = apc_fetch('clima');

if ($feed === FALSE) {

$feed = file_get_contents('http://climatempo.com.br/sao-paulo.xml');

// Salve o XML por 5 minutos (300 segundos)

apc_store('clima', $feed, 300);

// Use aqui o $feed como preferir;

?>

Imagine que, conforme o exemplo acima, no ser necessrio fazer uma consulta remota a
cada requisio, tornando a execuo muito mais rpida!

bvio que voc deve alterar o TTL (time to live) do cache, conforme a necessidade da sua
aplicao.

www.dicasdephp.com.br
6
#4 Use Framework
Sabe qual o motivo de usar um framework? Bem, economize no tempo e tenha suporte do
mundo todo!

bvio que gostaramos de desenvolver um f ramework do zero. Mas isso daria um trabalho
imenso, e talvez o resultado no seria o mesmo que encontramos a poucos clicks, pois
requerem muito recurso para tornar-se uma ferramenta completa.

Hoje, se voc utiliza alguma das ferramentas abaixo, ir encontrar a soluo para qualquer
problema no Stack Overflow, sem gastar muito tempo.

CodeIgniter;
Lavarel;
Zend;
Magento;
Wordpress;
Slim;
CakePHP;
Symfony;
e lista imensa...

Antes de usar as ferramentas, procure estudar como ela funciona e no aplicando em


qualquer projeto sem estudar a documentao!

www.dicasdephp.com.br
7
#5 No use funes em loops
Voc no deve usar funes nas chamadas de loops. Sabe porqu? simples, a cada item
do loop, sua funo ser chamada novamente!

Veja nos exemplos abaixo, a diferena no tempo de requisio para cada uma delas. Alm
da quantidade maior de requisio, existe a diferena de processamento do servidor,
evitando uma sobrecarga em caso de muitos acessos sobre o script.

Metdo #1 (ruim)
<?php

// imagina esse array com mais de 100 nomes;

$nomes = array(

"Clementine Douglas",

"Ivana Norris",

"Brianna Reeves",

...

"Bertha Butler",

"Nora Hatfield",

"Serena Gates",

);

// a cada vez que o loop for exec, o count() ser executado de novo;

for($i = 0; $i <= count($nomes); $i++)

echo 'Name: '.$nomes[$i].'<br>';

?>

Nesse mtodo, tivemos o retorno abaixo no teste ab:

124 ms no tempo de execuo mais longo;


655.45 requisies/segundo

www.dicasdephp.com.br
8
Mtodo #2 (timo)
<?php

// imagina array com mais de 100 nomes;

$nomes = array(

"Clementine Douglas",

"Ivana Norris",

"Brianna Reeves",

...

"Bertha Butler",

"Nora Hatfield",

"Serena Gates",

);

$total = count($nomes); // faa a contagem uma vez, pois ela no vai ser atualizada a cada
iterao do looping.

for($i = 0; $i <= $total; $i++)

echo 'Nome: '.$nomes[$i].'<br>';

?>

Nesse mtodo, tivemos um retorno muito melhor:

52 ms no tempo de execuo mais longo;


1114.22 requisies/segundo

www.dicasdephp.com.br
9
#6 Usando pacotes no PHP
O uso de uma ferramenta para gerenciar as dependncias para o PHP vem ganhando muito
espao entre desenvolvedores e tornando indispensvel.

Com poucos comandos possvel definir todos as bibliotecas necessrias para o seu
projeto. Ele ficar responsvel por baixar e gerenciar todos os pacotes e configurar seu
arquivo de autoloader.

O conceito

O conceito que ele permite que voc declare as bibliotecas de seu projeto, e que assim
ele ir assumir o gerenciamento (instalao/atualizao)-los para voc.

Com isso, a instalao e atualizao de novas bibliotecas ficar muitoooo mais fcil. Com
alguns comandos no terminal, no caso de Linux e OS x, voc manter o projeto atualizado
com as dependncias.

Para quem j tem experincia com Linux, ir lembrar muito os comandos de apt-get dos
sistemas Debian/Ubuntu.

Como Funciona

Se ficou com curiosidade de como isso funciona, acesse o blog e veja um tutorial de como
instalar e utilizar Composer.

www.dicasdephp.com.br
10
Feedback
Obrigado por baixar e ler o ebook. Quero saber o que voc achou sobre o contedo. Para
isso, envie um e-mail para fausto@dicasdephp.com.br e vamos conversar!

Quanto mais crticas receber, melhor ser o trabalho na construo de novos ebooks.

www.dicasdephp.com.br
11