27
Jun

PHP From Hell

Embarcando nessa onda de posts semanais que uma galera de blogueiros fazem, resolvi criar a seção “PHP From Hell”. Vou tentar - eu disse tentar :D - postar alguma coisa dessa seção toda sexta-feira. A idéia é postar dicas de funcionalidades do PHP que pouca gente ( incluindo yo hehehe ) conhece.

Vou começar falando da função extract. Esta função importa elementos de um array associativo para a tabela de símbolos. Trocando em miúdos, os índices do array passam a ser variáveis cujo os valores são os seus correspondentes no array. Basicamente é alguma coisa parecida com o register_globals com câmbio manual :D.

Na prática a coisa funciona assim:

<?php

$marca = “Ferrari”;
$origem = “Los Cabos”;

$carros_collection = array(”marca”=>”Audi”,”ano”=>”2008″,”modelo”=>”A4″);
$busu_collection = array(”origem”=>”Lapa”,”destino”=>”Liberdade”);

extract($carros_collection, EXTR_PREFIX_SAME, “tidoc”);
extract($busu_collection, EXTR_SKIP);

echo “<BR/>$marca, $ano, $modelo, $tidoc_marca”;
echo “<BR/>$origem, $destino, $tidoc_origem”;?>

O resultado vai ser:

Ferrari, 2008, A4, Audi
Los Cabos, Liberdade

Mais de onde veio $tidoc_marca e onde foi parar o valor Lapa? Simples Padawan … Como você está inserindo elementos na tabela de símbolos, corre o risco de você cagar alguma coisa. Pra que isso não aconteça, você usa o parâmetro extract_type. É esse parâmetro que indica a forma que as colisões serão tratadas. Em nosso exemplo usamos EXTR_PREFIX_ALL e EXTR_SKIP, no primeiro, se já houver uma variável com o mesmo nome do elemento incorporado, o nome da nova variável irá receber o prefixo indicado no terceiro parâmetro. Com EXTR_SKIP, se ocorrer colisões, o novo valor é descartado.

Outras opções são:
EXTR_OVERWRITE, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID, EXTR_IF_EXISTS, EXTR_PREFIX_IF_EXISTS, EXTR_REFS.

Recomendo dar uma lida na documentação: http://www.php.net/manual/pt_BR/function.extract.php

24
Jun

Aplicações Desktop com PHP - Parte 1

Que o PHP é uma das linguagens de programação mais usadas em ambiente web, todo mundo sabe. Mas pouca gente sabe que também é possível criar aplicações desktop com ela. E é isso que nós iremos fazer. Para tal, iremos utilizar o PHP-GTK.

O que é GTK/GTK+?
O GTK (Gimp Tool Kit) é uma poderosa biblioteca para desenvolvimento de aplicações GUI multi-plataforma, muito utilizada no mundo linux e que vem ganhando seu espaço também no windows.

PHP-GTK
É linguagem binding que permite aos desenvolvedores PHP criarem aplicações gráficas multi-plataforma sem abrir mão dos recursos do PHP.

Vamos então instalar os trecos \o/

Ingredientes

  1. PHP-GTK
  2. Uma caneca com café

Instalação do PHP-GTK no Windows
Baixe aqui http://sourceforge.net/project/downloading.php?groupname=agata&filename=php-gtk2b.exe&use_mirror=ufpr o instalador, execute-o e seja feliz.

Instalação do PHP-GTK no Linux
Baixe aqui http://sourceforge.net/project/downloading.php?groupname=agata&filename=php-gtk2b.tar.gz&use_mirror=ufpr o pacote pré-compilado e siga os passos abaixo:

# tar -xvzf php-gtk2b.tar.gz
# mv php-gtk2 /usr/local/
# ln -sf /usr/local/php-gtk2/bin/php /usr/bin/php-gtk2

1,2,3, testando
Para testar crie um novo arquivo chamdo exemplo.php com o código abaixo:

<?php
if (!class_exists(’gtk’)) {
die(”O módulo php-gtk2 não foi carregado corretamente. Verifique seu php.ini.”);
}$wnd = &new GtkWindow();
$wnd->set_title(’Exemplo’);
$wnd->connect_simple(’destroy’, array(’gtk’, ‘main_quit’));
$label = &new GtkLabel(”Perdeu preiboy!’”);
$wnd->add($label);

$wnd->show_all();
Gtk::main();
?>

Para executar, vá até a linha de comando e execute:
No Linux

# php-gtk2 exemplo.php

No Windows

C:\php-gtk2\php.exe exemplo.php

É isso ai. No próximo post vamos explorar melhor os recursos do PHP-GTK.

Pra quem quiser saber mais sobre o projeto:
http://www.php-gtk.com.br/
http://gtk.php.net/
Abraços!

29
Mai

Firefox Download Day

Download Day 2008

O firefox pretende entrar pro guinness book como o software mais baixado em 24h. Faça como eu e os 31 pinguins da groenlândia, participe: http://www.spreadfirefox.com/pt-BR/worldrecord

12
Mai

Audio HDA INTEL Realtek ALC861-VD + Linux (Slackware 12)

Uma dica rápida pra quem tem problemas em configurar a placa de som HDA ALC861 no linux, em especial no Slackware 12.

Estou usando um notebook TOSHIBA SATELLITE A135 com linux Slackware 12, kernel 2.6.21.5-smp

Problema:
A placa de som parece estar funcionando corretamente, exceto pelo som que não sai :D

Antes de mais nada, verifique se o som não está no mute (perguntar não ofende) . Vá no shell e execute o alsamixer. Para ativar/desativar o mute, pressione a tecla “M”.

Ok, não está no mute e o som continua não saindo. Vamos então a solução.

INGREDIENTES

Alsa Drivers
Alsa Libs
Alsa Utils

  1. Baixe os itens acima no endereço oficial do projeto alsa: http://www.alsa-project.org/
  2. Descompacte os arquivos em uma pasta de sua preferência.
  3. Compile os pacotes desta forma:cd alsa-driver-xxxx
    ./configure –with-cards=hda-intel
    make
    sudo make install /* ou como root, apenas make install */

    cd alsa-lib-xxxx
    ./configure
    sudo make install /* idem ao item acima */

    cd alsa-utils-xxxx
    sudo make install /* idem aos itens anteriores */

  4. Como root ou usando sudo pare o alsa:
    /etc/init.d/alsasound stop
  5. Agora derrube e levante novamente o módulo snd-hda-intel
    modprobe -r snd-hda-intel /* derraba o módulo */
    modprobe snd-hda-intel /* levanta novamente */
  6. Agora você já pode configurar o volume com o kmix ou o alsamixer. Se usar o alsamixer, use depois o alsactl store 0 para salvar suas configuraçoes.

Agora você já pode fazer uma rave em sua casa. Até o próximo post.

07
Mai

Ataque de pelanca do Windows Vista

No último final de semana pude finalmente tirar um tempo pra instalar o bom e velho slackware no notebook. Lembro que saiu uma matéria no WNews a um tempo atrás falando sobre o novo gerenciador de partições do Vista. Levando em conta os problemas de compatibilidade dos programas com o novo windows ( incluindo o partition magic ), um bom particionador já embutido no sistema ia quebrar um galhão.

No vídeo o cara cria, apaga, redimensiona, joga pra cima, faz um catatau de coisas com as partições. Fiquei até empolgado. Como neste final de semana resolvi instalar o slack 12 e precisava redimensionar a partição onde o vista está instalado e assim criar as outras, não tive dúvidas, fui pro gerenciador ( compmgmt.msc ) cliquei na opção Diminuir ( Shrink ) e me deparo com um botão desabilitado :S.

Isso acontece, entre n motivos, porque o desfragmentador de arquivos do vista não move os arquivos da MFT ( Master File Table ) para o início da partição. Daí você não pode diminuir a dita cuja. Vamos então a solução:

INGREDIENTES

  • PerfectDisk 2008
  • Algum conhecimento
  • Paciência

Primeiramente, faça limpeza de disco usando o próprio assistente do windows ou o CCleaner
(http://www.ccleaner.com/download)
Desabilite restauração, arquivos de paginação e o despejo de memória fisica. Todas as opções se encontram nas propriedades do sistema (tecla win + break) nas abas Proteção do Sistema; Desempenho; Inicialização & Recuperação.

Depois que todos os itens estiverem desabilitados reinicie o computador. Baixa/instale/execute o PerfectDisk2008 ( http://www.raxco.com/products/downloadit/pd_download_home.cfm ).

É necessário fazer uma desfragmentação normal, que você pode fazer usando o próprio vista, o perfectdisk ou o auslogics disc e a outra é de arquivos de sistema … esse vai mover os famigerados MFTs. Esta última use o PerfectDisk. Escolha a opção System Files. Esse processo pode demorar um pouco eu não sei o tempo porque larguei o troço lá e fui dormir :D

Depois de finalizar as desfragmentações, a opção estará milagrosamente habilitada … diminua sua partição, habilite novamente as opções de sistema que desabilitou lá em cima, reinicie o PC e seja feliz :D.

28
Abr

Gerando documentos PDF com FPDF - Parte 02

Antes tarde do que nunca. Hoje iremos falar do método AddFont(). Este método serve para importar uma nova font TrueType ou Type1 ao documento PDF.

Ingredientes:

  • Conversor de fonts TrueType/Type1
  • Fonts TrueType/Type1
  • FPDF

>> ttf2pt1

Se você é usuário *nix, baixe a última versão aqui: http://ttf2pt1.sourceforge.net/download.html se for usuário windows, tente aqui: http://gnuwin32.sourceforge.net/packages/ttf2pt1.htm ou aqui: http://public.box.net/ischool

Após concluir o download, descompacte o arquivo em um diretório de sua preferência. Vá até a console ( bash, ksh, etc ou prompt de comando para os usuários do windows )  e execute o comando:

Windows
C:\Downloads\ttf2pt1>ttf2pt1 -a C:\WINDOWS\Fonts\Verdana.ttf Verdana
Linux
$./ttf2pt1 -a /mnt/WINDOWS/Fonts/Verdana.ttf Verdana

O comando acima irá produzir dois arquivos. Um com a extensão .AFM e o outro T1A. Agora vamos retornar ao PHP. Pegue os balai de gato gerados anteriormente e a fonte ttf ( em nosso caso Verdana.ttf ) e leve para o diretório font do FPDF. Agora estamos prontos pra criar o arquivo que irá gerar as fonts que serão usadas de fato em nosso script PHP. Crie um script PHP com o código abaixo.

<?php
require_once ‘makefont/makefont.php’;
MakeFont( ‘Verdana.ttf’, ‘Verdana.afm’, ‘ISO-8859-1′ );
?>

Tá pronta a bagaça. Agora basta executar o arquivo via CLI ( linha de comando ) ou por HTTP mesmo.

Pronto, agora você tem dois arquivos novos: Verdana.php e Verdana.z. Agora você já pode usar sua font Verdana em suas relatórios em PDF usando o método AddFont() como no exemplo abaixo.

<?phpdefine(”FPDF_FONTPATH”,”font/”);

require_once “fpdf_dir/fpdf.php”;

$pdf = &new FPDF(”L”,”mm”,”A4″);
$pdf->Open();
$pdf->AddPage();
$pdf->AddFont(”Verdana”);
$pdf->SetFont(”Verdana”,”B”, 14);
$pdf->Text(40,20,”Título do Relatório”);
$pdf->SetLineWidth(0.7);
$pdf->Line(40,22,200,22);
$pdf->SetXY(40,26);
$pdf->SetFont(,,12);
$pdf->Cell(30,5,”Modelo”,0,0,”C”,0);
$pdf->Cell(30,5,”Fabricante”,0,0,”C”,0);
$pdf->Output();

?>

É isso ai, mangaba não é não? Se ainda tiverem dúvidas, olhem este artigo feito pela iSchool http://ischool.000webhost.info/php/curso-fpdf-recursos-2 que é muito bom.

Abraços e até a próxima!

21
Abr

Gerando documentos PDF com FPDF - Parte 01

Olá pessoal!

Hoje vou iniciar uma série de postagens sobre como gerar documentos em PDF usando a classe FPDF.
Por agora vou mostrar como fazer a configuração básica e criar um exemplo funcional. Go, Go, Go!!

Você pode baixar o FPDF no site oficial do projeto: http://www.fpdf.org/. Para começar a criar seus arquivos em PDF, basta copiar os arquivos para seu servidor web. Certifique-se de que os arquivos estão no seu include path.

Vamos então à um exemplo prático:

<?php

define(’FPDF_FONTPATH’,'font/’);

require(’fpdf_dir/fpdf.php’);

$pdf = &new FPDF(”L”,”mm”,”A4″);
$pdf->Open();
$pdf->AddPage();
$pdf->SetFont(’Arial’,'B’, 14);
$pdf->Text(40,20,’Título do Relatório’);
$pdf->SetLineWidth(0.7);
$pdf->Line(40,22,200,22);
$pdf->SetXY(40,26);
$pdf->SetFont(”,”,12);
$pdf->Cell(30,5,’Modelo’,0,0,’C',0);
$pdf->Cell(30,5,’Fabricante’,0,0,’C',0);
$pdf->Output();
?>

Explicando o código:

Define o caminho para as fonts usadas pelo FPDF. Em outro post irei explicar como criar suas próprias fonts.
define(’FPDF_FONTPATH’,'font/’);

Inclui as definições da classe FPDF no script PHP.
require(’fpdf_dir/fpdf.php’);

Cria uma nova instância da classe FPDF para um documento com orientação paisagem (Landscape), com medidas em milímetros e no formato A4. Feito isso, o documento é iniciado.
$pdf = &new FPDF(”L”,”mm”,”A4″);

$pdf->Open();

Adiciona uma nova página ao documento.
$pdf->AddPage();

Define a font do documento como Arial, tamanho 14 em negrito. Essa configuração será válida até que SetFont() seja chamado novamente.
$pdf->SetFont(’Arial’,'B’, 14);

Escreve o texto “Título do Relatório” na linha 40 (eixo x) e coluna 20 (eixo y)
$pdf->Text(40,20,’Título do Relatório’);

Cria uma linha horizontal logo abaixo do texto definido anteriormente.
$pdf->SetLineWidth(0.7);
$pdf->Line(40,22,200,22);

Aponta o cursor para a posição (x,y) definida em SetXY(). Retira o negrito da font e altera o tamanho para 12.
$pdf->SetXY(40,26);
$pdf->SetFont(”,”,12);

Cria duas células com as mesmas dimensões ( 30mm de largura e 5mm de altura ), sem borda, apontando o cursor para o final da linha, após a célula criada, com o texto alinhado no centro e com prenchimento transparente.
$pdf->Cell(30,5,’Modelo’,0,0,’C',0);
$pdf->Cell(30,5,’Fabricante’,0,0,’C',0);

Finalmente, renderiza o seu documento \o/.
$pdf->Output();

Encoding

Caso você tenha problemas com acentuação na saída do documento, use a função iconv do PHP. Nela você irá converter um texto de um charset de origem para outro de destino. Use desta forma:
$pdf->Text(40,20,iconv(’utf-8′,’iso-8859-1′,’Título do Relatório’));

É isso ai, espero que tenham gostado. Um abraço e até o próximo post.