Portabilidade de códigos em PHP

Resumo:
portabilidade
Introdução

PHP, no contexto da Web, é uma linguagem portável entre diferentes servidores HTTP, entre diferentes sistemas operacionais, e entre diferentes arquiteturas de hardware. No entanto, alguns recursos específicos nem sempre estão disponíveis de forma tão ampla e podem requerer um servidor HTTP, S.O. ou hardware específico. Neste artigo vamos ver por que isso ocorre e, quando possível, como solucionar ou evitar este problema.

Monitorando o LoadAvg e a Sobrecarga do Sistema com PHP

Resumo:
imagem cômica sobre sobrecarga

Uma características dos sistemas web de grande porte é o volume de usuários que trafegam por ele e realizam operações simultâneas. Nem sempre o servidor está preparado para suportar um volume de processamento tão alto, então, talvez seja útil implementar no seu sistema um mecanismo para medir o nível de processamento. No script abaixo, é mostrado um exemplo de como obter o Load AVG. A partir deste valor, podemos então emitir uma mensagem de alerta aos usuários, para prevenir que a situação se agrave ainda mais.

Lendo Arquivos CSV via SplFileObject do PHP

Resumo:

Navegando pelo manual do PHP, encontrei a classe SplFileObject, que permite a manipulação de arquivos através de uma proposta orientada a objetos. Ela extende a classe SplFileInfo, que serve para obter informações sobre o arquivo.

Além dos métodos básicos, que inclusive tem nomes semelhantes aos das funções de mesmo propósito (paradigma procedural), vi que ela oferece uma forma de leitura de arquivos CSV através de um iterador.

Utilizando Sessões em PHP de forma inteligente

Resumo:
macaco pensando
Introdução

Armazenamento de dados em sessão é um mecanismo oferecido pelo PHP que permite que a aplicação armazene/recupere dados específicos por usuário e compartilhados entre diferentes scripts. Este recurso é comumente utilizado para garantir a autenticação do usuário para que ele só precise informar a sua credencial uma única vez (log-in). Porém, este recurso também é importantíssimo para criar aplicações com nível de dinamicidade alto, e que requer o armazenamento constante de dados temporários, como uma cesta de compras, por exemplo. Neste artigo, veremos como utilizar a sessão de forma inteligente e otimizada, além de aprofundar em seu funcionamento.

Textos em colunas

Resumo:
Introdução

Continuando a sequência de artigos sobre CSS 3, veremos agora um recurso que permite a disposição de um texto em várias colunas, de forma semelhante à disposição de um jornal. Trata-se do módulo Multi-column Layout Module (Módulo para Leiaute de Múltiplas Colunas).

O principal benefício deste recurso é facilitar a leitura de um texto que está em um espaço relativamente largo da página (pode ser um "DIV", ou outro elemento qualquer). Atualmente, usuários da Web utilizam as mais variadas resoluções de tela (exemplos: 800x600, 1024x768, 1280x800, etc.) e, dependendo do estilo de layout do site, pode ocorrer de uma região ficar muito larga. De fato, um layout de largura fixa (ou seja, que não aumenta ou diminui a largura de acordo com a resolução ou tamanho da fonte) permite a elaboração de efeitos bastante atrativos visualmente, embora em muitos casos prejudique a acessibilidade. Por outro lado, um layout elástico (que expande ou reduz de acordo com a resolução da tela ou do tamanho da fonte) pode ser mais acessível, mas também pode propiciar o aparecimento de regiões muito largas com texto. Acompanhar a leitura de uma linha muito grande horizontalmente é um tanto quanto "desagradável" para alguns usuários, por isso separar estes textos em colunas com largura menor pode facilitar bastante a leitura.

Visualização dinâmica

Visualização dinâmica estilo Flipcard

O Blogger lançou outro recurso bacana de visualização dinâmica de feeds. Aparentemente é uma interface rica, que utiliza recursos do HTML 5 para apresentar as postagens do blog de forma diâmica, ou seja, sem precisar recarregar toda a página a cada clique. O resultado é bacana, dê uma olhada:

  • Flipcard - Figurinhas que podem ser organizadas por categoria, por data, ou por autor.
  • Mosaic - As postagens ficam espalhadas em retângulos com dimensões variadas.
  • Sidebar - Uma barra lateral mostra as postagens em ordem cronológica, indicando o número de comentários.
  • Snapshot - Mostra as postagens que tem imagens e as apresenta na forma de foto estilo polaroid.
  • Timeline - Mostra as postagens numa linha do tempo. Não entendi exatamente o critério para agrupar algumas postagens na esquerda (com fotos, título e texto), no centro (com títulos e textos) e na direita (com títulos apenas) (estilo eliminado)

E então, qual estilo você gostou mais? Eu achei interessante o Flipcard, que permite agrupar por diferentes critérios, e do Sidebar, por ser um estilo bem ágil e eficiênte.

Utilizando os botões voltar, avançar e atualizar com AJAX

Resumo:
Botões voltar, avançar e atualizar do navegador
Introdução

Fim da guerra entre AJAX e Botões do Navegador!

Um dos maiores inconvenientes dos sistemas que utilizavam AJAX é que era relativamente complexo utilizar este modelo e manter funcionando os botões voltar, avançar e atualizar do navegador. Porém, o novo Firefox 4 trouxe outro recurso previsto no HTML 5 que resolve este problema com bastante facilidade. Este artigo mostra como voltar o suporte a estes botões do navegador através do método history.pushState.

CSS Transitions

Resumo:
Introdução

CSS Transitions é um módulo da linguagem CSS 3 que permite especificar como serão as transições entre propriedades CSS quando ocorre algum evento. Por exemplo, no CSS 2.1, quando utilizamos a pseudo-classe ":hover" em um link e especificamos uma cor de fonte diferente, a transição da cor antiga para a nova é instantânea ao passar o mouse sobre o link. Com CSS Transitions, é possível especificar como se dará a transição de uma cor para a outra, ou seja, dentro de um tempo especificado, a cor do link irá variar várias vezes, percorrendo o degradê que varia entre a cor inicial e a cor final, causando um efeito [eu diria] mais "agradável" de se ver. E o melhor: é uma animação nativa do navegador, sem precisar de JavaScript ou Flash.

Uma das melhorias da nova engine do Firefox 4 (Gecko 2) é justamente o suporte (ainda incompleto) às transições CSS. Portanto, nada melhor que aprender um novo recurso e já curtir os efeitos onde eles são suportados.

Firefox 4 e Gecko 2

Resumo:
firefox logo
Introdução

Ontem foi lançado o Firefox 4. Você já viu? Para usuários finais deste navegador (que considero bastante satisfatório) a mudança na interface é facilmente perceptivel. Mas não é só isso que o novo Firefox tem a oferecer. Existem vários pontos fortes para programadores Web por debaixo de uma "roupinha" nova. Então vamos conhecer alguns deles.

Manipulando arquivos ZIP pelo PHP

Resumo:
zip
Introdução

Existem situações em sistemas de informação Web onde é necessário o envio de um arquivo muito grande ou então vários arquivos de uma vez para o cliente. Talvez uma imagem, talvez um pacote de relatórios, ou simplesmente conjuntos de arquivos. Este artigo mostra como utilizar a extensão Zip do PHP para criar um pacote ZIP (ou ler um pacote existente) e realizar operações sobre ele, tais como incluir arquivos/diretórios para serem compactados, extrair o conteúdo, enviar o pacote para o cliente, etc.

Gravando arquivos em BD usando PDO do PHP

Resumo:
escrevendo no HD
Introdução

Existem duas formas mais convencionais de se armazenar arquivos em sistemas de informação: gravando em um diretório reservado ou gravando no banco de dados. Gravando em um diretório, existem alguns riscos como o arquivo poder ser acessado por usuários do servidor, ou o arquivo ser acessado por qualquer pessoa da Web se ficar em um diretório visível na Web. Guardando o arquivo em BD, existe o inconveniente do BD poder ficar com um tamanho muito grande, embora ofereça uma segurança adicional. Neste artigo veremos como gravar e recuperar arquivos do BD usando PDO. Para mais detalhes sobre PDO, leia antes o artigo PDO.

var_dump para JavaScript

Resumo:

Acho que a função var_dump (ou similares, como print_r e debug_zval_dump) é uma das mais úteis para se depurar alguns problemas em PHP. Ela avalia uma ou mais variáveis ou valores, mostrando informações sobre elas (tipo, classe, etc). O var_dump, no entanto, não existe nativamente em JavaScript. Para prover esta solução em JavaScript, tentei implementar uma var_dump parecida com a de PHP. Como ela não consegue detectar recursividade infinita (quando um elemento aponta para algum que já foi mostrado), então criei o atributo "max_iteracoes", que pode ser configurado antes de se chamar a função. Com isso, a função previne loops infinitos.

Criando Gráficos com o Google Chart e PHP

Resumo:
Introdução

Atenção: o "Image Chart" mostrado neste artigo foi depreciado pelo Google em 2012. Um artigo mais recente sobre o assunto apresenta o novo recurso para Gerar Gráficos em PHP com o Google Charts.

Google Chart é um serviço do Google que provê a criação de gráficos dinamicamente. O funcionamento é simples: o programador faz uma requisição ao site do Google Chart com os parâmetros desejados (através da própria URL); e o Google devolve uma imagem com os dados plotados na forma de gráfico. Normalmente o programador cria uma tag <img> com o atributo src apontando para uma URL gerada dinamicamente e o resultado já é visto no HTML. Outra alternativa é o programador realizar a requisição, recuperar a imagem em formato binário, salvá-la em algum lugar, depois exibí-la quando quiser.

Profissões de TI

programador

TI é uma área bastante abrangente e está relacionada a diversas profissões. Nem todos conhecem bem todos os possíveis papeis nesta área, portanto indico um blog bastante interessante sobre o assunto: o blog Profissões em TI.

Dentre os principais artigos, está aquele que mostra uma vasta lista de profissões de TI com a respectiva estimativa salarial: Lista de Profissões, extraída da Info Online.

SimpleXML para manipular XML pelo PHP

Resumo:
Introdução

SimpleXML é uma extensão do PHP que permite ler e manipular XML de maneira bastante simples, embora com várias restrições. A principal restrição é que um elemento (tag) só pode conter texto ou outros elementos, nunca texto junto com outros elementos, como ocorre no HTML.

Transformação de Dados

Resumo:

Ao desenvolver uma grande aplicação ou um framework Web, é preciso ter consciência de que precisará trabalhar com camadas e que fará várias conversões entre estas camadas para manter o sistema portável. Vamos observar a imagem abaixo:

Conversão de dados entre camadas do sistema

Apesar de ser possível utilizar a mesma notação para representar números reais no formulário, na aplicação e no BD, pode ser que o usuário esteja em uma localidade que usa uma notação diferente da americana (usada no PHP), e pode ser que o BD não utilize a mesma notação que a aplicação para todos tipos de dados. Portanto, é importante realizar a transformação de dados entre as camadas do sistema.

São Paulo Perl Workshop

II São Paulo Perl Workshop

Dia ocorre a segunda edição do evento "São Paulo Perl Workshop", um evento promovido anualmente pelo grupo São Paulo Perl Mongers. Nesta edição, o evento será aberto com o tema "Desenvolvimento Ágil no Mundo Real" e contará com as presenças internacionais de Larry Wall, Brian D Foy e Brad Fitzpatrick.

Local: Espaço ABM
R. Antonio Comparato, 218 - Campo Belo
São Paulo - SP - Brasil

Telefone para contato: (11) 5534-4333

Informações sobre o evento são disponíveis no site oficial: http://www.perlworkshop.com.br/

Call to undefined function

Resumo:

Sempre surge alguém perguntando o que há de errado com seu PHP quando surge a mensagem "Fatal error: Call to undefined function ... in ... on line ...". Podem ser dois motivos: (i) ou o nome da função foi digitado errado ou (ii) a extensão que define a função não foi carregada.

Web Developer, plugin essencial

Resumo:
inspetor bugiganga
Introdução

Web Developer é um plugin para o navegador Firefox que oferece vários recursos úteis para programadores Web. Este artigo vai apresentar seus principais recursos.

De fato, ao instalar, a impressão que temos é que instalamos um canivete com mil e uma utilidades e nem sabemos por onde começar a utilizar. Aos poucos, descobrimos as de uso mais comum e nos adaptamos para utilizar o que interessa.

Obter Caminhos de Arquivos e Diretórios com PHP

Resumo:

Frequentemente surge uma ferramenta em uma aplicação que precisa recuperar um determinado dado de um caminho completo a um arquivo ou diretório. As vezes precisamos apenas do diretório, ou apenas o nome do arquivo, ou apenas a extensão do arquivo, etc. Frequentemente os programadores utilizam funções como explode, strpos e substr para obter o que querem. De fato, até conseguem, mas nem todos sabem que já existem funções no PHP próprias para isso.

Configurações do PHP

Resumo:
Introdução

PHP é uma linguagem interpretada que permite que sejam configuradas várias diretivas, tanto do core da linguagem quanto das suas extensões. A lista com todas as diretivas da linguagem são mostradas no manual.

Cada diretiva possui um "modo de mudança", que define onde e quando ela pode ser modificada. Por exemplo, algumas só podem ser definidas no arquivo de configurações gerenciado pelo administrador do servidor, por questões de segurança, enquanto outras podem ser alteradas pelo programador na própria aplicação.

Os modos de mudança das diretivas são:

  • PHP_INI_USER - Pode ser modificada com a função ini_set, arquivo .user.ini ou no Registro do Windows.
  • PHP_INI_PERDIR - Pode ser modificada no arquivo php.ini, .htaccess, httpd.conf ou .user.ini.
  • PHP_INI_SYSTEM - Pode ser modificada no arquivo php.ini ou httpd.conf.
  • PHP_INI_ALL - Pode ser modificada em qualquer lugar.

Observação: algumas diretivas pertenciam a um modo de mudança até determinada versão do PHP, mas mudaram para outro modo em outra versão do PHP. Estas informações são apresentadas na lista de diretivas da linguagem.

Formulários no HTML 5

Resumo:
HTML 5

O HTML 5 ainda está em fase de desenvolvimento, porém, já estão previstas várias melhorias. Algumas destas novidades estão relacionadas à criação de formulários. Vamos listar algumas delas, lembrando que estas informações estão sujeitas a mudanças.

Otimização de consultas SQL usando LIMIT

Resumo:
performance

É muito comum realizar consultas no Banco de Dados que esperam receber no máximo uma linha de resultado. Por exemplo, durante a autenticação de um usuário (log-in), para recuperar o registro do BD e comparar a senha com aquela informada no formulário.

Nestes casos, pode ser útil incluir a cláusula "LIMIT", implementada por diferentes SGBDs (por exemplo, MySQL e PostgreSQL).

JSON (JavaScript Object Notation)

Resumo:
Introdução

JSON (JavaScript Object Notation) é um mecanismo de codificação/decodificação de valores para intercâmbio de dados. Ele é nativo da linguagem JavaScript, mas outras linguagens dão suporte ao mecanismo em função de sua simplicidade. PHP possui uma extensão que consegue codificar/decodificar valores de JSON para os tipos correspondentes do PHP e vice-versa. O funcionamento é semelhante ao visto nas funções serialize e unserialize, a diferença é que a linguagem JavaScript compreende um pacote codificado com JSON nativamente, mas não compreende um pacote codificado com serialize nativamente.

Gerando Códigos e Símbolos Unicode pelo PHP

Resumo:

Já falamos sobre Unicode, e sabemos que os símbolos UTF-8 podem precisar de 1 a 4 bytes devido ao número de símbolos definidos pela tabela Unicode e pelo funcionamento do algoritimo de codificação/decodificação UTF-8.

Para ajudar em algumas operações com strings com texto em UTF-8, pode ser necessário utilizar um recurso extra. A seguir, são disponíveis algumas funções para trabalhar com UTF-8:

Judy Arrays do PHP

Resumo:
Introdução

Judy Array é uma extensão Pecl (código em C que possui interface para utilização em PHP) que implementa arrays associativos com os benefícios de escalabilidade, alta performance e eficiência no uso de memória.

HTML Entities

Resumo:
Introdução

HTML é uma linguagem baseada em tags. Estas tags são definidas através de caracteres reservados (símbolos "<" e ">"). Além disso, as tags podem conter atributos definidos na forma: nome_do_atributo="valor" ou nome_do_atributo='valor'.

Com o uso de caracteres reservados, existe a necessidade de um mecanismo para representar estes mesmos caracteres fora do contexto nos quais são reservados. Ou seja, se desejamos mostrar um sinal de menor num documento HTML, precisamos representá-lo de outra forma, caso contrário, o interpretador de HTML pode achar que é um caractere reservado indicando o início de uma nova tag. O mecanismo que permite representar caracteres no HTML é chamado de HTML entities (ou "Entidades HTML").

Criar arquivos com nomes únicos em diretórios

Resumo:

Em sistemas que envolvem upload de um número indefinido de arquivos, é possível que o sistema armazene o arquivo no próprio Banco de Dados ou que ele armazene em algum diretório reservado para arquivos submetidos.

O primeiro caso normalmente não exige que os arquivos tenham nomes únicos (exceto por alguma restrição do sistema). No segundo caso, independente da forma como os diretórios são organizados, é necessário garantir que um arquivo tenha um nome único dentro de um diretório.

Evitando o "autocomplete" de navegadores

Resumo:
Introdução

Sistemas Dinâmicos Web normalmente são repletos de formulários. Em alguns deles, é útil que o navegador ofereça sugestões de preenchimento automático baseado no histórico de preenchimento de determinado campo. Normalmente os navegadores gravam estes tipos de informação de acordo com o valor do atributo "name" do input de texto (e, talvez, de acordo com a URL em que o campo foi gerado).

Porém, em alguns campos, não desejamos este recurso por uma questão de segurança e/ou confidencialidade.

Funções com número indefinido de parâmetros em PHP

Resumo:

Algumas funções em PHP possuem um número indefinido de parâmetros. Por exemplo: printf, onde o primeiro parâmetro é o "formato" e os demais são definidos de acordo com o valor do formato.

Para fazer uma função com número indefinido de parâmetros, basta usar algumas funções especiais do PHP:

  • func_num_args - Retorna o número de parâmetros informados para a função.
  • func_get_arg - Retorna um parâmetro determinado (pela posição).
  • func_get_args - Retorna os valores passados por parâmetro na forma de um array indexado numericamente.

Isolamento de Transações no BD

Resumo:
Introdução

Transações em Bancos de Dados permitem encapsular um conjunto de instruções que devem ocorrer para garantir as propriedades ACID (Atomicidade, Consistência, Isolamento e Durabilidade).

A SQL-92 expõe 3 fenômenos que podem ocorrer durante a execução de blocos de consultas concorrentes (em paralelo). Para cada fenômeno, existe um tipo de isolamento de transação que é capaz de solucioná-lo. Mas observe que "solucionar", neste caso, não significa que todas as consultas das transações irão ocorrer. Significa que o bloco de instruções será executado por completo, ou será abortado automaticamente, através de um rollback implícito.

Abrir Arquivos CSV com PHP

Resumo:
Introdução

CSV (Comma-Separated Values) é um formato de arquivo texto para armazenamento de dados de forma bastante simples, e agrupada na forma de tabela (planilha). Ele pode ser gerado com qualquer editor de texto puro (TXT), bastando seguir as regras de sintaxe (definidas em RFC 4180).

Este formato é bastante útil para exportação e importação de dados entre sistemas. Você pode, por exemplo, pedir para uma tabela do MySQL ser exportada para CSV e, então, ser importada pelo seu sistema que utiliza outro banco de dados.

Otimização de métodos que retornam arrays em PHP

Resumo:
performance

Existem métodos que servem apenas para retornar arrays. Em alguns casos, estes arrays são muito grandes e ocupam muito espaço no próprio arquivo da classe onde o método se encontra. Arquivos muito grandes acarretam em uso de memória para carregá-los. Por este motivo pode ser útil considerar uma estratégia de otimização deste array, para que ele só seja carregado caso necessário (consulta sob demanda).

PHP 5.3.5 e PHP 5.2.17

Resumo:

Quem se apressou para baixar a nova versão do PHP no final de 2010 (5.3.4 ou 5.2.16), já pode tratar de baixar a versão substituta imediata. Dia 06/01/2011 foram disponibilizadas as versões 5.3.5 e 5.2.17, que corrigem apenas um bug com a conversão de um determinado número de string para float.

Otimização de métodos PHP com cache de resultados

Resumo:
performance

Existem métodos que calculam uma informação de acordo com parâmetros informados (ou não) e retornam um resultado. Para alguns destes métodos, pode ser útil utilizar um cache de resultados para otimizar chamadas sucessivas ao método com parâmetros idênticos.

Para prover a otimização destes métodos, é utilizada uma variável estática que guarda os resultados já calculados.

CSS Dinâmico

Resumo:

Normalmente a linguagem PHP é utilizada para gerar HTML dinamicamente. Porém, a linguagem PHP pode gerar qualquer tipo de arquivo, desde que se conheça a especificação do tipo de arquivo. Gerar um arquivo CSS dinamicamente é muito simples pois é um tipo de arquivo texto com uma sintaxe bastante simples.

Ano novo, PHP novo

2011 chegou! E alguns dias atrás (em 16/12/2010), o php.net anunciou o fim do suporte à versão 5.2 do PHP. Neste dia, foi lançada a última versão da família 5.2, que foi a 5.2.16.

Programadores são encorajados a usar a família 5.3, que já tem mais de um ano de lançamento, e atualmente está na versão 5.3.4 (lançada dia 10/12/2010).