[ Tutorial ] Zend Framework Parte 01

Instalação, configuração, criação de projeto

Sumário

Neste tutorial, você vai aprender como baixar e instalar o Zend Framework, assim como ativar o mod_rewrite do Apache e criar um Virtual Host. Vai modificar o arquivo .htaccess para alterar o comportamento do Zend Framework.
Você também vai aprender a criar um projeto utilizando o ZF Tool.
Leia mais

Operadores DIV e MOD em PHP

Estes dias estava lendo um livro de algoritmos e tinha alguns algoritmos utilizando DIV e MOD.

A idéia seria pegar as partes de uma data no formato AAAAMMDD e colocar no formato DDMMAAAA.

Claro, eu como programador PHP já fui logo pensando em strpos(), mas ai o livro mostrava uma abordagem matemática interessante e global para outras linguagem.

 lang="sql

data <- 20110829

ano <- data DIV 10000 // retorna 2011

dia <- data MOD 100  // retorna 29

A lógica é a seguinte:

Pegar a data e dividir por 10000 retorna o ano.

Como é uma divisão exata, o total zeros do divisor é o total de números que vão ser removido e o quociente é o ano que desejamos.

 lang="sql

2011|0829  // estes 4 dígitos finais serão removidos

   1|0000

Pegar a data e fazer uma operação com Módulo 100 retona o dia.

O total de zeros passados no módulo é o total de digitos finais do número que vão ser retornados:

 lang="sql

201108|29 // estes 2 digitos finais serão retornados

     1|00

Tá e como fica o Mês?

Bem, o mês… eh… ahum, sim o mês! Claro o mês! 😀

O Mês está no meio, estão seguindo a lógica da pra criar algo:

 lang="sql

data <- 20110829

ano <- data DIV 10000 // retorna 2011



auxiliarMes <- data DIV 100 // retorna 201108

mes <- auxiliarMes MOD 100 // retorna 08



dia <- data MOD 100  // retorna 29

Vou deixar você entender sozinho o que aconteceu ali em cima.

O PHP no seu núcleo não tem um operador para DIV somente para MOD, que é o % (porcento).

Ai para inventar moda, e com um jeitinho brasileiro criei estas duas funções:



/**

 * Retorna o módulo de uma divisão

 */

function MOD( $number, $base ) {

	return $number % $base;

}

/**

 * Retorna o resto de uma divisão

 */

function DIV( $number, $base ) {

	return floor( $number / $base );

}

Na função DIV eu utilizei a função nativa do PHP floor() que arredonda para baixo, pois dividindo o número 20110829 por 10000 resultaria no quociente 2011.0829.

Ai, no caso de datas fica assim:



$data = 20110829;

$dia = MOD( $data, 100 );

$auxiliarMes = DIV( $data, 100 );

$mes = MOD( $auxiliarMes, 100 );

$ano = DIV( $data, 10000 );



echo sprintf("%02s%02s%04s",$dia,$mes,$ano);

Utilizei a função de formatação sprintf(), pois caso o dia ou o mês precise do zero na frente, pelo fato de ser uma divisão não retornaria o zero na frente.

Bom, é isto, espero que tenha ajudado os malucos!

Pegar Constantes Definidas no PHP Pelo Usuário

Ao desenvolver uma aplicação precisei fazer uns testes de verificação onde era necessário saber quais constantes eu já havia definido.

Na documentação do PHP existe uma função bem interessante que retorna todas as Constantes declaradas: get_defined_constants.

Entretanto, como a cada nova versão que surge, novos recursos são adicionados, e no meu caso, não prestei atenção na implementação do parametro “categorize” na função get_defined_constants a partir do PHP 5.00, de fato, bem pouco usei esta função, mas quando usei a primeira vez foi com PHP 4.x.x.

Desta forma, agora é possivel pedir ao PHP que mostre as constantes categorizadas por tipo ( mhash, calendar, date, ftp, etc e tal ) e o melhor de tudo, colocaram a categoria “user“.

Vamos fazer alguns teste:

1) Somente get_defined_constants():



print '<pre>';

print_r( get_defined_constants() );

print '</pre>';

Note que o resultado foi uma constante debaixo da outra.

2) Agora get_defined_constants(true):



print '<pre>';

print_r( get_defined_constants(true) );

print '</pre>';

A coisa começou a melhorar! Temos agora um índice para categorizar.

Se você rolar a página de resultados para baixo até o final, vai encontrar o índice “user“.

Desta forma, para pegar somente as constantes definidas por nós, usuários, basta colocar o resultado de get_defined_constants dentro de uma variavel e chamar a impressão direto a partir do índice “user”.

3) Agora pegando somente as definidas pelo usuário:



print '<pre>';

$constantes = get_defined_constants(true);

print_r( $constantes['user'] );

print '</pre>';

Pronto! O milagre aconteceu e achei as constantes definidas por mim mesmo!

URL's Amigáveis com PHP e Apache – Um padrão de projeto de software

Certo dia um amigo que conheci através deste blog, Scott, me questionou sobre o método que eu utilizo para gerar os URL amigáveis.

Por este motivo me dispus a postar aqui de forma mais simplificada como obter o resultado desejado para se obter URL’s amigáveis.

Leia mais

[ Dica PHP ] Imagens aleatórias em PHP

Já pensou em exibir imagens aleatórias em um site no carregar da página?

Existem várias formas de se fazer isto, mas a uma bem simples é criar um array com os nomes da imagem e sortear quem vai aparecer.

Vamos lá.



<?php

/**

 * Script para listar uma imagem aleatóriamente

 */

/**

 * Indexa a lista de imagens

 * a ser sorteada aleatoriamente

 * @var $imagem array

 */

$imagem = array(

    'nome-01.jpg',

    'nome-02.jpg',

    'nome-03.jpg',

    'nome-04.jpg',

    'nome-05.jpg'

);





/**

 * count() conta a quantidade de chaves no array

 * @var $totalImagens int

 */

$totalImagens = count( $imagem );





/**

 * mt_rand() sorteia um numero

 * entre 1 e o total de imagens no array

 * @var $numeroRandomico int

 */

$numeroRandomico = mt_rand( 1, $totalImagens );





/**

 * Exibição Teste

 */

printf(

    '<img src="%s" />',

    $imagem[ ( $numeroRandomico - 1 ) );





/**

 * Fim do script

 */

O que posso definir no ini_set() do php?

Bom, estes dias eu pensei numa aplicação mais robusta que precisasse de alterações em muitas configurações do php, no entanto, tive que considerar o fato de muitos desenvolvedores não terem acesso ao arquivo php.ini, e me lembrei de uma situação que vivi alguns meses atrás: “O que posso definir no ini_set()“.

Para mais informações sobre ini_set, acesse a documentação da mesma em http://www.php.net/manual/pt_BR/function.ini-set.php.

Então, vamos explicar algumas coisas.

Diretivas do PHP

Diretivas são informações, tipo constantes, que o compilador usa para saber o que deve fazer com o código em questão na hora de realizar algum processamento. Geralmente, estas diretivas ficam em um arquivo de configuração (“.ini”), e que o administrador do sistema pode modificar para se adaptar às suas necessidades de processamento.

No php.ini o administrador pode modificar muita coisa da linguagem, e o desenvolvedor, pode usar da função ini_set() para alterar algumas configurações básicas dentro de um arquivo bootstrap ( bootstrap é um arquivo com algumas configurações da aplicação que pertencem propriamente ao PHP ou à aplicação em si ).

A chamada é simples:



init_set('diretiva', 'valor');

O uso mais comum é de display_errors.

Entrentanto, se quiséssemos modicar outras diretivas, quais poderíamos? Bom, ai está a questão, e precisamos entender como o PHP define as prioridades delas.

Existem basicamente 4 tipos de diretivas no PHP, são elas, que a referência define como “modos”:

PHP_INI_USER – A entrada pode ser definida nos scripts do usuário (como com ini_set()) ou no registro do Windows

PHP_INI_PERDIR – A entrada pode ser definida no php.ini, .htaccess ou httpd.conf

PHP_INI_SYSTEM – A entrada pode ser definida no php.ini ou httpd.conf

PHP_INI_ALL – Entrada pode ser definida em qualquer lugar

Então já temos uma luz ai. PHP_INI_USER e PHP_INI_ALL possuem permissão para serem definidas num arquivo bootstrap ou em qualquer arquivo php.

Onde achar estas diretivas?

O PHP possui um lista de diretivas, bem generosa, que pode ser acessada neste link do manual:

http://www.php.net/manual/pt_BR/ini.list.php

Olhar para esta lista não vai ajudar em nada, se não entender para o que serve, e onde aplicá-las, mas quanso se sabe o que quer, faz sentido!

[ Dica PHP ] Como encontrar strings dentro de string ou arquivo

Eh, coisa besta!

Estes dias precisei disto, e embora, simples, tem quem não saiba por não dominar expressões regulares.





<?php



/*

 Procura todas as ocorrências

 dentro do string passado

 no segundo parametro

*/



$string = "inicio Esta é uma string a ser inspecionada fim"; // poderia ser um arquivo file_get_contents('nome-arquivo.extensao')



preg_match_all("/inicio(.*)fim/", $string, $resultados );



foreach ( $resultados[1] as $resultado ) {

print $resultado . '<br />';

}



// fim



Class DirectoryHandler auxílio para a função rename do PHP no Windows

Solução para resolver o problema com rename no windows

Estes dias me deparei com um problema chato pra dedéu enquando desenvolvia uma nova aplicação para a empresa que trabalho!

O PHP no meu apache rodando em Windows não executava a função rename().

Então resolvi o problema criando uma classe utilizando alguns recursos nativos da SPL do PHP 5 e misturando um pouco com recursos que já são até barbudos do PHP e que se não cuidar enrosca no servidor quando estiver rodando (riso, tudo bem não teve graça ).

Leia mais