Máscaras Binárias no PHP

Resumo:
Introdução

Máscara binária (máscara de bits ou "bit mask") é um mecanismo usado para armazenar vários valores booleanos em um único campo inteiro e recuperá-los individualmente ou em grupo.

Normalmente, as linguagens de programação que possuem o tipo booleano (bool ou boolean) utilizam um byte (oito bits) para armazená-lo. Apesar de um booleano só precisar de um bit, o byte é usado porque ele é a unidade base das arquiteturas de computadores. Normalmente utiliza-se o valor 00000000 para representar "falso" e o 00000001 para representar "verdadeiro", ou seja, apenas o último bit tem significância.

Logo, para armazenar (por exemplo) 14 valores booleanos, seriam necessários no mínimo 14 bytes. Se estes 14 booleanos fossem armazenados em um inteiro (que normalmente possui 32 bits, que são 4 bytes), usaria apenas 4 bytes.

Gerar Sequências Randômicas no PHP

Resumo:

Eventualmente, é preciso gerar sequências randômicas em sistemas de informação. Alguns exemplos comuns são: geração de arquivo ou diretório com nome único; geração de sal para senhas; geração de chaves de sessão; geração de textos para captcha; etc.

Para tanto, a forma mais comum de se gerar uma sequência randômica é utilizando a função rand ou a versão melhorada dela, chamada mt_rand. Ambas funcionam da mesma maneira. Particularmente, não sei por que criaram outra função para o mesmo propósito, em todo caso, melhor usar mt_rand.

Autenticação e Criptografia de Senhas com PHP

Resumo:
Introdução
cadeado

É comum que sistemas de informações utilizem um mecanismo de autenticação para acesso às ferramentas restritas através de um login e senha. Por questões de confidencialidade e segurança, é comum, também, que as senhas fiquem guardadas de forma criptografada no banco de dados. Os algoritmos de criptografia usados para estes casos são aqueles de via única (unidirecional), ou seja, que não permitem que um valor codificado seja descriptografado facilmente. O nome dado a um valor criptografado também é chamado de "hash".

PHP oferece diferentes alternativas para criptografar uma senha. Cada uma delas pode ter suas peculiaridades na hora de se montar o mecanismo de autenticação. Vejamos algumas das principais funções usadas para criptografia de senhas:

  • md5 - Gera uma sequência binária de 16 bytes (ou 32 símbolos hexadecimais)
  • sha1 - Gera uma sequência binária de 20 bytes (ou 40 símbolos hexadecimais)
  • crypt - Gera um hash de acordo com um algum algoritmo escolhido (poucas opções)
  • hash - Módulo que oferece diferentes algoritmos de criptografia (para saber os disponíveis, basta usar hash_algos)
  • mcrypt - Módulo que oferece diferentes algoritmos de codificação/decodificação (para saber os disponíveis, basta usar mcrypt_list_algorithms)
  • mhash - Módulo obsoleto por hash.

Manipulando ASCII-85 via PHP

Resumo:

ASCII 85 é uma forma de codificação de sequências binárias que utiliza 85 caracteres imprimíveis. O valor codificado fica aproximadamente 25% maior que o valor original. Por questões de comparação, o "base 64" deixa o valor codificado aproximadamente 33% maior que o valor original.

Interfaces em PHP

Resumo:

"Interface", no Paradigma Orientado a Objetos, representa uma estrutura que especifica um conjunto de métodos que uma família de classes terá. Nesta especificação são informados os nomes dos métodos, visibilidade e os respectivos parâmetros, mas nenhum deles são implementados na interface. Diz-se que uma classe "implementa" uma interface quando ela possui os métodos previstos na interface e declara, explicitamente, implementá-la.

Classe DateTime do PHP sensível à localidade

Resumo:

Um dos inconvenientes da classe DateTime é que ela consegue formatar datas apenas em inglês, diferente da função strftime, que tem seu comportamento afetado pela localidade definida na função setlocale.

Para resolver este problema, criei uma classe chamada MyDateTime, que estende a classe DateTime e oferece algumas funcionalidades adicionais como os métodos:

  • alternateFormat - Para formatar uma data com o formato aceito por strftime.
  • getWeekNames - Obtém os nomes dos dias da semana.
  • getShortWeekNames - Obtém os nomes dos dias da semana abreviados.
  • getMonthNames - Obtém os nomes dos meses do ano.
  • getShortMonthNames - Obtém os nomes dos meses do ano abreviados.

Instalação de Módulos Pear e Pecl

Resumo:
PECL & PEAR

Pear (PHP Extension and Application Repository) é um sistema de pacotes para PHP que oferece ferramentas de alto nível para instalação, remoção ou atualização de pacotes. Basicamente, Pear oferece bibliotecas de código PHP para solução de problemas específicos, como geração de PDF, geração de imagens, manipulação de ID3 de MP3, etc.

Além disso, Pear possui um repositório chamado Pecl (PHP Extension Community Library), que é voltado para a instalação de extensões compiladas do PHP. A versão 5 de PHP é escrita em linguagem C, e foi proje­tada para incorporar novos módulos escritos em C. Com isso, é possível escrever e/ou utilizar código de alta performance para ser utilizado por scripts em PHP. Nada impede um programador de criar suas ferramentas usando a própria linguagem PHP, porém, como PHP não oferece recursos como ponteiros de C, alguns tipos de operações podem se tornar mui­to mais lentas.

Aritmética de Horas em PHP

Resumo:
Alterando as Horas

Outro dia falamos de aritmética de datas. Porém, aritmética de horas pode ser um pouco diferente. O motivo é que as vezes queremos obter um acumulado de horas, que ultrapassa 24 horas, mas que queremos o valor absoluto de horas.

Consultar Classes, Interfaces, Funções, Variáveis e Constantes do PHP

Em PHP existem 5 funções que conseguem obter a lista de classes, interfaces, funções, variáveis ou constantes declaradas até o momento. São elas:

  • get_declared_classes - Para obter as classes disponíveis;
  • get_declared_interfaces - Para obter as interfaces disponíveis;
  • get_defined_functions - Para obter as funções disponíveis;
  • get_defined_vars - Para obter as variáveis definidas;
  • get_defined_constants - Para obter as constantes definidas.

As interfaces Iterator, ArrayAccess e Countable do PHP

Resumo:

Interface é um recurso das linguagens de programação orientadas a objetos que propicia algumas vantagens ao polimorfismo. PHP oferece algumas interfaces que, caso sejam implementadas em uma classe, resultam em comportamentos especiais. Algumas destas interfaces são: Iterator, ArrayAccess e Countable.

Array com tamanho fixo no PHP (SplFixedArray)

Resumo:

PHP oferece nativamente o tipo array, que possui bastante flexibilidade. As principais características do array de PHP é que ele permite índices inteiros ou alfanuméricos, e é auto-redimensionável, ou seja, cresce ou diminui conforme elementos são adicionados ou removidos.

Quem já trabalhou com linguagens mais baixo nível, como C ou C++, deve saber que manter o controle sobre um array auto-redimensionável implica em perda de performance em função da realocação de memória. Para prover uma solução mais restrita e mais rápida para PHP, foi criada a classe SplFixedArray, disponível a partir da versão 5.3 de PHP. Ela só aceita inteiros como índices (de zero até o tamanho menos um) e tem tamanho fixo (definido na criação do objeto), embora possa ser redimensionado a qualquer momento. Quanto menos redimensionamento é feito, mais ela tende a ser mais rápida que um array convencional.

Alternativa para money_format do PHP

Resumo:

O script a seguir é destinado àqueles que utilizaram a função money_format no Linux e ficaram decepcionados ao notar que a função não estava disponível para Windows. Criei este script para tentar simular o comportamento da função original. Entretanto, nem todas as opções foram implementadas. Caso queira ajudar, fique a vontade, pois o código é livre e gratuito.

var_dump para classes e objetos do PHP

Resumo:

As funções var_dump, print_r e debug_zval_dump são úteis para destrinchar o conteúdo de uma variável em PHP, independente de seu tipo.

Porém, elas não mostram, por exemplo, os métodos de um objeto. Uma forma simples de se obter esta informação é utilizando o método export da classe Reflection.