Outro recurso bacana do CSS 3 é a transparência. Ela pode ser feita de duas maneiras:
- Através da propriedade opacity;
- Através da especificação de valores de cores com a "função" rgba.
Outro recurso bacana do CSS 3 é a transparência. Ela pode ser feita de duas maneiras:
O ambiente Web é caracterizado pelo modelo requisição/resposta através do protocolo HTTP. Sabendo que alguns conteúdos enviados do servidor para o cliente (navegador) são estáticos, ou mudam com pouca frequência, é possível utilizar um mecanismo de cache para evitar requisições repetidas ao mesmo arquivo. Isso é muito útil, por exemplo, para ser aplicado em imagens e folhas de estilos.
Quando trabalhamos com sistemas de informação, existem momentos em que precisamos executar scripts que demoram muito tempo. Seja para corrigir algum erro do sistema, seja para realizar um processamento demorado em função do volume de dados. Nestes casos, não é recomendado deixar estas operações acessíveis via Web, já que o usuário final normalmente não está interessado em esperar mais que um minuto para obter o resultado de um processamento.
Podemos fazer um script para ser executado na linha de comando (shell) usando php-cli, mas executá-lo diretamente também recai sobre o mesmo problema: quem quer ficar esperando o script terminar?
Em PHP, existem alguns recursos úteis para se tentar obter o IP do cliente. O processo é feito basicamente observando algumas variáveis guardadas no array superglobal $_SERVER. O maior problema é que o cliente pode estar por trás de um ou mais proxy. A função abaixo tenta obter o IP por diferentes vias:
A linguagem CSS 3 ainda não está 100% pronta. Porém, ela é modular, e alguns módulos já possuem algumas especificações interessantes e já suportadas por alguns navegadores.
Algumas das especificações mais atraentes são as sombras em elementos e as sombras em textos. Estes efeitos são feitos pelas propriedades box-shadow e text-shadow respectivamente.
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.
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.
É 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:
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.
Classe para obter as palavras usadas para buscar um site. Basta usar o método getWords.
"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.
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:
&
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 projetada 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 muito mais lentas.
A classe PDO permite que seja modificada a estratégia para controle de erros ocorridos. As possibilidade são:
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.
Este artigo mostra como obter os e-mails recebidos por uma conta do GMail a partir de código 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:
PHP oferece um recurso bastante curioso, que não sei se é parte do Paradigma Orientado a Objetos, mas que tem lá suas utilidades. Chamei de "Método Compartilhado" por não saber se esta característica tem nome.
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.
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.
Muitas vezes é necessário realizar comparações rápidas, onde se espera obter um valor ou outro de acordo com uma condição. Para isso, existe o operador ternário e o operador "?:".
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.
Segue uma dica de como indentar um código HTML ou XML usando o módulo DOM do PHP:
Script para criar cantos arredondados em imagens.
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.
Percorrer diretórios e arquivos em PHP é muito simples. Vamos ver 5 formas para se fazer isso, cada uma com suas características e limitações:
Aritmética de datas é o processo de realizar contas utilizando datas e intervalos de tempo.
O fator mais complicante nestes tipos de operações é que data não é algo tão exato quanto se imagina. Tudo por conta que a Terra leva 365,2422 dias para completar uma volta inteira no Sol. Para entender com detalhes, leia esta explicação.
Heredoc e Nowdoc (também chamados de "here document" e "now document") são duas formas de se representar strings em PHP (assim como existe a representação usando delimitadores com aspas simples e com aspas duplas).
Recentemente a Zend anunciou o lançamento do novo exame de certificação em PHP, a "Zend PHP 5.3 Certification". Ela substitui a antiga "Zend PHP 5 Certification".
A linguagem PHP, assim como qualquer linguagem de programação, é formada por construções da linguagem. Além das estruturas básicas de programação (estruturas condicionais, estruturas de repetição, sintaxe para criação de classes, sintaxe para criação de funções, etc.), a linguagem possui algumas funções "built-in", ou seja, funções embutidas no núcleo da linguagem.
Modelo Entidade-Relacionamento é a conhecida modelagem da base de dados com suas entidades, atributos e relacionamentos.
A princípio, parece um modelo bastante simples de se fazer quando nos concentramos na realidade. Ou seja, se os atributos de cada entidade e os relacionamentos das entidades são realmente condizentes com a realidade em qualquer circunstância. É importante se preocupar com os nomes dados às entidades e os pontos onde elas podem ser quebradas para evitar a duplicação de dados.
Existe, porém, um detalhe que observei recentemente: parece existir uma tendência natural do modelador ligar algumas entidades às entidades que representam pessoas ao invés de ligá-las onde realmente preservaria a integridade referencial.
Hoje, em uma discussão em uma lista de PHP, fui surpreendido com a informação de que a estrutura "for" era mais rápida que a estrutura "foreach". Depois me deram a fonte da informação: The PHP Benchmark. Na fonte, diz que o "for" é mais rápido para escrita, mas é mais lento para leitura dos elementos percorridos. Observando o código do site, cheguei a conclusão de que ele estava meio furado.
Tratamento de erros é a estratégia usada para capturar a ocorrência de uma situação que impede o sucesso de uma operação do sistema. Isso pode se dar em diferentes níveis. Em baixo nível: uma função pode receber um parâmetro inesperado. Em alto nível, uma ferramenta pode não aceitar determinada sequência de ações do usuário.
Se você trabalha com programação Web, provavelmente já utilizou a codificação de caracteres Latinos (ISO-8859-1) e conhece ou já deve ter ouvido falar de Unicode. Este artigo mostra o que é Unicode, quais os benefícios e como trabalhar com ela.
Em sistemas de informação, é comum existirem atividades que precisam ser realizadas sob agendamento. Normalmente esta característica é necessária por um dos motivos:
PDO (PHP Data Objects) é um módulo de PHP montado sob o paradigma Orientado a Objetos e cujo objetivo é prover uma padronização da forma com que PHP se comunica com um banco de dados relacional. Este módulo surgiu a partir da versão 5 de PHP. PDO, portanto, é uma interface que define um conjunto de classes e a assinatura dos métodos de comunicação com uma base de dados.
Cada sistema gerenciador de bancos de dados (SGBD) pode prover um driver para PDO. Apesar de PDO definir a assinatura dos métodos que cada driver deve implementar, alguns recursos podem não ser suportados. Logo, a chamada a um método pode ser "inútil" dependendo do driver utilizado ou da versão/modelo do servidor de Banco de Dados. Por exemplo, algumas engines do SGBD MySQL não dão suporte a transações, logo, o método "beginTransaction" (responsável por iniciar uma transação) simplesmente não terá efeito sob tais condições.
Existe um mecanismo do PHP que permite embutir trechos de dados (inclusive dados binários) que não serão sequer interpretados pelo interpretador de PHP. Diferente do comando "exit", que interrompe a execução do script, mas não interrompe o parser do PHP, existe o comando "__halt_compiler", que ignora absolutamente tudo que esteja abaixo do ponto em que foi chamado.
Muitos programadores usam os delimitadores de código PHP sem saber todos os seus detalhes. Vamos a eles então.
Desde que me deparei com o tema Acessibilidade (aproximadamente em 2005, quando participei do XXV Congresso da Sociedade Brasileira de Computação - CSBC), procurei dar o devido cuidado para o desenvolvimento Web.
Apesar de gostar e apoiar o PHP, não gosto de uma de suas características mais marcantes: o fato de ser uma linguagem "embutida" no HTML. Ou seja, a linguagem possui delimitadores de código e tudo que fica fora dos delimitadores são considerados blocos de texto que devem ser enviados diretamente para saída padrão (normalmente um código HTML).
Data Warehouse é um sistema de computação que guarda dados de uma organização. Os dados vão desde nomes de departamentos/setores, até os dados referentes às atividades da organização, ou seja, dados referentes ao nível operacional. Por exemplo, em um sistema para uma universidade, o sistema data warehouse provê, dentre outras coisas, informações sobre as aulas (notas, rendimento dos alunos, participação dos docentes, etc.), ou seja, o nível mais operacional da universidade.
Com PHP, você consegue criar um código que gera outro código, afinal, um script PHP é um arquivo texto.
Mas a linguagem também permite que um script consiga alterar seu próprio comportamento em tempo de execução. Isso pode ser útil para otimizar trechos de código. Este recurso é possível com o comando "eval".
Zend Certified Engineer (ZCE) é o título dado às pessoas que foram aprovadas no exame de certificação oferecido pela empresa Zend, que mantem a linguagem PHP. Existe a certificação de PHP 5 e do Zend Framework.
Ainda existem menos de 100 pessoas certificadas em PHP 5 no Brasil. Porém, o título é uma forma de comprovar um certo domínio do profissional sobre a linguagem. Isso ajuda empresas a selecionar candidatos.
Callback é um mecanismo utilizado por uma linguagem para que uma função seja transmitida na forma de parâmetro para outra função. Uma função com comportamento genérico recebe um callback por parâmetro e usa a função callback para realizar as operações específicas. Desta forma, é possível utilizar a função de diferentes formas.